summaryrefslogtreecommitdiff
path: root/openstackclient/tests/compute
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/tests/compute')
-rw-r--r--openstackclient/tests/compute/v2/fakes.py2
-rw-r--r--openstackclient/tests/compute/v2/test_security_group_rule.py157
-rw-r--r--openstackclient/tests/compute/v2/test_server.py153
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):