summaryrefslogtreecommitdiff
path: root/openstackclient/tests
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/tests')
-rw-r--r--openstackclient/tests/compute/v2/test_agent.py73
-rw-r--r--openstackclient/tests/compute/v2/test_server.py53
-rw-r--r--openstackclient/tests/identity/v3/test_consumer.py2
-rw-r--r--openstackclient/tests/identity/v3/test_domain.py8
-rw-r--r--openstackclient/tests/identity/v3/test_endpoint.py14
-rw-r--r--openstackclient/tests/identity/v3/test_identity_provider.py6
-rw-r--r--openstackclient/tests/identity/v3/test_mappings.py2
-rw-r--r--openstackclient/tests/identity/v3/test_protocol.py2
-rw-r--r--openstackclient/tests/identity/v3/test_region.py8
-rw-r--r--openstackclient/tests/identity/v3/test_service.py2
-rw-r--r--openstackclient/tests/identity/v3/test_service_provider.py13
-rw-r--r--openstackclient/tests/image/v1/test_image.py2
-rw-r--r--openstackclient/tests/image/v2/fakes.py33
-rw-r--r--openstackclient/tests/image/v2/test_image.py14
-rw-r--r--openstackclient/tests/network/v2/test_address_scope.py27
-rw-r--r--openstackclient/tests/network/v2/test_floating_ip.py4
-rw-r--r--openstackclient/tests/network/v2/test_ip_availability.py14
-rw-r--r--openstackclient/tests/network/v2/test_network.py50
-rw-r--r--openstackclient/tests/network/v2/test_security_group.py35
-rw-r--r--openstackclient/tests/network/v2/test_security_group_rule.py34
-rw-r--r--openstackclient/tests/network/v2/test_subnet.py21
-rw-r--r--openstackclient/tests/network/v2/test_subnet_pool.py25
-rw-r--r--openstackclient/tests/volume/v2/fakes.py60
-rw-r--r--openstackclient/tests/volume/v2/test_backup.py70
-rw-r--r--openstackclient/tests/volume/v2/test_qos_specs.py72
-rw-r--r--openstackclient/tests/volume/v2/test_snapshot.py63
-rw-r--r--openstackclient/tests/volume/v2/test_type.py20
-rw-r--r--openstackclient/tests/volume/v2/test_volume.py33
28 files changed, 572 insertions, 188 deletions
diff --git a/openstackclient/tests/compute/v2/test_agent.py b/openstackclient/tests/compute/v2/test_agent.py
index da329728..7695ee41 100644
--- a/openstackclient/tests/compute/v2/test_agent.py
+++ b/openstackclient/tests/compute/v2/test_agent.py
@@ -25,7 +25,9 @@ from openstackclient.tests import utils as tests_utils
class TestAgent(compute_fakes.TestComputev2):
- fake_agent = compute_fakes.FakeAgent.create_one_agent()
+ attr = {}
+ attr['agent_id'] = 1
+ fake_agent = compute_fakes.FakeAgent.create_one_agent(attr)
columns = (
'agent_id',
@@ -238,21 +240,34 @@ class TestAgentSet(TestAgent):
super(TestAgentSet, self).setUp()
self.agents_mock.update.return_value = self.fake_agent
+ self.agents_mock.list.return_value = [self.fake_agent]
self.cmd = agent.SetAgent(self.app, None)
- def test_agent_set(self):
+ def test_agent_set_nothing(self):
arglist = [
- 'id',
- 'new-version',
- 'new-url',
- 'new-md5hash',
+ '1',
+ ]
+ verifylist = [
+ ('id', '1'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ self.agents_mock.update.assert_called_with(parsed_args.id,
+ self.fake_agent.version,
+ self.fake_agent.url,
+ self.fake_agent.md5hash)
+ self.assertIsNone(result)
+
+ def test_agent_set_version(self):
+ arglist = [
+ '1',
+ '--agent-version', 'new-version',
]
verifylist = [
- ('id', 'id'),
+ ('id', '1'),
('version', 'new-version'),
- ('url', 'new-url'),
- ('md5hash', 'new-md5hash'),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -260,6 +275,46 @@ class TestAgentSet(TestAgent):
self.agents_mock.update.assert_called_with(parsed_args.id,
parsed_args.version,
+ self.fake_agent.url,
+ self.fake_agent.md5hash)
+ self.assertIsNone(result)
+
+ def test_agent_set_url(self):
+ arglist = [
+ '1',
+ '--url', 'new-url',
+ ]
+
+ verifylist = [
+ ('id', '1'),
+ ('url', 'new-url'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ self.agents_mock.update.assert_called_with(parsed_args.id,
+ self.fake_agent.version,
parsed_args.url,
+ self.fake_agent.md5hash)
+ self.assertIsNone(result)
+
+ def test_agent_set_md5hash(self):
+ arglist = [
+ '1',
+ '--md5hash', 'new-md5hash',
+ ]
+
+ verifylist = [
+ ('id', '1'),
+ ('md5hash', 'new-md5hash'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ self.agents_mock.update.assert_called_with(parsed_args.id,
+ self.fake_agent.version,
+ self.fake_agent.url,
parsed_args.md5hash)
self.assertIsNone(result)
diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py
index 24f92e46..1c5a5fe4 100644
--- a/openstackclient/tests/compute/v2/test_server.py
+++ b/openstackclient/tests/compute/v2/test_server.py
@@ -43,6 +43,11 @@ class TestServer(compute_fakes.TestComputev2):
self.flavors_mock = self.app.client_manager.compute.flavors
self.flavors_mock.reset_mock()
+ # Get a shortcut to the compute client SecurityGroupManager Mock
+ self.security_groups_mock = \
+ self.app.client_manager.compute.security_groups
+ self.security_groups_mock.reset_mock()
+
# Get a shortcut to the image client ImageManager Mock
self.images_mock = self.app.client_manager.image.images
self.images_mock.reset_mock()
@@ -981,6 +986,54 @@ class TestServerRemoveFloatingIP(TestServer):
self.assertIsNone(result)
+class TestServerRemoveSecurityGroup(TestServer):
+
+ def setUp(self):
+ super(TestServerRemoveSecurityGroup, self).setUp()
+
+ self.security_group = \
+ compute_fakes.FakeSecurityGroup.create_one_security_group()
+ # This is the return value for utils.find_resource() for security group
+ self.security_groups_mock.get.return_value = self.security_group
+
+ attrs = {
+ 'security_groups': [{'name': self.security_group.id}]
+ }
+ methods = {
+ 'remove_security_group': None,
+ }
+
+ self.server = compute_fakes.FakeServer.create_one_server(
+ attrs=attrs,
+ methods=methods
+ )
+ # This is the return value for utils.find_resource() for server
+ self.servers_mock.get.return_value = self.server
+
+ # Get the command object to test
+ self.cmd = server.RemoveServerSecurityGroup(self.app, None)
+
+ def test_server_remove_security_group(self):
+ arglist = [
+ self.server.id,
+ self.security_group.id
+ ]
+ verifylist = [
+ ('server', self.server.id),
+ ('group', self.security_group.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+ self.security_groups_mock.get.assert_called_with(
+ self.security_group.id,
+ )
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.server.remove_security_group.assert_called_with(
+ self.security_group.id,
+ )
+ self.assertIsNone(result)
+
+
class TestServerResize(TestServer):
def setUp(self):
diff --git a/openstackclient/tests/identity/v3/test_consumer.py b/openstackclient/tests/identity/v3/test_consumer.py
index 4a8cf087..d90c7347 100644
--- a/openstackclient/tests/identity/v3/test_consumer.py
+++ b/openstackclient/tests/identity/v3/test_consumer.py
@@ -83,7 +83,7 @@ class TestConsumerDelete(TestOAuth1):
identity_fakes.consumer_id,
]
verifylist = [
- ('consumer', identity_fakes.consumer_id),
+ ('consumer', [identity_fakes.consumer_id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
diff --git a/openstackclient/tests/identity/v3/test_domain.py b/openstackclient/tests/identity/v3/test_domain.py
index 9229ddd0..5e094021 100644
--- a/openstackclient/tests/identity/v3/test_domain.py
+++ b/openstackclient/tests/identity/v3/test_domain.py
@@ -182,7 +182,7 @@ class TestDomainDelete(TestDomain):
self.domain.id,
]
verifylist = [
- ('domain', self.domain.id),
+ ('domain', [self.domain.id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -253,7 +253,11 @@ class TestDomainSet(TestDomain):
result = self.cmd.take_action(parsed_args)
- self.assertNotCalled(self.domains_mock.update)
+ kwargs = {}
+ self.domains_mock.update.assert_called_with(
+ self.domain.id,
+ **kwargs
+ )
self.assertIsNone(result)
def test_domain_set_name(self):
diff --git a/openstackclient/tests/identity/v3/test_endpoint.py b/openstackclient/tests/identity/v3/test_endpoint.py
index d953459c..04276319 100644
--- a/openstackclient/tests/identity/v3/test_endpoint.py
+++ b/openstackclient/tests/identity/v3/test_endpoint.py
@@ -273,7 +273,7 @@ class TestEndpointDelete(TestEndpoint):
identity_fakes.endpoint_id,
]
verifylist = [
- ('endpoint', identity_fakes.endpoint_id),
+ ('endpoint', [identity_fakes.endpoint_id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -485,7 +485,17 @@ class TestEndpointSet(TestEndpoint):
result = self.cmd.take_action(parsed_args)
- self.assertNotCalled(self.endpoints_mock.update)
+ kwargs = {
+ 'enabled': None,
+ 'interface': None,
+ 'region': None,
+ 'service': None,
+ 'url': None,
+ }
+ self.endpoints_mock.update.assert_called_with(
+ identity_fakes.endpoint_id,
+ **kwargs
+ )
self.assertIsNone(result)
def test_endpoint_set_interface(self):
diff --git a/openstackclient/tests/identity/v3/test_identity_provider.py b/openstackclient/tests/identity/v3/test_identity_provider.py
index 161a1a1b..1ec61052 100644
--- a/openstackclient/tests/identity/v3/test_identity_provider.py
+++ b/openstackclient/tests/identity/v3/test_identity_provider.py
@@ -255,7 +255,7 @@ class TestIdentityProviderDelete(TestIdentityProvider):
identity_fakes.idp_id,
]
verifylist = [
- ('identity_provider', identity_fakes.idp_id),
+ ('identity_provider', [identity_fakes.idp_id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -585,8 +585,8 @@ class TestIdentityProviderSet(TestIdentityProvider):
# expect take_action() to return (None, None) as
# neither --enable nor --disable was specified
- self.assertIsNone(columns)
- self.assertIsNone(data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
class TestIdentityProviderShow(TestIdentityProvider):
diff --git a/openstackclient/tests/identity/v3/test_mappings.py b/openstackclient/tests/identity/v3/test_mappings.py
index af7b135d..6aa1a6e5 100644
--- a/openstackclient/tests/identity/v3/test_mappings.py
+++ b/openstackclient/tests/identity/v3/test_mappings.py
@@ -91,7 +91,7 @@ class TestMappingDelete(TestMapping):
identity_fakes.mapping_id
]
verifylist = [
- ('mapping', identity_fakes.mapping_id)
+ ('mapping', [identity_fakes.mapping_id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
diff --git a/openstackclient/tests/identity/v3/test_protocol.py b/openstackclient/tests/identity/v3/test_protocol.py
index 238b0ff8..f718b27b 100644
--- a/openstackclient/tests/identity/v3/test_protocol.py
+++ b/openstackclient/tests/identity/v3/test_protocol.py
@@ -88,7 +88,7 @@ class TestProtocolDelete(TestProtocol):
identity_fakes.protocol_id
]
verifylist = [
- ('federation_protocol', identity_fakes.protocol_id),
+ ('federation_protocol', [identity_fakes.protocol_id]),
('identity_provider', identity_fakes.idp_id),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
diff --git a/openstackclient/tests/identity/v3/test_region.py b/openstackclient/tests/identity/v3/test_region.py
index 02dec568..41ee5ce9 100644
--- a/openstackclient/tests/identity/v3/test_region.py
+++ b/openstackclient/tests/identity/v3/test_region.py
@@ -153,7 +153,7 @@ class TestRegionDelete(TestRegion):
identity_fakes.region_id,
]
verifylist = [
- ('region', identity_fakes.region_id),
+ ('region', [identity_fakes.region_id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -253,7 +253,11 @@ class TestRegionSet(TestRegion):
result = self.cmd.take_action(parsed_args)
- self.assertNotCalled(self.regions_mock.update)
+ kwargs = {}
+ self.regions_mock.update.assert_called_with(
+ identity_fakes.region_id,
+ **kwargs
+ )
self.assertIsNone(result)
def test_region_set_description(self):
diff --git a/openstackclient/tests/identity/v3/test_service.py b/openstackclient/tests/identity/v3/test_service.py
index 1e70383f..a1f85adc 100644
--- a/openstackclient/tests/identity/v3/test_service.py
+++ b/openstackclient/tests/identity/v3/test_service.py
@@ -200,7 +200,7 @@ class TestServiceDelete(TestService):
identity_fakes.service_name,
]
verifylist = [
- ('service', identity_fakes.service_name),
+ ('service', [identity_fakes.service_name]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
diff --git a/openstackclient/tests/identity/v3/test_service_provider.py b/openstackclient/tests/identity/v3/test_service_provider.py
index 1d82cd15..f5270d83 100644
--- a/openstackclient/tests/identity/v3/test_service_provider.py
+++ b/openstackclient/tests/identity/v3/test_service_provider.py
@@ -185,7 +185,7 @@ class TestServiceProviderDelete(TestServiceProvider):
service_fakes.sp_id,
]
verifylist = [
- ('service_provider', service_fakes.sp_id),
+ ('service_provider', [service_fakes.sp_id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -377,8 +377,15 @@ class TestServiceProviderSet(TestServiceProvider):
# expect take_action() to return (None, None) as none of --disabled,
# --enabled, --description, --service-provider-url, --auth_url option
# was set.
- self.assertIsNone(columns)
- self.assertIsNone(data)
+ self.assertEqual(self.columns, columns)
+ datalist = (
+ service_fakes.sp_auth_url,
+ service_fakes.sp_description,
+ True,
+ service_fakes.sp_id,
+ service_fakes.service_provider_url
+ )
+ self.assertEqual(datalist, data)
class TestServiceProviderShow(TestServiceProvider):
diff --git a/openstackclient/tests/image/v1/test_image.py b/openstackclient/tests/image/v1/test_image.py
index 14aa331f..cf08d138 100644
--- a/openstackclient/tests/image/v1/test_image.py
+++ b/openstackclient/tests/image/v1/test_image.py
@@ -363,6 +363,7 @@ class TestImageList(TestImage):
'Disk Format',
'Container Format',
'Size',
+ 'Checksum',
'Status',
'Visibility',
'Protected',
@@ -378,6 +379,7 @@ class TestImageList(TestImage):
'',
'',
'',
+ '',
'public',
False,
image_fakes.image_owner,
diff --git a/openstackclient/tests/image/v2/fakes.py b/openstackclient/tests/image/v2/fakes.py
index c2a8d721..d450dec1 100644
--- a/openstackclient/tests/image/v2/fakes.py
+++ b/openstackclient/tests/image/v2/fakes.py
@@ -49,13 +49,6 @@ IMAGE_SHOW = copy.copy(IMAGE)
IMAGE_SHOW['tags'] = ''
IMAGE_SHOW_data = tuple((IMAGE_SHOW[x] for x in sorted(IMAGE_SHOW)))
-member_status = 'pending'
-MEMBER = {
- 'member_id': identity_fakes.project_id,
- 'image_id': image_id,
- 'status': member_status,
-}
-
# Just enough v2 schema to do some testing
IMAGE_schema = {
"additionalProperties": {
@@ -288,3 +281,29 @@ class FakeImage(object):
else:
data_list.append(getattr(image, x))
return tuple(data_list)
+
+ @staticmethod
+ def create_one_image_member(attrs=None):
+ """Create a fake image member.
+
+ :param Dictionary attrs:
+ A dictionary with all attrbutes of image member
+ :return:
+ A FakeResource object with member_id, image_id and so on
+ """
+ attrs = attrs or {}
+
+ # Set default attribute
+ image_member_info = {
+ 'member_id': 'member-id-' + uuid.uuid4().hex,
+ 'image_id': 'image-id-' + uuid.uuid4().hex,
+ 'status': 'pending',
+ }
+
+ # Overwrite default attributes if there are some attributes set
+ image_member_info.update(attrs)
+
+ image_member = fakes.FakeModel(
+ copy.deepcopy(image_member_info))
+
+ return image_member
diff --git a/openstackclient/tests/image/v2/test_image.py b/openstackclient/tests/image/v2/test_image.py
index 592def21..c6b83bc5 100644
--- a/openstackclient/tests/image/v2/test_image.py
+++ b/openstackclient/tests/image/v2/test_image.py
@@ -347,6 +347,10 @@ class TestImageCreate(TestImage):
class TestAddProjectToImage(TestImage):
_image = image_fakes.FakeImage.create_one_image()
+ new_member = image_fakes.FakeImage.create_one_image_member(
+ attrs={'image_id': _image.id,
+ 'member_id': identity_fakes.project_id}
+ )
columns = (
'image_id',
@@ -357,7 +361,7 @@ class TestAddProjectToImage(TestImage):
datalist = (
_image.id,
identity_fakes.project_id,
- image_fakes.member_status
+ new_member.status
)
def setUp(self):
@@ -367,11 +371,7 @@ class TestAddProjectToImage(TestImage):
self.images_mock.get.return_value = self._image
# Update the image_id in the MEMBER dict
- self.new_member = copy.deepcopy(image_fakes.MEMBER)
- self.new_member['image_id'] = self._image.id
- self.image_members_mock.create.return_value = fakes.FakeModel(
- self.new_member,
- )
+ self.image_members_mock.create.return_value = self.new_member
self.project_mock.get.return_value = fakes.FakeResource(
None,
copy.deepcopy(identity_fakes.PROJECT),
@@ -643,6 +643,7 @@ class TestImageList(TestImage):
'Disk Format',
'Container Format',
'Size',
+ 'Checksum',
'Status',
'Visibility',
'Protected',
@@ -658,6 +659,7 @@ class TestImageList(TestImage):
'',
'',
'',
+ '',
self._image.visibility,
self._image.protected,
self._image.owner,
diff --git a/openstackclient/tests/network/v2/test_address_scope.py b/openstackclient/tests/network/v2/test_address_scope.py
index 722371f9..16e74f46 100644
--- a/openstackclient/tests/network/v2/test_address_scope.py
+++ b/openstackclient/tests/network/v2/test_address_scope.py
@@ -11,7 +11,6 @@
# under the License.
#
-import copy
import mock
from mock import call
@@ -35,11 +34,13 @@ class TestAddressScope(network_fakes.TestNetworkV2):
class TestCreateAddressScope(TestAddressScope):
+ project = identity_fakes_v3.FakeProject.create_one_project()
+ domain = identity_fakes_v3.FakeDomain.create_one_domain()
# The new address scope created.
new_address_scope = (
network_fakes.FakeAddressScope.create_one_address_scope(
attrs={
- 'tenant_id': identity_fakes_v3.project_id,
+ 'tenant_id': project.id,
}
))
columns = (
@@ -75,19 +76,11 @@ class TestCreateAddressScope(TestAddressScope):
# Get a shortcut to the ProjectManager Mock
self.projects_mock = self.identity.projects
- self.projects_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes_v3.PROJECT),
- loaded=True,
- )
+ self.projects_mock.get.return_value = self.project
# Get a shortcut to the DomainManager Mock
self.domains_mock = self.identity.domains
- self.domains_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes_v3.DOMAIN),
- loaded=True,
- )
+ self.domains_mock.get.return_value = self.domain
def test_create_no_options(self):
arglist = []
@@ -121,15 +114,15 @@ class TestCreateAddressScope(TestAddressScope):
arglist = [
'--ip-version', str(self.new_address_scope.ip_version),
'--share',
- '--project', identity_fakes_v3.project_name,
- '--project-domain', identity_fakes_v3.domain_name,
+ '--project', self.project.name,
+ '--project-domain', self.domain.name,
self.new_address_scope.name,
]
verifylist = [
('ip_version', self.new_address_scope.ip_version),
('share', True),
- ('project', identity_fakes_v3.project_name),
- ('project_domain', identity_fakes_v3.domain_name),
+ ('project', self.project.name),
+ ('project_domain', self.domain.name),
('name', self.new_address_scope.name),
]
@@ -139,7 +132,7 @@ class TestCreateAddressScope(TestAddressScope):
self.network.create_address_scope.assert_called_once_with(**{
'ip_version': self.new_address_scope.ip_version,
'shared': True,
- 'tenant_id': identity_fakes_v3.project_id,
+ 'tenant_id': self.project.id,
'name': self.new_address_scope.name,
})
self.assertEqual(self.columns, columns)
diff --git a/openstackclient/tests/network/v2/test_floating_ip.py b/openstackclient/tests/network/v2/test_floating_ip.py
index 5cd5279a..234fe446 100644
--- a/openstackclient/tests/network/v2/test_floating_ip.py
+++ b/openstackclient/tests/network/v2/test_floating_ip.py
@@ -211,7 +211,7 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.')
except exceptions.CommandError as e:
- self.assertEqual('1 of 2 floating_ip failed to delete.', str(e))
+ self.assertEqual('1 of 2 floating_ips failed to delete.', str(e))
self.network.find_ip.assert_any_call(
self.floating_ips[0].id, ignore_missing=False)
@@ -462,7 +462,7 @@ class TestDeleteFloatingIPCompute(TestFloatingIPCompute):
self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.')
except exceptions.CommandError as e:
- self.assertEqual('1 of 2 floating_ip failed to delete.', str(e))
+ self.assertEqual('1 of 2 floating_ips failed to delete.', str(e))
self.compute.floating_ips.get.assert_any_call(
self.floating_ips[0].id)
diff --git a/openstackclient/tests/network/v2/test_ip_availability.py b/openstackclient/tests/network/v2/test_ip_availability.py
index c6ec2b0b..21d44d07 100644
--- a/openstackclient/tests/network/v2/test_ip_availability.py
+++ b/openstackclient/tests/network/v2/test_ip_availability.py
@@ -11,7 +11,6 @@
# under the License.
#
-import copy
import mock
from osc_lib import utils as common_utils
@@ -41,11 +40,8 @@ class TestIPAvailability(network_fakes.TestNetworkV2):
# Get a shortcut to the ProjectManager Mock
self.projects_mock = self.identity.projects
- self.projects_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes.PROJECT),
- loaded=True,
- )
+ self.project = identity_fakes.FakeProject.create_one_project()
+ self.projects_mock.get.return_value = self.project
class TestListIPAvailability(TestIPAvailability):
@@ -109,16 +105,16 @@ class TestListIPAvailability(TestIPAvailability):
def test_list_project(self):
arglist = [
- '--project', identity_fakes.project_name
+ '--project', self.project.name
]
verifylist = [
- ('project', identity_fakes.project_name)
+ ('project', self.project.name)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': identity_fakes.project_id,
+ filters = {'tenant_id': self.project.id,
'ip_version': 4}
self.network.network_ip_availabilities.assert_called_once_with(
diff --git a/openstackclient/tests/network/v2/test_network.py b/openstackclient/tests/network/v2/test_network.py
index 8fc9dadf..4322bf9a 100644
--- a/openstackclient/tests/network/v2/test_network.py
+++ b/openstackclient/tests/network/v2/test_network.py
@@ -11,7 +11,6 @@
# under the License.
#
-import copy
import mock
from mock import call
@@ -40,10 +39,12 @@ class TestNetwork(network_fakes.TestNetworkV2):
class TestCreateNetworkIdentityV3(TestNetwork):
+ project = identity_fakes_v3.FakeProject.create_one_project()
+ domain = identity_fakes_v3.FakeDomain.create_one_domain()
# The new network created.
_network = network_fakes.FakeNetwork.create_one_network(
attrs={
- 'tenant_id': identity_fakes_v3.project_id,
+ 'tenant_id': project.id,
'availability_zone_hints': ["nova"],
}
)
@@ -96,19 +97,11 @@ class TestCreateNetworkIdentityV3(TestNetwork):
# Get a shortcut to the ProjectManager Mock
self.projects_mock = self.identity.projects
- self.projects_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes_v3.PROJECT),
- loaded=True,
- )
+ self.projects_mock.get.return_value = self.project
# Get a shortcut to the DomainManager Mock
self.domains_mock = self.identity.domains
- self.domains_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes_v3.DOMAIN),
- loaded=True,
- )
+ self.domains_mock.get.return_value = self.domain
def test_create_no_options(self):
arglist = []
@@ -143,8 +136,8 @@ class TestCreateNetworkIdentityV3(TestNetwork):
arglist = [
"--disable",
"--share",
- "--project", identity_fakes_v3.project_name,
- "--project-domain", identity_fakes_v3.domain_name,
+ "--project", self.project.name,
+ "--project-domain", self.domain.name,
"--availability-zone-hint", "nova",
"--external", "--default",
"--provider-network-type", "vlan",
@@ -156,8 +149,8 @@ class TestCreateNetworkIdentityV3(TestNetwork):
verifylist = [
('disable', True),
('share', True),
- ('project', identity_fakes_v3.project_name),
- ('project_domain', identity_fakes_v3.domain_name),
+ ('project', self.project.name),
+ ('project_domain', self.domain.name),
('availability_zone_hints', ["nova"]),
('external', True),
('default', True),
@@ -176,7 +169,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
'availability_zone_hints': ["nova"],
'name': self._network.name,
'shared': True,
- 'tenant_id': identity_fakes_v3.project_id,
+ 'tenant_id': self.project.id,
'is_default': True,
'router:external': True,
'provider:network_type': 'vlan',
@@ -214,9 +207,10 @@ class TestCreateNetworkIdentityV3(TestNetwork):
class TestCreateNetworkIdentityV2(TestNetwork):
+ project = identity_fakes_v2.FakeProject.create_one_project()
# The new network created.
_network = network_fakes.FakeNetwork.create_one_network(
- attrs={'tenant_id': identity_fakes_v2.project_id}
+ attrs={'tenant_id': project.id}
)
columns = (
@@ -267,24 +261,20 @@ class TestCreateNetworkIdentityV2(TestNetwork):
# Get a shortcut to the ProjectManager Mock
self.projects_mock = self.identity.tenants
- self.projects_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes_v2.PROJECT),
- loaded=True,
- )
+ self.projects_mock.get.return_value = self.project
# There is no DomainManager Mock in fake identity v2.
def test_create_with_project_identityv2(self):
arglist = [
- "--project", identity_fakes_v2.project_name,
+ "--project", self.project.name,
self._network.name,
]
verifylist = [
('enable', True),
('share', None),
('name', self._network.name),
- ('project', identity_fakes_v2.project_name),
+ ('project', self.project.name),
('external', False),
]
@@ -294,22 +284,22 @@ class TestCreateNetworkIdentityV2(TestNetwork):
self.network.create_network.assert_called_once_with(**{
'admin_state_up': True,
'name': self._network.name,
- 'tenant_id': identity_fakes_v2.project_id,
+ 'tenant_id': self.project.id,
})
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
def test_create_with_domain_identityv2(self):
arglist = [
- "--project", identity_fakes_v3.project_name,
- "--project-domain", identity_fakes_v3.domain_name,
+ "--project", self.project.name,
+ "--project-domain", "domain-name",
self._network.name,
]
verifylist = [
('enable', True),
('share', None),
- ('project', identity_fakes_v3.project_name),
- ('project_domain', identity_fakes_v3.domain_name),
+ ('project', self.project.name),
+ ('project_domain', "domain-name"),
('name', self._network.name),
('external', False),
]
diff --git a/openstackclient/tests/network/v2/test_security_group.py b/openstackclient/tests/network/v2/test_security_group.py
index b0c14985..cea64897 100644
--- a/openstackclient/tests/network/v2/test_security_group.py
+++ b/openstackclient/tests/network/v2/test_security_group.py
@@ -11,7 +11,6 @@
# under the License.
#
-import copy
import mock
from mock import call
@@ -45,6 +44,8 @@ class TestSecurityGroupCompute(compute_fakes.TestComputev2):
class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork):
+ project = identity_fakes.FakeProject.create_one_project()
+ domain = identity_fakes.FakeDomain.create_one_domain()
# The security group to be created.
_security_group = \
network_fakes.FakeSecurityGroup.create_one_security_group()
@@ -81,19 +82,11 @@ class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork):
# Get a shortcut to the ProjectManager Mock
self.projects_mock = self.identity.projects
- self.projects_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes.PROJECT),
- loaded=True,
- )
+ self.projects_mock.get.return_value = self.project
# Get a shortcut to the DomainManager Mock
self.domains_mock = self.identity.domains
- self.domains_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes.DOMAIN),
- loaded=True,
- )
+ self.domains_mock.get.return_value = self.domain
# Get the command object to test
self.cmd = security_group.CreateSecurityGroup(self.app, self.namespace)
@@ -123,15 +116,15 @@ class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork):
def test_create_all_options(self):
arglist = [
'--description', self._security_group.description,
- '--project', identity_fakes.project_name,
- '--project-domain', identity_fakes.domain_name,
+ '--project', self.project.name,
+ '--project-domain', self.domain.name,
self._security_group.name,
]
verifylist = [
('description', self._security_group.description),
('name', self._security_group.name),
- ('project', identity_fakes.project_name),
- ('project_domain', identity_fakes.domain_name),
+ ('project', self.project.name),
+ ('project_domain', self.domain.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -140,7 +133,7 @@ class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork):
self.network.create_security_group.assert_called_once_with(**{
'description': self._security_group.description,
'name': self._security_group.name,
- 'tenant_id': identity_fakes.project_id,
+ 'tenant_id': self.project.id,
})
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
@@ -148,6 +141,8 @@ class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork):
class TestCreateSecurityGroupCompute(TestSecurityGroupCompute):
+ project = identity_fakes.FakeProject.create_one_project()
+ domain = identity_fakes.FakeDomain.create_one_domain()
# The security group to be shown.
_security_group = \
compute_fakes.FakeSecurityGroup.create_one_security_group()
@@ -184,8 +179,8 @@ class TestCreateSecurityGroupCompute(TestSecurityGroupCompute):
def test_create_network_options(self):
arglist = [
- '--project', identity_fakes.project_name,
- '--project-domain', identity_fakes.domain_name,
+ '--project', self.project.name,
+ '--project-domain', self.domain.name,
self._security_group.name,
]
self.assertRaises(tests_utils.ParserException,
@@ -301,7 +296,7 @@ class TestDeleteSecurityGroupNetwork(TestSecurityGroupNetwork):
self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.')
except exceptions.CommandError as e:
- self.assertEqual('1 of 2 group failed to delete.', str(e))
+ self.assertEqual('1 of 2 groups failed to delete.', str(e))
self.network.find_security_group.assert_any_call(
self._security_groups[0].name, ignore_missing=False)
@@ -389,7 +384,7 @@ class TestDeleteSecurityGroupCompute(TestSecurityGroupCompute):
self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.')
except exceptions.CommandError as e:
- self.assertEqual('1 of 2 group failed to delete.', str(e))
+ self.assertEqual('1 of 2 groups failed to delete.', str(e))
self.compute.security_groups.get.assert_any_call(
self._security_groups[0].id)
diff --git a/openstackclient/tests/network/v2/test_security_group_rule.py b/openstackclient/tests/network/v2/test_security_group_rule.py
index b2862679..34d35629 100644
--- a/openstackclient/tests/network/v2/test_security_group_rule.py
+++ b/openstackclient/tests/network/v2/test_security_group_rule.py
@@ -46,6 +46,8 @@ class TestSecurityGroupRuleCompute(compute_fakes.TestComputev2):
class TestCreateSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork):
+ project = identity_fakes.FakeProject.create_one_project()
+ domain = identity_fakes.FakeDomain.create_one_domain()
# The security group rule to be created.
_security_group_rule = None
@@ -103,19 +105,11 @@ class TestCreateSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork):
# Get a shortcut to the ProjectManager Mock
self.projects_mock = self.identity.projects
- self.projects_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes.PROJECT),
- loaded=True,
- )
+ self.projects_mock.get.return_value = self.project
# Get a shortcut to the DomainManager Mock
self.domains_mock = self.identity.domains
- self.domains_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes.DOMAIN),
- loaded=True,
- )
+ self.domains_mock.get.return_value = self.domain
# Get the command object to test
self.cmd = security_group_rule.CreateSecurityGroupRule(
@@ -306,8 +300,8 @@ class TestCreateSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork):
'--dst-port', str(self._security_group_rule.port_range_min),
'--egress',
'--ethertype', self._security_group_rule.ethertype,
- '--project', identity_fakes.project_name,
- '--project-domain', identity_fakes.domain_name,
+ '--project', self.project.name,
+ '--project-domain', self.domain.name,
'--protocol', self._security_group_rule.protocol,
self._security_group.id,
]
@@ -316,8 +310,8 @@ class TestCreateSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork):
self._security_group_rule.port_range_max)),
('egress', True),
('ethertype', self._security_group_rule.ethertype),
- ('project', identity_fakes.project_name),
- ('project_domain', identity_fakes.domain_name),
+ ('project', self.project.name),
+ ('project_domain', self.domain.name),
('protocol', self._security_group_rule.protocol),
('group', self._security_group.id),
]
@@ -332,7 +326,7 @@ class TestCreateSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork):
'port_range_min': self._security_group_rule.port_range_min,
'protocol': self._security_group_rule.protocol,
'security_group_id': self._security_group.id,
- 'tenant_id': identity_fakes.project_id,
+ 'tenant_id': self.project.id,
})
self.assertEqual(self.expected_columns, columns)
self.assertEqual(self.expected_data, data)
@@ -470,6 +464,8 @@ class TestCreateSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork):
class TestCreateSecurityGroupRuleCompute(TestSecurityGroupRuleCompute):
+ project = identity_fakes.FakeProject.create_one_project()
+ domain = identity_fakes.FakeDomain.create_one_domain()
# The security group rule to be created.
_security_group_rule = None
@@ -534,8 +530,8 @@ class TestCreateSecurityGroupRuleCompute(TestSecurityGroupRuleCompute):
'--ethertype', 'IPv4',
'--icmp-type', '3',
'--icmp-code', '11',
- '--project', identity_fakes.project_name,
- '--project-domain', identity_fakes.domain_name,
+ '--project', self.project.name,
+ '--project-domain', self.domain.name,
self._security_group.id,
]
self.assertRaises(tests_utils.ParserException,
@@ -743,7 +739,7 @@ class TestDeleteSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork):
self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.')
except exceptions.CommandError as e:
- self.assertEqual('1 of 2 rule failed to delete.', str(e))
+ self.assertEqual('1 of 2 rules failed to delete.', str(e))
self.network.find_security_group_rule.assert_any_call(
self._security_group_rules[0].id, ignore_missing=False)
@@ -823,7 +819,7 @@ class TestDeleteSecurityGroupRuleCompute(TestSecurityGroupRuleCompute):
self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.')
except exceptions.CommandError as e:
- self.assertEqual('1 of 2 rule failed to delete.', str(e))
+ self.assertEqual('1 of 2 rules failed to delete.', str(e))
self.compute.security_group_rules.delete.assert_any_call(
self._security_group_rules[0].id)
diff --git a/openstackclient/tests/network/v2/test_subnet.py b/openstackclient/tests/network/v2/test_subnet.py
index 82813d6c..46af44fb 100644
--- a/openstackclient/tests/network/v2/test_subnet.py
+++ b/openstackclient/tests/network/v2/test_subnet.py
@@ -11,7 +11,6 @@
# under the License.
#
-import copy
import mock
from mock import call
@@ -36,10 +35,12 @@ class TestSubnet(network_fakes.TestNetworkV2):
class TestCreateSubnet(TestSubnet):
+ project = identity_fakes_v3.FakeProject.create_one_project()
+ domain = identity_fakes_v3.FakeDomain.create_one_domain()
# An IPv4 subnet to be created with mostly default values
_subnet = network_fakes.FakeSubnet.create_one_subnet(
attrs={
- 'tenant_id': identity_fakes_v3.project_id,
+ 'tenant_id': project.id,
}
)
@@ -49,7 +50,7 @@ class TestCreateSubnet(TestSubnet):
# An IPv4 subnet to be created using a specific subnet pool
_subnet_from_pool = network_fakes.FakeSubnet.create_one_subnet(
attrs={
- 'tenant_id': identity_fakes_v3.project_id,
+ 'tenant_id': project.id,
'subnetpool_id': _subnet_pool.id,
'dns_nameservers': ['8.8.8.8',
'8.8.4.4'],
@@ -63,7 +64,7 @@ class TestCreateSubnet(TestSubnet):
# An IPv6 subnet to be created with most options specified
_subnet_ipv6 = network_fakes.FakeSubnet.create_one_subnet(
attrs={
- 'tenant_id': identity_fakes_v3.project_id,
+ 'tenant_id': project.id,
'cidr': 'fe80:0:0:a00a::/64',
'enable_dhcp': True,
'dns_nameservers': ['fe80:27ff:a00a:f00f::ffff',
@@ -187,19 +188,11 @@ class TestCreateSubnet(TestSubnet):
# Get a shortcut to the ProjectManager Mock
self.projects_mock = self.identity.projects
- self.projects_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes_v3.PROJECT),
- loaded=True,
- )
+ self.projects_mock.get.return_value = self.project
# Get a shortcut to the DomainManager Mock
self.domains_mock = self.identity.domains
- self.domains_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes_v3.DOMAIN),
- loaded=True,
- )
+ self.domains_mock.get.return_value = self.domain
# Mock SDK calls for all tests.
self.network.find_network = mock.Mock(return_value=self._network)
diff --git a/openstackclient/tests/network/v2/test_subnet_pool.py b/openstackclient/tests/network/v2/test_subnet_pool.py
index 41b6170f..8269af0b 100644
--- a/openstackclient/tests/network/v2/test_subnet_pool.py
+++ b/openstackclient/tests/network/v2/test_subnet_pool.py
@@ -12,7 +12,6 @@
#
import argparse
-import copy
import mock
from mock import call
@@ -37,6 +36,8 @@ class TestSubnetPool(network_fakes.TestNetworkV2):
class TestCreateSubnetPool(TestSubnetPool):
+ project = identity_fakes_v3.FakeProject.create_one_project()
+ domain = identity_fakes_v3.FakeDomain.create_one_domain()
# The new subnet pool to create.
_subnet_pool = network_fakes.FakeSubnetPool.create_one_subnet_pool()
@@ -93,19 +94,11 @@ class TestCreateSubnetPool(TestSubnetPool):
# Get a shortcut to the ProjectManager Mock
self.projects_mock = self.identity.projects
- self.projects_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes_v3.PROJECT),
- loaded=True,
- )
+ self.projects_mock.get.return_value = self.project
# Get a shortcut to the DomainManager Mock
self.domains_mock = self.identity.domains
- self.domains_mock.get.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes_v3.DOMAIN),
- loaded=True,
- )
+ self.domains_mock.get.return_value = self.domain
def test_create_no_options(self):
arglist = []
@@ -191,14 +184,14 @@ class TestCreateSubnetPool(TestSubnetPool):
def test_create_project_domain(self):
arglist = [
'--pool-prefix', '10.0.10.0/24',
- "--project", identity_fakes_v3.project_name,
- "--project-domain", identity_fakes_v3.domain_name,
+ "--project", self.project.name,
+ "--project-domain", self.domain.name,
self._subnet_pool.name,
]
verifylist = [
('prefixes', ['10.0.10.0/24']),
- ('project', identity_fakes_v3.project_name),
- ('project_domain', identity_fakes_v3.domain_name),
+ ('project', self.project.name),
+ ('project_domain', self.domain.name),
('name', self._subnet_pool.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -207,7 +200,7 @@ class TestCreateSubnetPool(TestSubnetPool):
self.network.create_subnet_pool.assert_called_once_with(**{
'prefixes': ['10.0.10.0/24'],
- 'tenant_id': identity_fakes_v3.project_id,
+ 'tenant_id': self.project.id,
'name': self._subnet_pool.name,
})
self.assertEqual(self.columns, columns)
diff --git a/openstackclient/tests/volume/v2/fakes.py b/openstackclient/tests/volume/v2/fakes.py
index 8a628ac9..74e30a41 100644
--- a/openstackclient/tests/volume/v2/fakes.py
+++ b/openstackclient/tests/volume/v2/fakes.py
@@ -418,6 +418,26 @@ class FakeBackup(object):
return backups
+ @staticmethod
+ def get_backups(backups=None, count=2):
+ """Get an iterable MagicMock object with a list of faked backups.
+
+ If backups list is provided, then initialize the Mock object with the
+ list. Otherwise create one.
+
+ :param List volumes:
+ A list of FakeResource objects faking backups
+ :param Integer count:
+ The number of backups to be faked
+ :return
+ An iterable Mock object with side_effect set to a list of faked
+ backups
+ """
+ if backups is None:
+ backups = FakeBackup.create_backups(count)
+
+ return mock.MagicMock(side_effect=backups)
+
class FakeExtension(object):
"""Fake one or more extension."""
@@ -529,6 +549,26 @@ class FakeQos(object):
return qoses
+ @staticmethod
+ def get_qoses(qoses=None, count=2):
+ """Get an iterable MagicMock object with a list of faked qoses.
+
+ If qoses list is provided, then initialize the Mock object with the
+ list. Otherwise create one.
+
+ :param List volumes:
+ A list of FakeResource objects faking qoses
+ :param Integer count:
+ The number of qoses to be faked
+ :return
+ An iterable Mock object with side_effect set to a list of faked
+ qoses
+ """
+ if qoses is None:
+ qoses = FakeQos.create_qoses(count)
+
+ return mock.MagicMock(side_effect=qoses)
+
class FakeSnapshot(object):
"""Fake one or more snapshot."""
@@ -582,6 +622,26 @@ class FakeSnapshot(object):
return snapshots
+ @staticmethod
+ def get_snapshots(snapshots=None, count=2):
+ """Get an iterable MagicMock object with a list of faked snapshots.
+
+ If snapshots list is provided, then initialize the Mock object with the
+ list. Otherwise create one.
+
+ :param List volumes:
+ A list of FakeResource objects faking snapshots
+ :param Integer count:
+ The number of snapshots to be faked
+ :return
+ An iterable Mock object with side_effect set to a list of faked
+ snapshots
+ """
+ if snapshots is None:
+ snapshots = FakeSnapshot.create_snapshots(count)
+
+ return mock.MagicMock(side_effect=snapshots)
+
class FakeType(object):
"""Fake one or more type."""
diff --git a/openstackclient/tests/volume/v2/test_backup.py b/openstackclient/tests/volume/v2/test_backup.py
index 31bfa64c..3c2b3948 100644
--- a/openstackclient/tests/volume/v2/test_backup.py
+++ b/openstackclient/tests/volume/v2/test_backup.py
@@ -12,6 +12,12 @@
# under the License.
#
+import mock
+from mock import call
+
+from osc_lib import exceptions
+from osc_lib import utils
+
from openstackclient.tests.volume.v2 import fakes as volume_fakes
from openstackclient.volume.v2 import backup
@@ -138,12 +144,13 @@ class TestBackupCreate(TestBackup):
class TestBackupDelete(TestBackup):
- backup = volume_fakes.FakeBackup.create_one_backup()
+ backups = volume_fakes.FakeBackup.create_backups(count=2)
def setUp(self):
super(TestBackupDelete, self).setUp()
- self.backups_mock.get.return_value = self.backup
+ self.backups_mock.get = (
+ volume_fakes.FakeBackup.get_backups(self.backups))
self.backups_mock.delete.return_value = None
# Get the command object to mock
@@ -151,34 +158,81 @@ class TestBackupDelete(TestBackup):
def test_backup_delete(self):
arglist = [
- self.backup.id
+ self.backups[0].id
]
verifylist = [
- ("backups", [self.backup.id])
+ ("backups", [self.backups[0].id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- self.backups_mock.delete.assert_called_with(self.backup.id, False)
+ self.backups_mock.delete.assert_called_with(
+ self.backups[0].id, False)
self.assertIsNone(result)
def test_backup_delete_with_force(self):
arglist = [
'--force',
- self.backup.id,
+ self.backups[0].id,
]
verifylist = [
('force', True),
- ("backups", [self.backup.id])
+ ("backups", [self.backups[0].id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- self.backups_mock.delete.assert_called_with(self.backup.id, True)
+ self.backups_mock.delete.assert_called_with(self.backups[0].id, True)
self.assertIsNone(result)
+ def test_delete_multiple_backups(self):
+ arglist = []
+ for b in self.backups:
+ arglist.append(b.id)
+ verifylist = [
+ ('backups', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ calls = []
+ for b in self.backups:
+ calls.append(call(b.id, False))
+ self.backups_mock.delete.assert_has_calls(calls)
+ self.assertIsNone(result)
+
+ def test_delete_multiple_backups_with_exception(self):
+ arglist = [
+ self.backups[0].id,
+ 'unexist_backup',
+ ]
+ verifylist = [
+ ('backups', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ find_mock_result = [self.backups[0], exceptions.CommandError]
+ with mock.patch.object(utils, 'find_resource',
+ side_effect=find_mock_result) as find_mock:
+ try:
+ self.cmd.take_action(parsed_args)
+ self.fail('CommandError should be raised.')
+ except exceptions.CommandError as e:
+ self.assertEqual('1 of 2 backups failed to delete.',
+ str(e))
+
+ find_mock.assert_any_call(self.backups_mock, self.backups[0].id)
+ find_mock.assert_any_call(self.backups_mock, 'unexist_backup')
+
+ self.assertEqual(2, find_mock.call_count)
+ self.backups_mock.delete.assert_called_once_with(
+ self.backups[0].id, False
+ )
+
class TestBackupList(TestBackup):
diff --git a/openstackclient/tests/volume/v2/test_qos_specs.py b/openstackclient/tests/volume/v2/test_qos_specs.py
index 92ffca74..56b8ae03 100644
--- a/openstackclient/tests/volume/v2/test_qos_specs.py
+++ b/openstackclient/tests/volume/v2/test_qos_specs.py
@@ -13,9 +13,14 @@
# under the License.
#
+import mock
+from mock import call
+
+from osc_lib import exceptions
+from osc_lib import utils
+
from openstackclient.tests.volume.v2 import fakes as volume_fakes
from openstackclient.volume.v2 import qos_specs
-from osc_lib import utils
class TestQos(volume_fakes.TestVolume):
@@ -155,45 +160,94 @@ class TestQosCreate(TestQos):
class TestQosDelete(TestQos):
- qos_spec = volume_fakes.FakeQos.create_one_qos()
+ qos_specs = volume_fakes.FakeQos.create_qoses(count=2)
def setUp(self):
super(TestQosDelete, self).setUp()
- self.qos_mock.get.return_value = self.qos_spec
+ self.qos_mock.get = (
+ volume_fakes.FakeQos.get_qoses(self.qos_specs))
# Get the command object to test
self.cmd = qos_specs.DeleteQos(self.app, None)
def test_qos_delete(self):
arglist = [
- self.qos_spec.id
+ self.qos_specs[0].id
]
verifylist = [
- ('qos_specs', [self.qos_spec.id])
+ ('qos_specs', [self.qos_specs[0].id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- self.qos_mock.delete.assert_called_with(self.qos_spec.id, False)
+ self.qos_mock.delete.assert_called_with(
+ self.qos_specs[0].id, False)
self.assertIsNone(result)
def test_qos_delete_with_force(self):
arglist = [
'--force',
- self.qos_spec.id
+ self.qos_specs[0].id
]
verifylist = [
('force', True),
- ('qos_specs', [self.qos_spec.id])
+ ('qos_specs', [self.qos_specs[0].id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- self.qos_mock.delete.assert_called_with(self.qos_spec.id, True)
+ self.qos_mock.delete.assert_called_with(
+ self.qos_specs[0].id, True)
+ self.assertIsNone(result)
+
+ def test_delete_multiple_qoses(self):
+ arglist = []
+ for q in self.qos_specs:
+ arglist.append(q.id)
+ verifylist = [
+ ('qos_specs', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ calls = []
+ for q in self.qos_specs:
+ calls.append(call(q.id, False))
+ self.qos_mock.delete.assert_has_calls(calls)
self.assertIsNone(result)
+ def test_delete_multiple_qoses_with_exception(self):
+ arglist = [
+ self.qos_specs[0].id,
+ 'unexist_qos',
+ ]
+ verifylist = [
+ ('qos_specs', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ find_mock_result = [self.qos_specs[0], exceptions.CommandError]
+ with mock.patch.object(utils, 'find_resource',
+ side_effect=find_mock_result) as find_mock:
+ try:
+ self.cmd.take_action(parsed_args)
+ self.fail('CommandError should be raised.')
+ except exceptions.CommandError as e:
+ self.assertEqual(
+ '1 of 2 QoS specifications failed to delete.', str(e))
+
+ find_mock.assert_any_call(self.qos_mock, self.qos_specs[0].id)
+ find_mock.assert_any_call(self.qos_mock, 'unexist_qos')
+
+ self.assertEqual(2, find_mock.call_count)
+ self.qos_mock.delete.assert_called_once_with(
+ self.qos_specs[0].id, False
+ )
+
class TestQosDisassociate(TestQos):
diff --git a/openstackclient/tests/volume/v2/test_snapshot.py b/openstackclient/tests/volume/v2/test_snapshot.py
index 2e9bcc82..04e0285e 100644
--- a/openstackclient/tests/volume/v2/test_snapshot.py
+++ b/openstackclient/tests/volume/v2/test_snapshot.py
@@ -12,6 +12,10 @@
# under the License.
#
+import mock
+from mock import call
+
+from osc_lib import exceptions
from osc_lib import utils
from openstackclient.tests.volume.v2 import fakes as volume_fakes
@@ -123,12 +127,13 @@ class TestSnapshotCreate(TestSnapshot):
class TestSnapshotDelete(TestSnapshot):
- snapshot = volume_fakes.FakeSnapshot.create_one_snapshot()
+ snapshots = volume_fakes.FakeSnapshot.create_snapshots(count=2)
def setUp(self):
super(TestSnapshotDelete, self).setUp()
- self.snapshots_mock.get.return_value = self.snapshot
+ self.snapshots_mock.get = (
+ volume_fakes.FakeSnapshot.get_snapshots(self.snapshots))
self.snapshots_mock.delete.return_value = None
# Get the command object to mock
@@ -136,18 +141,66 @@ class TestSnapshotDelete(TestSnapshot):
def test_snapshot_delete(self):
arglist = [
- self.snapshot.id
+ self.snapshots[0].id
]
verifylist = [
- ("snapshots", [self.snapshot.id])
+ ("snapshots", [self.snapshots[0].id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- self.snapshots_mock.delete.assert_called_with(self.snapshot.id)
+ self.snapshots_mock.delete.assert_called_with(
+ self.snapshots[0].id)
self.assertIsNone(result)
+ def test_delete_multiple_snapshots(self):
+ arglist = []
+ for s in self.snapshots:
+ arglist.append(s.id)
+ verifylist = [
+ ('snapshots', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ calls = []
+ for s in self.snapshots:
+ calls.append(call(s.id))
+ self.snapshots_mock.delete.assert_has_calls(calls)
+ self.assertIsNone(result)
+
+ def test_delete_multiple_snapshots_with_exception(self):
+ arglist = [
+ self.snapshots[0].id,
+ 'unexist_snapshot',
+ ]
+ verifylist = [
+ ('snapshots', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ find_mock_result = [self.snapshots[0], exceptions.CommandError]
+ with mock.patch.object(utils, 'find_resource',
+ side_effect=find_mock_result) as find_mock:
+ try:
+ self.cmd.take_action(parsed_args)
+ self.fail('CommandError should be raised.')
+ except exceptions.CommandError as e:
+ self.assertEqual('1 of 2 snapshots failed to delete.',
+ str(e))
+
+ find_mock.assert_any_call(
+ self.snapshots_mock, self.snapshots[0].id)
+ find_mock.assert_any_call(self.snapshots_mock, 'unexist_snapshot')
+
+ self.assertEqual(2, find_mock.call_count)
+ self.snapshots_mock.delete.assert_called_once_with(
+ self.snapshots[0].id
+ )
+
class TestSnapshotList(TestSnapshot):
diff --git a/openstackclient/tests/volume/v2/test_type.py b/openstackclient/tests/volume/v2/test_type.py
index 174f33f2..a7db2e49 100644
--- a/openstackclient/tests/volume/v2/test_type.py
+++ b/openstackclient/tests/volume/v2/test_type.py
@@ -14,6 +14,7 @@
import copy
+from osc_lib import exceptions
from osc_lib import utils
from openstackclient.tests import fakes
@@ -41,6 +42,7 @@ class TestType(volume_fakes.TestVolume):
class TestTypeCreate(TestType):
+ project = identity_fakes.FakeProject.create_one_project()
columns = (
'description',
'id',
@@ -58,6 +60,7 @@ class TestTypeCreate(TestType):
)
self.types_mock.create.return_value = self.new_volume_type
+ self.projects_mock.get.return_value = self.project
# Get the command object to test
self.cmd = volume_type.CreateVolumeType(self.app, None)
@@ -89,12 +92,14 @@ class TestTypeCreate(TestType):
arglist = [
"--description", self.new_volume_type.description,
"--private",
+ "--project", self.project.id,
self.new_volume_type.name,
]
verifylist = [
("description", self.new_volume_type.description),
("public", False),
("private", True),
+ ("project", self.project.id),
("name", self.new_volume_type.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -109,6 +114,21 @@ class TestTypeCreate(TestType):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
+ def test_public_type_create_with_project(self):
+ arglist = [
+ '--project', self.project.id,
+ self.new_volume_type.name,
+ ]
+ verifylist = [
+ ('project', self.project.id),
+ ('name', self.new_volume_type.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+
class TestTypeDelete(TestType):
diff --git a/openstackclient/tests/volume/v2/test_volume.py b/openstackclient/tests/volume/v2/test_volume.py
index 68158df0..db65c3bd 100644
--- a/openstackclient/tests/volume/v2/test_volume.py
+++ b/openstackclient/tests/volume/v2/test_volume.py
@@ -13,9 +13,10 @@
#
import copy
-
+import mock
from mock import call
+from osc_lib import exceptions
from osc_lib import utils
from openstackclient.tests import fakes
@@ -458,6 +459,36 @@ class TestVolumeDelete(TestVolume):
self.volumes_mock.delete.assert_has_calls(calls)
self.assertIsNone(result)
+ def test_volume_delete_multi_volumes_with_exception(self):
+ volumes = self.setup_volumes_mock(count=2)
+
+ arglist = [
+ volumes[0].id,
+ 'unexist_volume',
+ ]
+ verifylist = [
+ ('volumes', arglist),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ find_mock_result = [volumes[0], exceptions.CommandError]
+ with mock.patch.object(utils, 'find_resource',
+ side_effect=find_mock_result) as find_mock:
+ try:
+ self.cmd.take_action(parsed_args)
+ self.fail('CommandError should be raised.')
+ except exceptions.CommandError as e:
+ self.assertEqual('1 of 2 volumes failed to delete.',
+ str(e))
+
+ find_mock.assert_any_call(self.volumes_mock, volumes[0].id)
+ find_mock.assert_any_call(self.volumes_mock, 'unexist_volume')
+
+ self.assertEqual(2, find_mock.call_count)
+ self.volumes_mock.delete.assert_called_once_with(
+ volumes[0].id
+ )
+
class TestVolumeList(TestVolume):