diff options
Diffstat (limited to 'openstackclient/tests/compute')
| -rw-r--r-- | openstackclient/tests/compute/v2/fakes.py | 2 | ||||
| -rw-r--r-- | openstackclient/tests/compute/v2/test_security_group_rule.py | 157 | ||||
| -rw-r--r-- | openstackclient/tests/compute/v2/test_server.py | 153 |
3 files changed, 229 insertions, 83 deletions
diff --git a/openstackclient/tests/compute/v2/fakes.py b/openstackclient/tests/compute/v2/fakes.py index 91cc2bd2..ecf7f599 100644 --- a/openstackclient/tests/compute/v2/fakes.py +++ b/openstackclient/tests/compute/v2/fakes.py @@ -76,8 +76,6 @@ QUOTA = { QUOTA_columns = tuple(sorted(QUOTA)) QUOTA_data = tuple(QUOTA[x] for x in sorted(QUOTA)) -block_device_mapping = 'vda=' + volume_fakes.volume_name + ':::0' - service_host = 'host_test' service_binary = 'compute_test' service_status = 'enabled' diff --git a/openstackclient/tests/compute/v2/test_security_group_rule.py b/openstackclient/tests/compute/v2/test_security_group_rule.py index 9516f8dd..cfe3d46e 100644 --- a/openstackclient/tests/compute/v2/test_security_group_rule.py +++ b/openstackclient/tests/compute/v2/test_security_group_rule.py @@ -18,6 +18,7 @@ from openstackclient.compute.v2 import security_group from openstackclient.tests.compute.v2 import fakes as compute_fakes from openstackclient.tests import fakes from openstackclient.tests.identity.v2_0 import fakes as identity_fakes +from openstackclient.tests import utils security_group_id = '11' @@ -25,19 +26,13 @@ security_group_name = 'wide-open' security_group_description = 'nothing but net' security_group_rule_id = '1' - -SECURITY_GROUP = { - 'id': security_group_id, - 'name': security_group_name, - 'description': security_group_description, - 'tenant_id': identity_fakes.project_id, -} +security_group_rule_cidr = '0.0.0.0/0' SECURITY_GROUP_RULE = { 'id': security_group_rule_id, 'group': {}, 'ip_protocol': 'tcp', - 'ip_range': '0.0.0.0/0', + 'ip_range': {'cidr': security_group_rule_cidr}, 'parent_group_id': security_group_id, 'from_port': 0, 'to_port': 0, @@ -47,12 +42,32 @@ SECURITY_GROUP_RULE_ICMP = { 'id': security_group_rule_id, 'group': {}, 'ip_protocol': 'icmp', - 'ip_range': '0.0.0.0/0', + 'ip_range': {'cidr': security_group_rule_cidr}, 'parent_group_id': security_group_id, 'from_port': -1, 'to_port': -1, } +SECURITY_GROUP_RULE_REMOTE_GROUP = { + 'id': security_group_rule_id, + 'group': {"tenant_id": "14", "name": "default"}, + 'ip_protocol': 'tcp', + 'ip_range': {}, + 'parent_group_id': security_group_id, + 'from_port': 80, + 'to_port': 80, +} + +SECURITY_GROUP = { + 'id': security_group_id, + 'name': security_group_name, + 'description': security_group_description, + 'tenant_id': identity_fakes.project_id, + 'rules': [SECURITY_GROUP_RULE, + SECURITY_GROUP_RULE_ICMP, + SECURITY_GROUP_RULE_REMOTE_GROUP], +} + class FakeSecurityGroupRuleResource(fakes.FakeResource): @@ -115,25 +130,26 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): 'tcp', 0, 0, - '0.0.0.0/0', + security_group_rule_cidr, + None, ) collist = ( - 'group', 'id', 'ip_protocol', 'ip_range', 'parent_group_id', 'port_range', + 'remote_security_group', ) self.assertEqual(collist, columns) datalist = ( - {}, security_group_rule_id, 'tcp', - '', + security_group_rule_cidr, security_group_id, '0:0', + '', ) self.assertEqual(datalist, data) @@ -166,25 +182,26 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): 'tcp', 20, 21, - '0.0.0.0/0', + security_group_rule_cidr, + None, ) collist = ( - 'group', 'id', 'ip_protocol', 'ip_range', 'parent_group_id', 'port_range', + 'remote_security_group', ) self.assertEqual(collist, columns) datalist = ( - {}, security_group_rule_id, 'tcp', - '', + security_group_rule_cidr, security_group_id, '20:21', + '', ) self.assertEqual(datalist, data) @@ -192,6 +209,8 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): sg_rule = copy.deepcopy(SECURITY_GROUP_RULE) sg_rule['from_port'] = 22 sg_rule['to_port'] = 22 + sg_rule['ip_range'] = {} + sg_rule['group'] = {'name': security_group_name} self.sg_rules_mock.create.return_value = FakeSecurityGroupRuleResource( None, sg_rule, @@ -201,10 +220,12 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): arglist = [ security_group_name, '--dst-port', '22', + '--src-group', security_group_id, ] verifylist = [ ('group', security_group_name), ('dst_port', (22, 22)), + ('src_group', security_group_id), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -217,25 +238,26 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): 'tcp', 22, 22, - '0.0.0.0/0', + security_group_rule_cidr, + security_group_id, ) collist = ( - 'group', 'id', 'ip_protocol', 'ip_range', 'parent_group_id', 'port_range', + 'remote_security_group', ) self.assertEqual(collist, columns) datalist = ( - {}, security_group_rule_id, 'tcp', '', security_group_id, '22:22', + security_group_name, ) self.assertEqual(datalist, data) @@ -267,42 +289,48 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): 'udp', 0, 0, - '0.0.0.0/0', + security_group_rule_cidr, + None, ) collist = ( - 'group', 'id', 'ip_protocol', 'ip_range', 'parent_group_id', 'port_range', + 'remote_security_group', ) self.assertEqual(collist, columns) datalist = ( - {}, security_group_rule_id, 'udp', - '', + security_group_rule_cidr, security_group_id, '0:0', + '', ) self.assertEqual(datalist, data) def test_security_group_rule_create_icmp(self): + sg_rule_cidr = '10.0.2.0/24' + sg_rule = copy.deepcopy(SECURITY_GROUP_RULE_ICMP) + sg_rule['ip_range'] = {'cidr': sg_rule_cidr} self.sg_rules_mock.create.return_value = FakeSecurityGroupRuleResource( None, - copy.deepcopy(SECURITY_GROUP_RULE_ICMP), + sg_rule, loaded=True, ) arglist = [ security_group_name, '--proto', 'ICMP', + '--src-ip', sg_rule_cidr, ] verifylist = [ ('group', security_group_name), ('proto', 'ICMP'), + ('src_ip', sg_rule_cidr) ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -315,24 +343,95 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule): 'ICMP', -1, -1, - '0.0.0.0/0', + sg_rule_cidr, + None, ) collist = ( - 'group', 'id', 'ip_protocol', 'ip_range', 'parent_group_id', 'port_range', + 'remote_security_group', ) self.assertEqual(collist, columns) datalist = ( - {}, security_group_rule_id, 'icmp', - '', + sg_rule_cidr, security_group_id, '', + '', ) self.assertEqual(datalist, data) + + def test_security_group_rule_create_src_invalid(self): + arglist = [ + security_group_name, + '--proto', 'ICMP', + '--src-ip', security_group_rule_cidr, + '--src-group', security_group_id, + ] + + self.assertRaises(utils.ParserException, + self.check_parser, self.cmd, arglist, []) + + +class TestSecurityGroupRuleList(TestSecurityGroupRule): + + def setUp(self): + super(TestSecurityGroupRuleList, self).setUp() + + self.secgroups_mock.get.return_value = FakeSecurityGroupRuleResource( + None, + copy.deepcopy(SECURITY_GROUP), + loaded=True, + ) + + # Get the command object to test + self.cmd = security_group.ListSecurityGroupRule(self.app, None) + + def test_security_group_rule_list(self): + + arglist = [ + security_group_name, + ] + verifylist = [ + ('group', security_group_name), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # DisplayCommandBase.take_action() returns two tuples + columns, data = self.cmd.take_action(parsed_args) + + collist = ( + 'ID', + 'IP Protocol', + 'IP Range', + 'Port Range', + 'Remote Security Group', + ) + self.assertEqual(collist, columns) + datalist = (( + security_group_rule_id, + 'tcp', + security_group_rule_cidr, + '0:0', + '', + ), ( + security_group_rule_id, + 'icmp', + security_group_rule_cidr, + '', + '', + ), ( + security_group_rule_id, + 'tcp', + '', + '80:80', + 'default', + ), + ) + self.assertEqual(datalist, tuple(data)) diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py index ce2dcdf7..ef8ae3e1 100644 --- a/openstackclient/tests/compute/v2/test_server.py +++ b/openstackclient/tests/compute/v2/test_server.py @@ -13,7 +13,6 @@ # under the License. # -import copy import mock import testtools @@ -22,7 +21,6 @@ from openstackclient.common import exceptions from openstackclient.common import utils as common_utils from openstackclient.compute.v2 import server from openstackclient.tests.compute.v2 import fakes as compute_fakes -from openstackclient.tests import fakes from openstackclient.tests.image.v2 import fakes as image_fakes from openstackclient.tests import utils from openstackclient.tests.volume.v2 import fakes as volume_fakes @@ -33,23 +31,23 @@ class TestServer(compute_fakes.TestComputev2): def setUp(self): super(TestServer, self).setUp() - # Get a shortcut to the ServerManager Mock + # Get a shortcut to the compute client ServerManager Mock self.servers_mock = self.app.client_manager.compute.servers self.servers_mock.reset_mock() - # Get a shortcut to the ImageManager Mock + # Get a shortcut to the compute client ImageManager Mock self.cimages_mock = self.app.client_manager.compute.images self.cimages_mock.reset_mock() - # Get a shortcut to the FlavorManager Mock + # Get a shortcut to the compute client FlavorManager Mock self.flavors_mock = self.app.client_manager.compute.flavors self.flavors_mock.reset_mock() - # Get a shortcut to the ImageManager Mock + # Get a shortcut to the image client ImageManager Mock self.images_mock = self.app.client_manager.image.images self.images_mock.reset_mock() - # Get a shortcut to the VolumeManager Mock + # Get a shortcut to the volume client VolumeManager Mock self.volumes_mock = self.app.client_manager.volume.volumes self.volumes_mock.reset_mock() @@ -107,22 +105,15 @@ class TestServerCreate(TestServer): self.servers_mock.create.return_value = self.new_server - self.image = fakes.FakeResource( - None, - copy.deepcopy(image_fakes.IMAGE), - loaded=True, - ) + self.image = image_fakes.FakeImage.create_one_image() self.cimages_mock.get.return_value = self.image self.flavor = compute_fakes.FakeFlavor.create_one_flavor() self.flavors_mock.get.return_value = self.flavor - self.volume = fakes.FakeResource( - None, - copy.deepcopy(volume_fakes.VOLUME), - loaded=True, - ) + self.volume = volume_fakes.FakeVolume.create_one_volume() self.volumes_mock.get.return_value = self.volume + self.block_device_mapping = 'vda=' + self.volume.name + ':::0' # Get the command object to test self.cmd = server.CreateServer(self.app, None) @@ -224,12 +215,29 @@ class TestServerCreate(TestServer): self.app.client_manager.auth_ref.service_catalog.get_endpoints = ( get_endpoints) - list_networks = mock.Mock() - list_ports = mock.Mock() - self.app.client_manager.network.list_networks = list_networks - self.app.client_manager.network.list_ports = list_ports - list_networks.return_value = {'networks': [{'id': 'net1_uuid'}]} - list_ports.return_value = {'ports': [{'id': 'port1_uuid'}]} + find_network = mock.Mock() + find_port = mock.Mock() + network_client = self.app.client_manager.network + network_client.find_network = find_network + network_client.find_port = find_port + network_resource = mock.Mock() + network_resource.id = 'net1_uuid' + port_resource = mock.Mock() + port_resource.id = 'port1_uuid' + find_network.return_value = network_resource + find_port.return_value = port_resource + + # Mock sdk APIs. + _network = mock.Mock() + _network.id = 'net1_uuid' + _port = mock.Mock() + _port.id = 'port1_uuid' + find_network = mock.Mock() + find_port = mock.Mock() + find_network.return_value = _network + find_port.return_value = _port + self.app.client_manager.network.find_network = find_network + self.app.client_manager.network.find_port = find_port # DisplayCommandBase.take_action() returns two tuples columns, data = self.cmd.take_action(parsed_args) @@ -361,13 +369,13 @@ class TestServerCreate(TestServer): arglist = [ '--image', 'image1', '--flavor', self.flavor.id, - '--block-device-mapping', compute_fakes.block_device_mapping, + '--block-device-mapping', self.block_device_mapping, self.new_server.name, ] verifylist = [ ('image', 'image1'), ('flavor', self.flavor.id), - ('block_device_mapping', [compute_fakes.block_device_mapping]), + ('block_device_mapping', [self.block_device_mapping]), ('config_drive', False), ('server_name', self.new_server.name), ] @@ -377,9 +385,9 @@ class TestServerCreate(TestServer): columns, data = self.cmd.take_action(parsed_args) real_volume_mapping = ( - (compute_fakes.block_device_mapping.split('=', 1)[1]).replace( - volume_fakes.volume_name, - volume_fakes.volume_id)) + (self.block_device_mapping.split('=', 1)[1]).replace( + self.volume.name, + self.volume.id)) # Set expected values kwargs = dict( @@ -537,13 +545,9 @@ class TestServerImageCreate(TestServer): # This is the return value for utils.find_resource() self.servers_mock.get.return_value = self.server - self.servers_mock.create_image.return_value = image_fakes.image_id - - self.images_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(image_fakes.IMAGE), - loaded=True, - ) + self.image = image_fakes.FakeImage.create_one_image() + self.images_mock.get.return_value = self.image + self.servers_mock.create_image.return_value = self.image.id # Get the command object to test self.cmd = server.CreateServerImage(self.app, None) @@ -569,12 +573,12 @@ class TestServerImageCreate(TestServer): collist = ('id', 'name', 'owner', 'protected', 'tags', 'visibility') self.assertEqual(collist, columns) datalist = ( - image_fakes.image_id, - image_fakes.image_name, - image_fakes.image_owner, - image_fakes.image_protected, - image_fakes.image_tags, - image_fakes.image_visibility, + self.image.id, + self.image.name, + self.image.owner, + self.image.protected, + self.image.tags, + self.image.visibility, ) self.assertEqual(datalist, data) @@ -601,12 +605,12 @@ class TestServerImageCreate(TestServer): collist = ('id', 'name', 'owner', 'protected', 'tags', 'visibility') self.assertEqual(collist, columns) datalist = ( - image_fakes.image_id, - image_fakes.image_name, - image_fakes.image_owner, - image_fakes.image_protected, - image_fakes.image_tags, - image_fakes.image_visibility, + self.image.id, + self.image.name, + self.image.owner, + self.image.protected, + self.image.tags, + self.image.visibility, ) self.assertEqual(datalist, data) @@ -620,10 +624,17 @@ class TestServerList(TestServer): 'Status', 'Networks', ) - - # Data returned by corresponding Nova API. The elements in this list are - # tuples filled with server attributes. - data = [] + columns_long = ( + 'ID', + 'Name', + 'Status', + 'Task State', + 'Power State', + 'Networks', + 'Availability Zone', + 'Host', + 'Properties', + ) # Default search options, in the case of no commandline option specified. search_opts = { @@ -652,12 +663,18 @@ class TestServerList(TestServer): def setUp(self): super(TestServerList, self).setUp() - # The fake servers' attributes. + # The fake servers' attributes. Use the original attributes names in + # nova, not the ones printed by "server list" command. self.attrs = { 'status': 'ACTIVE', + 'OS-EXT-STS:task_state': 'None', + 'OS-EXT-STS:power_state': 0x01, # Running 'networks': { u'public': [u'10.20.30.40', u'2001:db8::5'] }, + 'OS-EXT-AZ:availability_zone': 'availability-zone-xxx', + 'OS-EXT-SRV-ATTR:host': 'host-name-xxx', + 'Metadata': '', } # The servers to be listed. @@ -669,6 +686,9 @@ class TestServerList(TestServer): self.cmd = server.ListServer(self.app, None) # Prepare data returned by fake Nova API. + self.data = [] + self.data_long = [] + for s in self.servers: self.data.append(( s.id, @@ -676,6 +696,19 @@ class TestServerList(TestServer): s.status, server._format_servers_list_networks(s.networks), )) + self.data_long.append(( + s.id, + s.name, + s.status, + getattr(s, 'OS-EXT-STS:task_state'), + server._format_servers_list_power_state( + getattr(s, 'OS-EXT-STS:power_state') + ), + server._format_servers_list_networks(s.networks), + getattr(s, 'OS-EXT-AZ:availability_zone'), + getattr(s, 'OS-EXT-SRV-ATTR:host'), + s.Metadata, + )) def test_server_list_no_option(self): arglist = [] @@ -691,6 +724,22 @@ class TestServerList(TestServer): self.assertEqual(self.columns, columns) self.assertEqual(tuple(self.data), tuple(data)) + def test_server_list_long_option(self): + arglist = [ + '--long', + ] + verifylist = [ + ('all_projects', False), + ('long', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.servers_mock.list.assert_called_with(**self.kwargs) + self.assertEqual(self.columns_long, columns) + self.assertEqual(tuple(self.data_long), tuple(data)) + class TestServerLock(TestServer): |
