summaryrefslogtreecommitdiff
path: root/openstackclient/tests/unit/compute
diff options
context:
space:
mode:
authorRui Chen <chenrui.momo@gmail.com>2017-05-03 15:17:10 +0800
committerDean Troyer <dtroyer@gmail.com>2017-05-22 20:32:01 +0000
commit45496feee6ae781dc0c1df4a0e5bd71b05653748 (patch)
tree752980b8d6c52810381049b2feceacf2ed801d06 /openstackclient/tests/unit/compute
parent411cda722b082bc9274dd23f7e6b0c47e2cc9765 (diff)
downloadpython-openstackclient-45496feee6ae781dc0c1df4a0e5bd71b05653748.tar.gz
Create server with security group ID and name
Both resource ID and name are supported to identify an object in openstackclient to make user easy to input, for security group, nova only support security group name in API when launch a new server, this patch convert ID to name, then pass name to nova API, and check the security group exist before creating server. Change-Id: I1ed4a967fb9de3f91c8945a1ef63f6c7b6b2dfb2 Closes-Bug: #1687814
Diffstat (limited to 'openstackclient/tests/unit/compute')
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py97
1 files changed, 96 insertions, 1 deletions
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 9370bf6b..77e9c331 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -24,6 +24,7 @@ from oslo_utils import timeutils
from openstackclient.compute.v2 import server
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
from openstackclient.tests.unit.image.v2 import fakes as image_fakes
+from openstackclient.tests.unit.network.v2 import fakes as network_fakes
from openstackclient.tests.unit import utils
from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes
@@ -414,8 +415,16 @@ class TestServerCreate(TestServer):
# In base command class ShowOne in cliff, abstract method take_action()
# returns a two-part tuple with a tuple of column names and a tuple of
# data to be shown.
+ fake_sg = network_fakes.FakeSecurityGroup.create_security_groups()
+ mock_find_sg = (
+ network_fakes.FakeSecurityGroup.get_security_groups(fake_sg)
+ )
+ self.app.client_manager.network.find_security_group = mock_find_sg
+
columns, data = self.cmd.take_action(parsed_args)
+ mock_find_sg.assert_called_once_with('securitygroup',
+ ignore_missing=False)
# Set expected values
kwargs = dict(
meta={'Beta': 'b'},
@@ -423,7 +432,7 @@ class TestServerCreate(TestServer):
reservation_id=None,
min_count=1,
max_count=1,
- security_groups=['securitygroup'],
+ security_groups=[fake_sg[0].id],
userdata=None,
key_name='keyname',
availability_zone=None,
@@ -443,6 +452,92 @@ class TestServerCreate(TestServer):
self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist(), data)
+ def test_server_create_with_not_exist_security_group(self):
+ arglist = [
+ '--image', 'image1',
+ '--flavor', 'flavor1',
+ '--key-name', 'keyname',
+ '--security-group', 'securitygroup',
+ '--security-group', 'not_exist_sg',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('image', 'image1'),
+ ('flavor', 'flavor1'),
+ ('key_name', 'keyname'),
+ ('security_group', ['securitygroup', 'not_exist_sg']),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ fake_sg = network_fakes.FakeSecurityGroup.create_security_groups(
+ count=1)
+ fake_sg.append(exceptions.NotFound(code=404))
+ mock_find_sg = (
+ network_fakes.FakeSecurityGroup.get_security_groups(fake_sg)
+ )
+ self.app.client_manager.network.find_security_group = mock_find_sg
+
+ self.assertRaises(exceptions.NotFound,
+ self.cmd.take_action,
+ parsed_args)
+ mock_find_sg.assert_called_with('not_exist_sg',
+ ignore_missing=False)
+
+ def test_server_create_with_security_group_in_nova_network(self):
+ arglist = [
+ '--image', 'image1',
+ '--flavor', 'flavor1',
+ '--key-name', 'keyname',
+ '--security-group', 'securitygroup',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('image', 'image1'),
+ ('flavor', 'flavor1'),
+ ('key_name', 'keyname'),
+ ('security_group', ['securitygroup']),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ with mock.patch.object(self.app.client_manager,
+ 'is_network_endpoint_enabled',
+ return_value=False):
+ with mock.patch.object(self.app.client_manager.compute.api,
+ 'security_group_find',
+ return_value={'name': 'fake_sg'}
+ ) as mock_find:
+ columns, data = self.cmd.take_action(parsed_args)
+ mock_find.assert_called_once_with('securitygroup')
+
+ # Set expected values
+ kwargs = dict(
+ meta=None,
+ files={},
+ reservation_id=None,
+ min_count=1,
+ max_count=1,
+ security_groups=['fake_sg'],
+ userdata=None,
+ key_name='keyname',
+ availability_zone=None,
+ block_device_mapping_v2=[],
+ nics=[],
+ scheduler_hints={},
+ config_drive=None,
+ )
+ # ServerManager.create(name, image, flavor, **kwargs)
+ self.servers_mock.create.assert_called_with(
+ self.new_server.name,
+ self.image,
+ self.flavor,
+ **kwargs
+ )
+
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist(), data)
+
def test_server_create_with_network(self):
arglist = [
'--image', 'image1',