summaryrefslogtreecommitdiff
path: root/openstackclient/tests
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/tests')
-rw-r--r--openstackclient/tests/functional/compute/v2/test_server.py179
-rw-r--r--openstackclient/tests/functional/volume/v3/test_volume.py1
-rw-r--r--openstackclient/tests/unit/common/test_progressbar.py11
-rw-r--r--openstackclient/tests/unit/compute/v2/fakes.py257
-rw-r--r--openstackclient/tests/unit/compute/v2/test_aggregate.py18
-rw-r--r--openstackclient/tests/unit/compute/v2/test_flavor.py14
-rw-r--r--openstackclient/tests/unit/compute/v2/test_hypervisor.py6
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py1764
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server_backup.py29
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server_image.py33
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server_volume.py49
-rw-r--r--openstackclient/tests/unit/compute/v2/test_service.py270
-rw-r--r--openstackclient/tests/unit/identity/v2_0/test_catalog.py6
-rw-r--r--openstackclient/tests/unit/identity/v2_0/test_project.py2
-rw-r--r--openstackclient/tests/unit/identity/v2_0/test_user.py8
-rw-r--r--openstackclient/tests/unit/identity/v3/test_catalog.py4
-rw-r--r--openstackclient/tests/unit/identity/v3/test_identity_provider.py24
-rw-r--r--openstackclient/tests/unit/image/v1/fakes.py31
-rw-r--r--openstackclient/tests/unit/image/v1/test_image.py10
-rw-r--r--openstackclient/tests/unit/image/v2/fakes.py178
-rw-r--r--openstackclient/tests/unit/image/v2/test_image.py24
-rw-r--r--openstackclient/tests/unit/network/test_sdk_utils.py59
-rw-r--r--openstackclient/tests/unit/network/v2/fakes.py117
-rw-r--r--openstackclient/tests/unit/network/v2/test_address_group.py18
-rw-r--r--openstackclient/tests/unit/network/v2/test_address_scope.py8
-rw-r--r--openstackclient/tests/unit/network/v2/test_floating_ip_network.py14
-rw-r--r--openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py6
-rw-r--r--openstackclient/tests/unit/network/v2/test_ip_availability.py13
-rw-r--r--openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py4
-rw-r--r--openstackclient/tests/unit/network/v2/test_network.py58
-rw-r--r--openstackclient/tests/unit/network/v2/test_network_agent.py14
-rw-r--r--openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py6
-rw-r--r--openstackclient/tests/unit/network/v2/test_network_flavor.py2
-rw-r--r--openstackclient/tests/unit/network/v2/test_network_flavor_profile.py6
-rw-r--r--openstackclient/tests/unit/network/v2/test_network_meter.py2
-rw-r--r--openstackclient/tests/unit/network/v2/test_network_qos_policy.py6
-rw-r--r--openstackclient/tests/unit/network/v2/test_network_rbac.py14
-rw-r--r--openstackclient/tests/unit/network/v2/test_port.py95
-rw-r--r--openstackclient/tests/unit/network/v2/test_router.py79
-rw-r--r--openstackclient/tests/unit/network/v2/test_security_group_compute.py10
-rw-r--r--openstackclient/tests/unit/network/v2/test_security_group_network.py22
-rw-r--r--openstackclient/tests/unit/network/v2/test_security_group_rule_network.py2
-rw-r--r--openstackclient/tests/unit/network/v2/test_subnet.py96
-rw-r--r--openstackclient/tests/unit/network/v2/test_subnet_pool.py48
-rw-r--r--openstackclient/tests/unit/volume/v1/test_qos_specs.py12
-rw-r--r--openstackclient/tests/unit/volume/v1/test_type.py14
-rw-r--r--openstackclient/tests/unit/volume/v1/test_volume.py44
-rw-r--r--openstackclient/tests/unit/volume/v1/test_volume_backup.py10
-rw-r--r--openstackclient/tests/unit/volume/v2/fakes.py110
-rw-r--r--openstackclient/tests/unit/volume/v2/test_consistency_group.py14
-rw-r--r--openstackclient/tests/unit/volume/v2/test_qos_specs.py12
-rw-r--r--openstackclient/tests/unit/volume/v2/test_type.py24
-rw-r--r--openstackclient/tests/unit/volume/v2/test_volume.py40
-rw-r--r--openstackclient/tests/unit/volume/v2/test_volume_backup.py4
-rw-r--r--openstackclient/tests/unit/volume/v2/test_volume_snapshot.py2
-rw-r--r--openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py (renamed from openstackclient/tests/unit/volume/v2/test_transfer_request.py)46
-rw-r--r--openstackclient/tests/unit/volume/v3/test_volume_message.py4
57 files changed, 2615 insertions, 1338 deletions
diff --git a/openstackclient/tests/functional/compute/v2/test_server.py b/openstackclient/tests/functional/compute/v2/test_server.py
index 9cf2fc7f..cf4bcbc2 100644
--- a/openstackclient/tests/functional/compute/v2/test_server.py
+++ b/openstackclient/tests/functional/compute/v2/test_server.py
@@ -1071,3 +1071,182 @@ class ServerTests(common.ComputeTestCase):
# networks and the test didn't specify a specific network.
self.assertNotIn('nics are required after microversion 2.36',
e.stderr)
+
+ def test_server_add_remove_network(self):
+ name = uuid.uuid4().hex
+ cmd_output = json.loads(self.openstack(
+ 'server create -f json ' +
+ '--network private ' +
+ '--flavor ' + self.flavor_name + ' ' +
+ '--image ' + self.image_name + ' ' +
+ '--wait ' +
+ name
+ ))
+
+ self.assertIsNotNone(cmd_output['id'])
+ self.assertEqual(name, cmd_output['name'])
+ self.addCleanup(self.openstack, 'server delete --wait ' + name)
+
+ # add network and check 'public' is in server show
+ self.openstack(
+ 'server add network ' + name + ' public')
+
+ wait_time = 0
+ while wait_time < 60:
+ cmd_output = json.loads(self.openstack(
+ 'server show -f json ' + name
+ ))
+ if 'public' not in cmd_output['addresses']:
+ # Hang out for a bit and try again
+ print('retrying add network check')
+ wait_time += 10
+ time.sleep(10)
+ else:
+ break
+ addresses = cmd_output['addresses']
+ self.assertIn('public', addresses)
+
+ # remove network and check 'public' is not in server show
+ self.openstack('server remove network ' + name + ' public')
+
+ wait_time = 0
+ while wait_time < 60:
+ cmd_output = json.loads(self.openstack(
+ 'server show -f json ' + name
+ ))
+ if 'public' in cmd_output['addresses']:
+ # Hang out for a bit and try again
+ print('retrying remove network check')
+ wait_time += 10
+ time.sleep(10)
+ else:
+ break
+
+ addresses = cmd_output['addresses']
+ self.assertNotIn('public', addresses)
+
+ def test_server_add_remove_port(self):
+ name = uuid.uuid4().hex
+ cmd_output = json.loads(self.openstack(
+ 'server create -f json ' +
+ '--network private ' +
+ '--flavor ' + self.flavor_name + ' ' +
+ '--image ' + self.image_name + ' ' +
+ '--wait ' +
+ name
+ ))
+
+ self.assertIsNotNone(cmd_output['id'])
+ self.assertEqual(name, cmd_output['name'])
+ self.addCleanup(self.openstack, 'server delete --wait ' + name)
+
+ # create port, record one of its ip address
+ port_name = uuid.uuid4().hex
+
+ cmd_output = json.loads(self.openstack(
+ 'port list -f json'
+ ))
+ self.assertNotIn(port_name, cmd_output)
+
+ cmd_output = json.loads(self.openstack(
+ 'port create -f json ' +
+ '--network private ' + port_name
+ ))
+ self.assertIsNotNone(cmd_output['id'])
+ ip_address = cmd_output['fixed_ips'][0]['ip_address']
+ self.addCleanup(self.openstack, 'port delete ' + port_name)
+
+ # add port to server, assert the ip address of the port appears
+ self.openstack('server add port ' + name + ' ' + port_name)
+
+ wait_time = 0
+ while wait_time < 60:
+ cmd_output = json.loads(self.openstack(
+ 'server show -f json ' + name
+ ))
+ if ip_address not in cmd_output['addresses']['private']:
+ # Hang out for a bit and try again
+ print('retrying add port check')
+ wait_time += 10
+ time.sleep(10)
+ else:
+ break
+ addresses = cmd_output['addresses']['private']
+ self.assertIn(ip_address, addresses)
+
+ # remove port, assert the ip address of the port doesn't appear
+ self.openstack('server remove port ' + name + ' ' + port_name)
+
+ wait_time = 0
+ while wait_time < 60:
+ cmd_output = json.loads(self.openstack(
+ 'server show -f json ' + name
+ ))
+ if ip_address in cmd_output['addresses']['private']:
+ # Hang out for a bit and try again
+ print('retrying add port check')
+ wait_time += 10
+ time.sleep(10)
+ else:
+ break
+ addresses = cmd_output['addresses']['private']
+ self.assertNotIn(ip_address, addresses)
+
+ def test_server_add_remove_volume(self):
+ volume_wait_for = volume_common.BaseVolumeTests.wait_for_status
+
+ name = uuid.uuid4().hex
+ cmd_output = json.loads(self.openstack(
+ 'server create -f json ' +
+ '--network private ' +
+ '--flavor ' + self.flavor_name + ' ' +
+ '--image ' + self.image_name + ' ' +
+ '--wait ' +
+ name
+ ))
+
+ self.assertIsNotNone(cmd_output['id'])
+ self.assertEqual(name, cmd_output['name'])
+ self.addCleanup(self.openstack, 'server delete --wait ' + name)
+ server_id = cmd_output['id']
+
+ volume_name = uuid.uuid4().hex
+ cmd_output = json.loads(self.openstack(
+ 'volume create -f json ' +
+ '--size 1 ' +
+ volume_name
+ ))
+
+ self.assertIsNotNone(cmd_output['id'])
+ self.assertEqual(volume_name, cmd_output['name'])
+ volume_wait_for('volume', volume_name, 'available')
+ self.addCleanup(self.openstack, 'volume delete ' + volume_name)
+ volume_id = cmd_output['id']
+
+ cmd_output = json.loads(self.openstack(
+ 'server add volume -f json ' +
+ name + ' ' +
+ volume_name + ' ' +
+ '--tag bar'
+ ))
+
+ self.assertIsNotNone(cmd_output['ID'])
+ self.assertEqual(server_id, cmd_output['Server ID'])
+ self.assertEqual(volume_id, cmd_output['Volume ID'])
+ volume_attachment_id = cmd_output['ID']
+
+ cmd_output = json.loads(self.openstack(
+ 'server volume list -f json ' +
+ name
+ ))
+
+ self.assertEqual(volume_attachment_id, cmd_output[0]['ID'])
+ self.assertEqual(server_id, cmd_output[0]['Server ID'])
+ self.assertEqual(volume_id, cmd_output[0]['Volume ID'])
+
+ volume_wait_for('volume', volume_name, 'in-use')
+ self.openstack('server remove volume ' + name + ' ' + volume_name)
+ volume_wait_for('volume', volume_name, 'available')
+
+ raw_output = self.openstack('server volume list ' + name)
+ self.assertEqual('\n', raw_output)
diff --git a/openstackclient/tests/functional/volume/v3/test_volume.py b/openstackclient/tests/functional/volume/v3/test_volume.py
index 6635167d..c1b45e2f 100644
--- a/openstackclient/tests/functional/volume/v3/test_volume.py
+++ b/openstackclient/tests/functional/volume/v3/test_volume.py
@@ -152,6 +152,7 @@ class VolumeTests(common.BaseVolumeTests):
name,
)
self.assertOutput('', raw_output)
+ self.wait_for_status("volume", new_name, "available")
cmd_output = json.loads(self.openstack(
'volume show -f json ' +
diff --git a/openstackclient/tests/unit/common/test_progressbar.py b/openstackclient/tests/unit/common/test_progressbar.py
index 7bc0b6ba..a624fc43 100644
--- a/openstackclient/tests/unit/common/test_progressbar.py
+++ b/openstackclient/tests/unit/common/test_progressbar.py
@@ -11,10 +11,9 @@
# under the License.
#
+import io
import sys
-import six
-
from openstackclient.common import progressbar
from openstackclient.tests.unit import utils
@@ -23,7 +22,7 @@ class TestProgressBarWrapper(utils.TestCase):
def test_iter_file_display_progress_bar(self):
size = 98304
- file_obj = six.StringIO('X' * size)
+ file_obj = io.StringIO('X' * size)
saved_stdout = sys.stdout
try:
sys.stdout = output = FakeTTYStdout()
@@ -41,7 +40,7 @@ class TestProgressBarWrapper(utils.TestCase):
def test_iter_file_no_tty(self):
size = 98304
- file_obj = six.StringIO('X' * size)
+ file_obj = io.StringIO('X' * size)
saved_stdout = sys.stdout
try:
sys.stdout = output = FakeNoTTYStdout()
@@ -56,7 +55,7 @@ class TestProgressBarWrapper(utils.TestCase):
sys.stdout = saved_stdout
-class FakeTTYStdout(six.StringIO):
+class FakeTTYStdout(io.StringIO):
"""A Fake stdout that try to emulate a TTY device as much as possible."""
def isatty(self):
@@ -67,7 +66,7 @@ class FakeTTYStdout(six.StringIO):
if data.startswith('\r'):
self.seek(0)
data = data[1:]
- return six.StringIO.write(self, data)
+ return io.StringIO.write(self, data)
class FakeNoTTYStdout(FakeTTYStdout):
diff --git a/openstackclient/tests/unit/compute/v2/fakes.py b/openstackclient/tests/unit/compute/v2/fakes.py
index 4a2a44de..55572cd8 100644
--- a/openstackclient/tests/unit/compute/v2/fakes.py
+++ b/openstackclient/tests/unit/compute/v2/fakes.py
@@ -20,6 +20,10 @@ import uuid
from novaclient import api_versions
from openstack.compute.v2 import flavor as _flavor
+from openstack.compute.v2 import server
+from openstack.compute.v2 import server_interface as _server_interface
+from openstack.compute.v2 import service
+from openstack.compute.v2 import volume_attachment
from openstackclient.api import compute_v2
from openstackclient.tests.unit import fakes
@@ -73,7 +77,7 @@ class FakeAggregate(object):
def create_one_aggregate(attrs=None):
"""Create a fake aggregate.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id and other attributes
@@ -104,7 +108,7 @@ class FakeAggregate(object):
def create_aggregates(attrs=None, count=2):
"""Create multiple fake aggregates.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of aggregates to fake
@@ -255,7 +259,7 @@ class FakeAgent(object):
def create_one_agent(attrs=None):
"""Create a fake agent.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with agent_id, os, and so on
@@ -285,7 +289,7 @@ class FakeAgent(object):
def create_agents(attrs=None, count=2):
"""Create multiple fake agents.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of agents to fake
@@ -306,7 +310,7 @@ class FakeExtension(object):
def create_one_extension(attrs=None):
"""Create a fake extension.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with name, namespace, etc.
@@ -342,7 +346,7 @@ class FakeHypervisor(object):
def create_one_hypervisor(attrs=None):
"""Create a fake hypervisor.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id, hypervisor_hostname, and so on
@@ -390,7 +394,7 @@ class FakeHypervisor(object):
def create_hypervisors(attrs=None, count=2):
"""Create multiple fake hypervisors.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of hypervisors to fake
@@ -411,7 +415,7 @@ class FakeHypervisorStats(object):
def create_one_hypervisor_stats(attrs=None):
"""Create a fake hypervisor stats.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with count, current_workload, and so on
@@ -450,7 +454,7 @@ class FakeHypervisorStats(object):
def create_hypervisors_stats(attrs=None, count=2):
"""Create multiple fake hypervisors stats.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of hypervisors to fake
@@ -472,7 +476,7 @@ class FakeSecurityGroup(object):
def create_one_security_group(attrs=None):
"""Create a fake security group.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id, name, etc.
@@ -496,7 +500,7 @@ class FakeSecurityGroup(object):
def create_security_groups(attrs=None, count=2):
"""Create multiple fake security groups.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of security groups to fake
@@ -537,7 +541,7 @@ class FakeSecurityGroupRule(object):
def create_one_security_group_rule(attrs=None):
"""Create a fake security group rule.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id, etc.
@@ -564,7 +568,7 @@ class FakeSecurityGroupRule(object):
def create_security_group_rules(attrs=None, count=2):
"""Create multiple fake security group rules.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of security group rules to fake
@@ -586,9 +590,9 @@ class FakeServer(object):
def create_one_server(attrs=None, methods=None):
"""Create a fake server.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
- :param Dictionary methods:
+ :param dict methods:
A dictionary with all methods
:return:
A FakeResource object, with id, name, metadata, and so on
@@ -622,9 +626,9 @@ class FakeServer(object):
def create_servers(attrs=None, methods=None, count=2):
"""Create multiple fake servers.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
- :param Dictionary methods:
+ :param dict methods:
A dictionary with all methods
:param int count:
The number of servers to fake
@@ -638,6 +642,59 @@ class FakeServer(object):
return servers
@staticmethod
+ def create_one_sdk_server(attrs=None, methods=None):
+ """Create a fake server for testing migration to sdk
+
+ :param dict attrs:
+ A dictionary with all attributes
+ :param dict methods:
+ A dictionary with all methods
+ :return:
+ A openstack.compute.v2.server.Server object,
+ with id, name, metadata, and so on
+ """
+ attrs = attrs or {}
+ methods = methods or {}
+
+ # Set default attributes.
+ server_info = {
+ 'id': 'server-id-' + uuid.uuid4().hex,
+ 'name': 'server-name-' + uuid.uuid4().hex,
+ 'metadata': {},
+ 'image': {
+ 'id': 'image-id-' + uuid.uuid4().hex,
+ },
+ 'flavor': {
+ 'id': 'flavor-id-' + uuid.uuid4().hex,
+ },
+ 'OS-EXT-STS:power_state': 1,
+ }
+
+ # Overwrite default attributes.
+ server_info.update(attrs)
+ return server.Server(**server_info)
+
+ @staticmethod
+ def create_sdk_servers(attrs=None, methods=None, count=2):
+ """Create multiple fake servers for testing migration to sdk
+
+ :param dict attrs:
+ A dictionary with all attributes
+ :param dict methods:
+ A dictionary with all methods
+ :param int count:
+ The number of servers to fake
+ :return:
+ A list of openstack.compute.v2.server.Server objects
+ faking the servers
+ """
+ servers = []
+ for i in range(0, count):
+ servers.append(FakeServer.create_one_sdk_server(attrs, methods))
+
+ return servers
+
+ @staticmethod
def get_servers(servers=None, count=2):
"""Get an iterable MagicMock object with a list of faked servers.
@@ -705,10 +762,10 @@ class FakeService(object):
def create_one_service(attrs=None):
"""Create a fake service.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
- A FakeResource object, with id, host, binary, and so on
+ A fake Service object, with id, host, binary, and so on
"""
attrs = attrs or {}
@@ -718,25 +775,24 @@ class FakeService(object):
'host': 'host-' + uuid.uuid4().hex,
'binary': 'binary-' + uuid.uuid4().hex,
'status': 'enabled',
- 'zone': 'zone-' + uuid.uuid4().hex,
+ 'availability_zone': 'zone-' + uuid.uuid4().hex,
'state': 'state-' + uuid.uuid4().hex,
'updated_at': 'time-' + uuid.uuid4().hex,
'disabled_reason': 'earthquake',
+ # Introduced in API microversion 2.11
+ 'is_forced_down': False,
}
# Overwrite default attributes.
service_info.update(attrs)
- service = fakes.FakeResource(info=copy.deepcopy(service_info),
- loaded=True)
-
- return service
+ return service.Service(**service_info)
@staticmethod
def create_services(attrs=None, count=2):
"""Create multiple fake services.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of services to fake
@@ -757,7 +813,7 @@ class FakeFlavor(object):
def create_one_flavor(attrs=None):
"""Create a fake flavor.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id, name, ram, vcpus, and so on
@@ -791,7 +847,7 @@ class FakeFlavor(object):
def create_flavors(attrs=None, count=2):
"""Create multiple fake flavors.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of flavors to fake
@@ -831,7 +887,7 @@ class FakeFlavorAccess(object):
def create_one_flavor_access(attrs=None):
"""Create a fake flavor access.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with flavor_id, tenat_id
@@ -860,7 +916,7 @@ class FakeKeypair(object):
def create_one_keypair(attrs=None, no_pri=False):
"""Create a fake keypair
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, name, fingerprint, and so on
@@ -890,7 +946,7 @@ class FakeKeypair(object):
def create_keypairs(attrs=None, count=2):
"""Create multiple fake keypairs.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of keypairs to fake
@@ -931,7 +987,7 @@ class FakeAvailabilityZone(object):
def create_one_availability_zone(attrs=None):
"""Create a fake AZ.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with zoneName, zoneState, etc.
@@ -964,7 +1020,7 @@ class FakeAvailabilityZone(object):
def create_availability_zones(attrs=None, count=2):
"""Create multiple fake AZs.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of AZs to fake
@@ -987,7 +1043,7 @@ class FakeFloatingIP(object):
def create_one_floating_ip(attrs=None):
"""Create a fake floating ip.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id, ip, and so on
@@ -1012,7 +1068,7 @@ class FakeFloatingIP(object):
def create_floating_ips(attrs=None, count=2):
"""Create multiple fake floating ips.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of floating ips to fake
@@ -1051,7 +1107,7 @@ class FakeFloatingIPPool(object):
def create_one_floating_ip_pool(attrs=None):
"""Create a fake floating ip pool.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with name, etc
@@ -1073,7 +1129,7 @@ class FakeFloatingIPPool(object):
def create_floating_ip_pools(attrs=None, count=2):
"""Create multiple fake floating ip pools.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of floating ip pools to fake
@@ -1095,7 +1151,7 @@ class FakeNetwork(object):
def create_one_network(attrs=None):
"""Create a fake network.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id, label, cidr and so on
@@ -1147,7 +1203,7 @@ class FakeNetwork(object):
def create_networks(attrs=None, count=2):
"""Create multiple fake networks.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of networks to fake
@@ -1187,7 +1243,7 @@ class FakeHost(object):
def create_one_host(attrs=None):
"""Create a fake host.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with uuid and other attributes
@@ -1241,7 +1297,7 @@ class FakeServerGroup(object):
def _create_one_server_group(attrs=None):
"""Create a fake server group
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id and other attributes
@@ -1271,7 +1327,7 @@ class FakeServerGroup(object):
def create_one_server_group(attrs=None):
"""Create a fake server group
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id and other attributes
@@ -1289,7 +1345,7 @@ class FakeServerGroupV264(object):
def create_one_server_group(attrs=None):
"""Create a fake server group
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id and other attributes
@@ -1307,7 +1363,7 @@ class FakeUsage(object):
def create_one_usage(attrs=None):
"""Create a fake usage.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with tenant_id and other attributes
@@ -1349,7 +1405,7 @@ class FakeUsage(object):
def create_usages(attrs=None, count=2):
"""Create multiple fake services.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of services to fake
@@ -1573,9 +1629,9 @@ class FakeMigration(object):
def create_one_migration(attrs=None, methods=None):
"""Create a fake migration.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
- :param Dictionary methods:
+ :param dict methods:
A dictionary with all methods
:return:
A FakeResource object, with id, type, and so on
@@ -1587,20 +1643,20 @@ class FakeMigration(object):
migration_info = {
"dest_host": "10.0.2.15",
"status": "migrating",
- "type": "migration",
+ "migration_type": "migration",
"updated_at": "2017-01-31T08:03:25.000000",
"created_at": "2017-01-31T08:03:21.000000",
"dest_compute": "compute-" + uuid.uuid4().hex,
"id": random.randint(1, 999),
"source_node": "node-" + uuid.uuid4().hex,
- "server": uuid.uuid4().hex,
+ "instance_uuid": uuid.uuid4().hex,
"dest_node": "node-" + uuid.uuid4().hex,
"source_compute": "compute-" + uuid.uuid4().hex,
"uuid": uuid.uuid4().hex,
"old_instance_type_id": uuid.uuid4().hex,
"new_instance_type_id": uuid.uuid4().hex,
- "project": uuid.uuid4().hex,
- "user": uuid.uuid4().hex
+ "project_id": uuid.uuid4().hex,
+ "user_id": uuid.uuid4().hex
}
# Overwrite default attributes.
@@ -1615,9 +1671,9 @@ class FakeMigration(object):
def create_migrations(attrs=None, methods=None, count=2):
"""Create multiple fake migrations.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
- :param Dictionary methods:
+ :param dict methods:
A dictionary with all methods
:param int count:
The number of migrations to fake
@@ -1640,9 +1696,9 @@ class FakeServerMigration(object):
def create_one_server_migration(attrs=None, methods=None):
"""Create a fake server migration.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
- :param Dictionary methods:
+ :param dict methods:
A dictionary with all methods
:return:
A FakeResource object, with id, type, and so on
@@ -1693,9 +1749,9 @@ class FakeVolumeAttachment(object):
def create_one_volume_attachment(attrs=None, methods=None):
"""Create a fake volume attachment.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
- :param Dictionary methods:
+ :param dict methods:
A dictionary with all methods
:return:
A FakeResource object, with id, device, and so on
@@ -1713,6 +1769,9 @@ class FakeVolumeAttachment(object):
"tag": "foo",
# introduced in API microversion 2.79
"delete_on_termination": True,
+ # introduced in API microversion 2.89
+ "attachment_id": uuid.uuid4().hex,
+ "bdm_uuid": uuid.uuid4().hex
}
# Overwrite default attributes.
@@ -1728,9 +1787,9 @@ class FakeVolumeAttachment(object):
def create_volume_attachments(attrs=None, methods=None, count=2):
"""Create multiple fake volume attachments (BDMs).
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
- :param Dictionary methods:
+ :param dict methods:
A dictionary with all methods
:param int count:
The number of volume attachments to fake
@@ -1744,3 +1803,85 @@ class FakeVolumeAttachment(object):
attrs, methods))
return volume_attachments
+
+ @staticmethod
+ def create_one_sdk_volume_attachment(attrs=None, methods=None):
+ """Create a fake sdk VolumeAttachment.
+
+ :param dict attrs:
+ A dictionary with all attributes
+ :param dict methods:
+ A dictionary with all methods
+ :return:
+ A fake VolumeAttachment object, with id, device, and so on
+ """
+ attrs = attrs or {}
+ methods = methods or {}
+
+ # Set default attributes.
+ volume_attachment_info = {
+ "id": uuid.uuid4().hex,
+ "device": "/dev/sdb",
+ "server_id": uuid.uuid4().hex,
+ "volume_id": uuid.uuid4().hex,
+ # introduced in API microversion 2.70
+ "tag": "foo",
+ # introduced in API microversion 2.79
+ "delete_on_termination": True,
+ # introduced in API microversion 2.89
+ "attachment_id": uuid.uuid4().hex,
+ "bdm_uuid": uuid.uuid4().hex
+ }
+
+ # Overwrite default attributes.
+ volume_attachment_info.update(attrs)
+
+ return volume_attachment.VolumeAttachment(**volume_attachment_info)
+
+ @staticmethod
+ def create_sdk_volume_attachments(attrs=None, methods=None, count=2):
+ """Create multiple fake VolumeAttachment objects (BDMs).
+
+ :param dict attrs:
+ A dictionary with all attributes
+ :param dict methods:
+ A dictionary with all methods
+ :param int count:
+ The number of volume attachments to fake
+ :return:
+ A list of VolumeAttachment objects faking the volume attachments.
+ """
+ volume_attachments = []
+ for i in range(0, count):
+ volume_attachments.append(
+ FakeVolumeAttachment.create_one_sdk_volume_attachment(
+ attrs, methods))
+
+ return volume_attachments
+
+
+def create_one_server_interface(attrs=None):
+ """Create a fake SDK ServerInterface.
+
+ :param dict attrs: A dictionary with all attributes
+ :param dict methods: A dictionary with all methods
+ :return: A fake ServerInterface object with various attributes set
+ """
+ attrs = attrs or {}
+
+ # Set default attributes.
+ server_interface_info = {
+ "fixed_ips": uuid.uuid4().hex,
+ "mac_addr": "aa:aa:aa:aa:aa:aa",
+ "net_id": uuid.uuid4().hex,
+ "port_id": uuid.uuid4().hex,
+ "port_state": "ACTIVE",
+ "server_id": uuid.uuid4().hex,
+ # introduced in API microversion 2.70
+ "tag": "foo",
+ }
+
+ # Overwrite default attributes.
+ server_interface_info.update(attrs)
+
+ return _server_interface.ServerInterface(**server_interface_info)
diff --git a/openstackclient/tests/unit/compute/v2/test_aggregate.py b/openstackclient/tests/unit/compute/v2/test_aggregate.py
index 8563f988..cad85e4d 100644
--- a/openstackclient/tests/unit/compute/v2/test_aggregate.py
+++ b/openstackclient/tests/unit/compute/v2/test_aggregate.py
@@ -88,7 +88,7 @@ class TestAggregateAddHost(TestAggregate):
self.sdk_client.add_host_to_aggregate.assert_called_once_with(
self.fake_ag.id, parsed_args.host)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestAggregateCreate(TestAggregate):
@@ -112,7 +112,7 @@ class TestAggregateCreate(TestAggregate):
self.sdk_client.create_aggregate.assert_called_once_with(
name=parsed_args.name)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_aggregate_create_with_zone(self):
arglist = [
@@ -129,7 +129,7 @@ class TestAggregateCreate(TestAggregate):
self.sdk_client.create_aggregate.assert_called_once_with(
name=parsed_args.name, availability_zone=parsed_args.zone)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_aggregate_create_with_property(self):
arglist = [
@@ -148,7 +148,7 @@ class TestAggregateCreate(TestAggregate):
self.sdk_client.set_aggregate_metadata.assert_called_once_with(
self.fake_ag.id, parsed_args.properties)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestAggregateDelete(TestAggregate):
@@ -234,6 +234,7 @@ class TestAggregateList(TestAggregate):
"Name",
"Availability Zone",
"Properties",
+ "Hosts",
)
list_data = ((
@@ -251,6 +252,7 @@ class TestAggregateList(TestAggregate):
for key, value in TestAggregate.fake_ag.metadata.items()
if key != 'availability_zone'
}),
+ format_columns.ListColumn(TestAggregate.fake_ag.hosts),
), )
def setUp(self):
@@ -265,7 +267,7 @@ class TestAggregateList(TestAggregate):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.list_columns, columns)
- self.assertItemsEqual(self.list_data, tuple(data))
+ self.assertCountEqual(self.list_data, tuple(data))
def test_aggregate_list_with_long(self):
arglist = [
@@ -278,7 +280,7 @@ class TestAggregateList(TestAggregate):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.list_columns_long, columns)
- self.assertItemsEqual(self.list_data_long, tuple(data))
+ self.assertCountEqual(self.list_data_long, tuple(data))
class TestAggregateRemoveHost(TestAggregate):
@@ -306,7 +308,7 @@ class TestAggregateRemoveHost(TestAggregate):
self.sdk_client.remove_host_from_aggregate.assert_called_once_with(
self.fake_ag.id, parsed_args.host)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestAggregateSet(TestAggregate):
@@ -492,7 +494,7 @@ class TestAggregateShow(TestAggregate):
parsed_args.aggregate, ignore_missing=False)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, tuple(data))
+ self.assertCountEqual(self.data, tuple(data))
class TestAggregateUnset(TestAggregate):
diff --git a/openstackclient/tests/unit/compute/v2/test_flavor.py b/openstackclient/tests/unit/compute/v2/test_flavor.py
index ee4479b0..14dd3df2 100644
--- a/openstackclient/tests/unit/compute/v2/test_flavor.py
+++ b/openstackclient/tests/unit/compute/v2/test_flavor.py
@@ -133,7 +133,7 @@ class TestFlavorCreate(TestFlavor):
self.sdk_client.create_flavor.assert_called_once_with(**default_args)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_flavor_create_all_options(self):
@@ -202,7 +202,7 @@ class TestFlavorCreate(TestFlavor):
self.sdk_client.get_flavor_access.assert_not_called()
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(tuple(cmp_data), data)
+ self.assertCountEqual(tuple(cmp_data), data)
def test_flavor_create_other_options(self):
@@ -277,7 +277,7 @@ class TestFlavorCreate(TestFlavor):
self.sdk_client.create_flavor_extra_specs.assert_called_with(
create_flavor, props)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(cmp_data, data)
+ self.assertCountEqual(cmp_data, data)
def test_public_flavor_create_with_project(self):
arglist = [
@@ -350,7 +350,7 @@ class TestFlavorCreate(TestFlavor):
self.sdk_client.create_flavor.assert_called_once_with(**args)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data_private, data)
+ self.assertCountEqual(self.data_private, data)
def test_flavor_create_with_description_api_older(self):
arglist = [
@@ -633,7 +633,7 @@ class TestFlavorList(TestFlavor):
)
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, tuple(data))
+ self.assertCountEqual(self.data_long, tuple(data))
def test_flavor_list_min_disk_min_ram(self):
arglist = [
@@ -951,7 +951,7 @@ class TestFlavorShow(TestFlavor):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_private_flavor_show(self):
private_flavor = compute_fakes.FakeFlavor.create_one_flavor(
@@ -991,7 +991,7 @@ class TestFlavorShow(TestFlavor):
self.sdk_client.get_flavor_access.assert_called_with(
flavor=private_flavor.id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(data_with_project, data)
+ self.assertCountEqual(data_with_project, data)
class TestFlavorUnset(TestFlavor):
diff --git a/openstackclient/tests/unit/compute/v2/test_hypervisor.py b/openstackclient/tests/unit/compute/v2/test_hypervisor.py
index 3220a764..7dbd6e19 100644
--- a/openstackclient/tests/unit/compute/v2/test_hypervisor.py
+++ b/openstackclient/tests/unit/compute/v2/test_hypervisor.py
@@ -394,7 +394,7 @@ class TestHypervisorShow(TestHypervisor):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_hypervisor_show_pre_v228(self):
self.app.client_manager.compute.api_version = \
@@ -420,7 +420,7 @@ class TestHypervisorShow(TestHypervisor):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_hypervisor_show_uptime_not_implemented(self):
self.app.client_manager.compute.api_version = \
@@ -492,4 +492,4 @@ class TestHypervisorShow(TestHypervisor):
)
self.assertEqual(expected_columns, columns)
- self.assertItemsEqual(expected_data, data)
+ self.assertCountEqual(expected_data, data)
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 42c8816b..14b26d13 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -24,6 +24,7 @@ from unittest.mock import call
import iso8601
from novaclient import api_versions
from openstack import exceptions as sdk_exceptions
+from openstack import utils as sdk_utils
from osc_lib.cli import format_columns
from osc_lib import exceptions
from osc_lib import utils as common_utils
@@ -69,6 +70,10 @@ class TestServer(compute_fakes.TestComputev2):
self.servers_mock = self.app.client_manager.compute.servers
self.servers_mock.reset_mock()
+ self.app.client_manager.sdk_connection = mock.Mock()
+ self.app.client_manager.sdk_connection.compute = mock.Mock()
+ self.sdk_client = self.app.client_manager.sdk_connection.compute
+
# Get a shortcut to the compute client ServerMigrationsManager Mock
self.server_migrations_mock = \
self.app.client_manager.compute.server_migrations
@@ -100,6 +105,9 @@ class TestServer(compute_fakes.TestComputev2):
self.volumes_mock = self.app.client_manager.volume.volumes
self.volumes_mock.reset_mock()
+ self.app.client_manager.sdk_connection.volume = mock.Mock()
+ self.sdk_volume_client = self.app.client_manager.sdk_connection.volume
+
# Get a shortcut to the volume client VolumeManager Mock
self.snapshots_mock = self.app.client_manager.volume.volume_snapshots
self.snapshots_mock.reset_mock()
@@ -133,6 +141,26 @@ class TestServer(compute_fakes.TestComputev2):
0)
return servers
+ def setup_sdk_servers_mock(self, count):
+ servers = compute_fakes.FakeServer.create_sdk_servers(
+ attrs=self.attrs,
+ methods=self.methods,
+ count=count,
+ )
+
+ # This is the return value for compute_client.find_server()
+ self.sdk_client.find_server.side_effect = servers
+
+ return servers
+
+ def setup_sdk_volumes_mock(self, count):
+ volumes = volume_fakes.FakeVolume.create_sdk_volumes(count=count)
+
+ # This is the return value for volume_client.find_volume()
+ self.sdk_volume_client.find_volume.side_effect = volumes
+
+ return volumes
+
def run_method_with_servers(self, method_name, server_count):
servers = self.setup_servers_mock(server_count)
@@ -164,113 +192,160 @@ class TestServer(compute_fakes.TestComputev2):
method.assert_called_with()
self.assertIsNone(result)
+ def run_method_with_sdk_servers(self, method_name, server_count):
+ servers = self.setup_sdk_servers_mock(count=server_count)
+
+ arglist = [s.id for s in servers]
+ verifylist = [
+ ('server', arglist),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ calls = [call(s.id) for s in servers]
+ method = getattr(self.sdk_client, method_name)
+ method.assert_has_calls(calls)
+ self.assertIsNone(result)
+
class TestServerAddFixedIP(TestServer):
def setUp(self):
- super(TestServerAddFixedIP, self).setUp()
+ super().setUp()
# Get the command object to test
self.cmd = server.AddFixedIP(self.app, None)
- # Set add_fixed_ip method to be tested.
- self.methods = {
- 'interface_attach': None,
- }
+ # Mock network methods
+ self.find_network = mock.Mock()
+ self.app.client_manager.network.find_network = self.find_network
- def _test_server_add_fixed_ip(self, extralist, fixed_ip_address):
- servers = self.setup_servers_mock(count=1)
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_server_add_fixed_ip_pre_v244(self, sm_mock):
+ sm_mock.return_value = False
+
+ servers = self.setup_sdk_servers_mock(count=1)
network = compute_fakes.FakeNetwork.create_one_network()
- with mock.patch(
- 'openstackclient.api.compute_v2.APIv2.network_find'
- ) as net_mock:
- net_mock.return_value = network
+ with mock.patch.object(
+ self.app.client_manager,
+ 'is_network_endpoint_enabled',
+ return_value=False
+ ):
arglist = [
servers[0].id,
network['id'],
- ] + extralist
+ ]
verifylist = [
('server', servers[0].id),
('network', network['id']),
- ('fixed_ip_address', fixed_ip_address),
+ ('fixed_ip_address', None),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- servers[0].interface_attach.assert_called_once_with(
- port_id=None,
- net_id=network['id'],
- fixed_ip=fixed_ip_address,
+ self.sdk_client.add_fixed_ip_to_server.assert_called_once_with(
+ servers[0].id,
+ network['id']
)
- self.assertIsNone(result)
+ # the legacy API operates asynchronously
+ self.assertEqual(((), ()), result)
- def test_server_add_fixed_ip(self):
- self._test_server_add_fixed_ip([], None)
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_server_add_fixed_ip_pre_v244_with_fixed_ip(self, sm_mock):
+ sm_mock.return_value = False
- def test_server_add_specific_fixed_ip(self):
- extralist = ['--fixed-ip-address', '5.6.7.8']
- self._test_server_add_fixed_ip(extralist, '5.6.7.8')
+ servers = self.setup_sdk_servers_mock(count=1)
+ network = compute_fakes.FakeNetwork.create_one_network()
- def test_server_add_fixed_ip_with_tag(self):
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.49')
+ with mock.patch.object(
+ self.app.client_manager,
+ 'is_network_endpoint_enabled',
+ return_value=False
+ ):
+ arglist = [
+ servers[0].id,
+ network['id'],
+ '--fixed-ip-address', '5.6.7.8'
+ ]
+ verifylist = [
+ ('server', servers[0].id),
+ ('network', network['id']),
+ ('fixed_ip_address', '5.6.7.8'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- servers = self.setup_servers_mock(count=1)
+ result = self.cmd.take_action(parsed_args)
+
+ self.sdk_client.add_fixed_ip_to_server.assert_called_once_with(
+ servers[0].id,
+ network['id']
+ )
+ # the legacy API operates asynchronously
+ self.assertEqual(((), ()), result)
+
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_server_add_fixed_ip_pre_v244_with_tag(self, sm_mock):
+ sm_mock.return_value = False
+
+ servers = self.setup_sdk_servers_mock(count=1)
network = compute_fakes.FakeNetwork.create_one_network()
- with mock.patch(
- 'openstackclient.api.compute_v2.APIv2.network_find'
- ) as net_mock:
- net_mock.return_value = network
+ with mock.patch.object(
+ self.app.client_manager,
+ 'is_network_endpoint_enabled',
+ return_value=False
+ ):
arglist = [
servers[0].id,
network['id'],
'--fixed-ip-address', '5.6.7.8',
- '--tag', 'tag1',
+ '--tag', 'tag1'
]
verifylist = [
('server', servers[0].id),
('network', network['id']),
('fixed_ip_address', '5.6.7.8'),
- ('tag', 'tag1'),
+ ('tag', 'tag1')
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- result = self.cmd.take_action(parsed_args)
- servers[0].interface_attach.assert_called_once_with(
- port_id=None,
- net_id=network['id'],
- fixed_ip='5.6.7.8',
- tag='tag1'
- )
- self.assertIsNone(result)
+ ex = self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+ self.assertIn(
+ '--os-compute-api-version 2.49 or greater is required',
+ str(ex))
- def test_server_add_fixed_ip_with_tag_pre_v249(self):
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.48')
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_server_add_fixed_ip_pre_v249_with_tag(self, sm_mock):
+ sm_mock.side_effect = [False, True]
- servers = self.setup_servers_mock(count=1)
+ servers = self.setup_sdk_servers_mock(count=1)
network = compute_fakes.FakeNetwork.create_one_network()
- with mock.patch(
- 'openstackclient.api.compute_v2.APIv2.network_find'
- ) as net_mock:
- net_mock.return_value = network
+ with mock.patch.object(
+ self.app.client_manager,
+ 'is_network_endpoint_enabled',
+ return_value=False
+ ):
arglist = [
servers[0].id,
network['id'],
'--fixed-ip-address', '5.6.7.8',
- '--tag', 'tag1',
+ '--tag', 'tag1'
]
verifylist = [
('server', servers[0].id),
('network', network['id']),
('fixed_ip_address', '5.6.7.8'),
- ('tag', 'tag1'),
+ ('tag', 'tag1')
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
ex = self.assertRaises(
exceptions.CommandError,
self.cmd.take_action,
@@ -279,6 +354,170 @@ class TestServerAddFixedIP(TestServer):
'--os-compute-api-version 2.49 or greater is required',
str(ex))
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_server_add_fixed_ip(self, sm_mock):
+ sm_mock.side_effect = [True, False]
+
+ servers = self.setup_sdk_servers_mock(count=1)
+ network = compute_fakes.FakeNetwork.create_one_network()
+ interface = compute_fakes.create_one_server_interface()
+ self.sdk_client.create_server_interface.return_value = interface
+
+ with mock.patch.object(
+ self.app.client_manager,
+ 'is_network_endpoint_enabled',
+ return_value=False
+ ):
+ arglist = [
+ servers[0].id,
+ network['id']
+ ]
+ verifylist = [
+ ('server', servers[0].id),
+ ('network', network['id'])
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ expected_columns = (
+ 'Port ID',
+ 'Server ID',
+ 'Network ID',
+ 'MAC Address',
+ 'Port State',
+ 'Fixed IPs',
+ )
+ expected_data = (
+ interface.port_id,
+ interface.server_id,
+ interface.net_id,
+ interface.mac_addr,
+ interface.port_state,
+ format_columns.ListDictColumn(interface.fixed_ips),
+ )
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.assertEqual(expected_columns, columns)
+ self.assertEqual(expected_data, tuple(data))
+ self.sdk_client.create_server_interface.assert_called_once_with(
+ servers[0].id,
+ net_id=network['id'],
+ fixed_ip=None
+ )
+
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_server_add_fixed_ip_with_fixed_ip(self, sm_mock):
+ sm_mock.side_effect = [True, True]
+
+ servers = self.setup_sdk_servers_mock(count=1)
+ network = compute_fakes.FakeNetwork.create_one_network()
+ interface = compute_fakes.create_one_server_interface()
+ self.sdk_client.create_server_interface.return_value = interface
+
+ with mock.patch.object(
+ self.app.client_manager,
+ 'is_network_endpoint_enabled',
+ return_value=False
+ ):
+ arglist = [
+ servers[0].id,
+ network['id'],
+ '--fixed-ip-address', '5.6.7.8'
+ ]
+ verifylist = [
+ ('server', servers[0].id),
+ ('network', network['id']),
+ ('fixed_ip_address', '5.6.7.8')
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ expected_columns = (
+ 'Port ID',
+ 'Server ID',
+ 'Network ID',
+ 'MAC Address',
+ 'Port State',
+ 'Fixed IPs',
+ 'Tag',
+ )
+ expected_data = (
+ interface.port_id,
+ interface.server_id,
+ interface.net_id,
+ interface.mac_addr,
+ interface.port_state,
+ format_columns.ListDictColumn(interface.fixed_ips),
+ interface.tag,
+ )
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.assertEqual(expected_columns, columns)
+ self.assertEqual(expected_data, tuple(data))
+ self.sdk_client.create_server_interface.assert_called_once_with(
+ servers[0].id,
+ net_id=network['id'],
+ fixed_ip='5.6.7.8'
+ )
+
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_server_add_fixed_ip_with_tag(self, sm_mock):
+ sm_mock.side_effect = [True, True, True]
+
+ servers = self.setup_sdk_servers_mock(count=1)
+ network = compute_fakes.FakeNetwork.create_one_network()
+ interface = compute_fakes.create_one_server_interface()
+ self.sdk_client.create_server_interface.return_value = interface
+
+ with mock.patch.object(
+ self.app.client_manager,
+ 'is_network_endpoint_enabled',
+ return_value=False
+ ):
+ arglist = [
+ servers[0].id,
+ network['id'],
+ '--fixed-ip-address', '5.6.7.8',
+ '--tag', 'tag1'
+ ]
+ verifylist = [
+ ('server', servers[0].id),
+ ('network', network['id']),
+ ('fixed_ip_address', '5.6.7.8'),
+ ('tag', 'tag1')
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ expected_columns = (
+ 'Port ID',
+ 'Server ID',
+ 'Network ID',
+ 'MAC Address',
+ 'Port State',
+ 'Fixed IPs',
+ 'Tag',
+ )
+ expected_data = (
+ interface.port_id,
+ interface.server_id,
+ interface.net_id,
+ interface.mac_addr,
+ interface.port_state,
+ format_columns.ListDictColumn(interface.fixed_ips),
+ interface.tag,
+ )
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.assertEqual(expected_columns, columns)
+ self.assertEqual(expected_data, tuple(data))
+ self.sdk_client.create_server_interface.assert_called_once_with(
+ servers[0].id,
+ net_id=network['id'],
+ fixed_ip='5.6.7.8',
+ tag='tag1',
+ )
+
@mock.patch(
'openstackclient.api.compute_v2.APIv2.floating_ip_add'
@@ -570,7 +809,7 @@ class TestServerAddPort(TestServer):
self.app.client_manager.network.find_port = self.find_port
def _test_server_add_port(self, port_id):
- servers = self.setup_servers_mock(count=1)
+ servers = self.setup_sdk_servers_mock(count=1)
port = 'fake-port'
arglist = [
@@ -585,8 +824,8 @@ class TestServerAddPort(TestServer):
result = self.cmd.take_action(parsed_args)
- servers[0].interface_attach.assert_called_once_with(
- port_id=port_id, net_id=None, fixed_ip=None)
+ self.sdk_client.create_server_interface.assert_called_once_with(
+ servers[0], port_id=port_id, fixed_ip=None)
self.assertIsNone(result)
def test_server_add_port(self):
@@ -599,11 +838,12 @@ class TestServerAddPort(TestServer):
self._test_server_add_port('fake-port')
self.find_port.assert_not_called()
- def test_server_add_port_with_tag(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion', return_value=True)
+ def test_server_add_port_with_tag(self, sm_mock):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
'2.49')
- servers = self.setup_servers_mock(count=1)
+ servers = self.setup_sdk_servers_mock(count=1)
self.find_port.return_value.id = 'fake-port'
arglist = [
servers[0].id,
@@ -620,13 +860,14 @@ class TestServerAddPort(TestServer):
result = self.cmd.take_action(parsed_args)
self.assertIsNone(result)
- servers[0].interface_attach.assert_called_once_with(
+ self.sdk_client.create_server_interface.assert_called_once_with(
+ servers[0],
port_id='fake-port',
- net_id=None,
fixed_ip=None,
tag='tag1')
- def test_server_add_port_with_tag_pre_v249(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion', return_value=False)
+ def test_server_add_port_with_tag_pre_v249(self, sm_mock):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
'2.48')
@@ -658,77 +899,116 @@ class TestServerVolume(TestServer):
def setUp(self):
super(TestServerVolume, self).setUp()
- self.volume = volume_fakes.FakeVolume.create_one_volume()
- self.volumes_mock.get.return_value = self.volume
-
self.methods = {
- 'create_server_volume': None,
+ 'create_volume_attachment': None,
}
+ self.servers = self.setup_sdk_servers_mock(count=1)
+ self.volumes = self.setup_sdk_volumes_mock(count=1)
+
+ attrs = {
+ 'server_id': self.servers[0].id,
+ 'volume_id': self.volumes[0].id,
+ }
+ self.volume_attachment = \
+ compute_fakes.FakeVolumeAttachment.\
+ create_one_sdk_volume_attachment(attrs=attrs)
+
+ self.sdk_client.create_volume_attachment.return_value = \
+ self.volume_attachment
+
+
+class TestServerAddVolume(TestServerVolume):
+
+ def setUp(self):
+ super(TestServerAddVolume, self).setUp()
+
# Get the command object to test
self.cmd = server.AddServerVolume(self.app, None)
- def test_server_add_volume(self):
- servers = self.setup_servers_mock(count=1)
+ @mock.patch.object(sdk_utils, 'supports_microversion', return_value=False)
+ def test_server_add_volume(self, sm_mock):
+
arglist = [
'--device', '/dev/sdb',
- servers[0].id,
- self.volume.id,
+ self.servers[0].id,
+ self.volumes[0].id,
]
verifylist = [
- ('server', servers[0].id),
- ('volume', self.volume.id),
+ ('server', self.servers[0].id),
+ ('volume', self.volumes[0].id),
('device', '/dev/sdb'),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- result = self.cmd.take_action(parsed_args)
+ expected_columns = ('ID', 'Server ID', 'Volume ID', 'Device')
+ expected_data = (
+ self.volume_attachment.id,
+ self.volume_attachment.server_id,
+ self.volume_attachment.volume_id,
+ '/dev/sdb',
+ )
- self.servers_volumes_mock.create_server_volume.assert_called_once_with(
- servers[0].id, self.volume.id, device='/dev/sdb')
- self.assertIsNone(result)
+ columns, data = self.cmd.take_action(parsed_args)
- def test_server_add_volume_with_tag(self):
- # requires API 2.49 or later
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.49')
+ self.assertEqual(expected_columns, columns)
+ self.assertEqual(expected_data, data)
+ self.sdk_client.create_volume_attachment.assert_called_once_with(
+ self.servers[0], volumeId=self.volumes[0].id, device='/dev/sdb')
+
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_server_add_volume_with_tag(self, sm_mock):
+ def side_effect(compute_client, version):
+ if version == '2.49':
+ return True
+ return False
+ sm_mock.side_effect = side_effect
- servers = self.setup_servers_mock(count=1)
arglist = [
'--device', '/dev/sdb',
'--tag', 'foo',
- servers[0].id,
- self.volume.id,
+ self.servers[0].id,
+ self.volumes[0].id,
]
verifylist = [
- ('server', servers[0].id),
- ('volume', self.volume.id),
+ ('server', self.servers[0].id),
+ ('volume', self.volumes[0].id),
('device', '/dev/sdb'),
('tag', 'foo'),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- result = self.cmd.take_action(parsed_args)
+ expected_columns = ('ID', 'Server ID', 'Volume ID', 'Device', 'Tag')
+ expected_data = (
+ self.volume_attachment.id,
+ self.volume_attachment.server_id,
+ self.volume_attachment.volume_id,
+ self.volume_attachment.device,
+ self.volume_attachment.tag,
+ )
- self.servers_volumes_mock.create_server_volume.assert_called_once_with(
- servers[0].id, self.volume.id, device='/dev/sdb', tag='foo')
- self.assertIsNone(result)
+ columns, data = self.cmd.take_action(parsed_args)
- def test_server_add_volume_with_tag_pre_v249(self):
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.48')
+ self.assertEqual(expected_columns, columns)
+ self.assertEqual(expected_data, data)
+ self.sdk_client.create_volume_attachment.assert_called_once_with(
+ self.servers[0],
+ volumeId=self.volumes[0].id,
+ device='/dev/sdb',
+ tag='foo')
- servers = self.setup_servers_mock(count=1)
+ @mock.patch.object(sdk_utils, 'supports_microversion', return_value=False)
+ def test_server_add_volume_with_tag_pre_v249(self, sm_mock):
arglist = [
- servers[0].id,
- self.volume.id,
+ self.servers[0].id,
+ self.volumes[0].id,
'--tag', 'foo',
]
verifylist = [
- ('server', servers[0].id),
- ('volume', self.volume.id),
+ ('server', self.servers[0].id),
+ ('volume', self.volumes[0].id),
('tag', 'foo'),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -741,75 +1021,121 @@ class TestServerVolume(TestServer):
'--os-compute-api-version 2.49 or greater is required',
str(ex))
- def test_server_add_volume_with_enable_delete_on_termination(self):
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.79')
-
- servers = self.setup_servers_mock(count=1)
+ @mock.patch.object(sdk_utils, 'supports_microversion', return_value=True)
+ def test_server_add_volume_with_enable_delete_on_termination(
+ self,
+ sm_mock,
+ ):
+ self.volume_attachment.delete_on_termination = True
arglist = [
'--enable-delete-on-termination',
'--device', '/dev/sdb',
- servers[0].id,
- self.volume.id,
+ self.servers[0].id,
+ self.volumes[0].id,
]
verifylist = [
- ('server', servers[0].id),
- ('volume', self.volume.id),
+ ('server', self.servers[0].id),
+ ('volume', self.volumes[0].id),
('device', '/dev/sdb'),
('enable_delete_on_termination', True),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- result = self.cmd.take_action(parsed_args)
-
- self.servers_volumes_mock.create_server_volume.assert_called_once_with(
- servers[0].id, self.volume.id,
- device='/dev/sdb', delete_on_termination=True)
- self.assertIsNone(result)
+ expected_columns = (
+ 'ID',
+ 'Server ID',
+ 'Volume ID',
+ 'Device',
+ 'Tag',
+ 'Delete On Termination',
+ )
+ expected_data = (
+ self.volume_attachment.id,
+ self.volume_attachment.server_id,
+ self.volume_attachment.volume_id,
+ self.volume_attachment.device,
+ self.volume_attachment.tag,
+ self.volume_attachment.delete_on_termination,
+ )
- def test_server_add_volume_with_disable_delete_on_termination(self):
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.79')
+ columns, data = self.cmd.take_action(parsed_args)
+ self.assertEqual(expected_columns, columns)
+ self.assertEqual(expected_data, data)
+ self.sdk_client.create_volume_attachment.assert_called_once_with(
+ self.servers[0],
+ volumeId=self.volumes[0].id,
+ device='/dev/sdb',
+ delete_on_termination=True)
+
+ @mock.patch.object(sdk_utils, 'supports_microversion', return_value=True)
+ def test_server_add_volume_with_disable_delete_on_termination(
+ self,
+ sm_mock,
+ ):
+ self.volume_attachment.delete_on_termination = False
- servers = self.setup_servers_mock(count=1)
arglist = [
'--disable-delete-on-termination',
'--device', '/dev/sdb',
- servers[0].id,
- self.volume.id,
+ self.servers[0].id,
+ self.volumes[0].id,
]
verifylist = [
- ('server', servers[0].id),
- ('volume', self.volume.id),
+ ('server', self.servers[0].id),
+ ('volume', self.volumes[0].id),
('device', '/dev/sdb'),
('disable_delete_on_termination', True),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- result = self.cmd.take_action(parsed_args)
+ expected_columns = (
+ 'ID',
+ 'Server ID',
+ 'Volume ID',
+ 'Device',
+ 'Tag',
+ 'Delete On Termination',
+ )
+ expected_data = (
+ self.volume_attachment.id,
+ self.volume_attachment.server_id,
+ self.volume_attachment.volume_id,
+ self.volume_attachment.device,
+ self.volume_attachment.tag,
+ self.volume_attachment.delete_on_termination,
+ )
- self.servers_volumes_mock.create_server_volume.assert_called_once_with(
- servers[0].id, self.volume.id,
- device='/dev/sdb', delete_on_termination=False)
- self.assertIsNone(result)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.assertEqual(expected_columns, columns)
+ self.assertEqual(expected_data, data)
+ self.sdk_client.create_volume_attachment.assert_called_once_with(
+ self.servers[0],
+ volumeId=self.volumes[0].id,
+ device='/dev/sdb',
+ delete_on_termination=False)
+ @mock.patch.object(sdk_utils, 'supports_microversion')
def test_server_add_volume_with_enable_delete_on_termination_pre_v279(
self,
+ sm_mock,
):
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.78')
+ def side_effect(compute_client, version):
+ if version == '2.79':
+ return False
+ return True
+ sm_mock.side_effect = side_effect
- servers = self.setup_servers_mock(count=1)
arglist = [
- servers[0].id,
- self.volume.id,
+ self.servers[0].id,
+ self.volumes[0].id,
'--enable-delete-on-termination',
]
verifylist = [
- ('server', servers[0].id),
- ('volume', self.volume.id),
+ ('server', self.servers[0].id),
+ ('volume', self.volumes[0].id),
('enable_delete_on_termination', True),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -820,21 +1146,25 @@ class TestServerVolume(TestServer):
self.assertIn('--os-compute-api-version 2.79 or greater is required',
str(ex))
+ @mock.patch.object(sdk_utils, 'supports_microversion')
def test_server_add_volume_with_disable_delete_on_termination_pre_v279(
self,
+ sm_mock,
):
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.78')
+ def side_effect(compute_client, version):
+ if version == '2.79':
+ return False
+ return True
+ sm_mock.side_effect = side_effect
- servers = self.setup_servers_mock(count=1)
arglist = [
- servers[0].id,
- self.volume.id,
+ self.servers[0].id,
+ self.volumes[0].id,
'--disable-delete-on-termination',
]
verifylist = [
- ('server', servers[0].id),
- ('volume', self.volume.id),
+ ('server', self.servers[0].id),
+ ('volume', self.volumes[0].id),
('disable_delete_on_termination', True),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -845,24 +1175,22 @@ class TestServerVolume(TestServer):
self.assertIn('--os-compute-api-version 2.79 or greater is required',
str(ex))
+ @mock.patch.object(sdk_utils, 'supports_microversion', return_value=True)
def test_server_add_volume_with_disable_and_enable_delete_on_termination(
self,
+ sm_mock,
):
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.79')
-
- servers = self.setup_servers_mock(count=1)
arglist = [
'--enable-delete-on-termination',
'--disable-delete-on-termination',
'--device', '/dev/sdb',
- servers[0].id,
- self.volume.id,
+ self.servers[0].id,
+ self.volumes[0].id,
]
verifylist = [
- ('server', servers[0].id),
- ('volume', self.volume.id),
+ ('server', self.servers[0].id),
+ ('volume', self.volumes[0].id),
('device', '/dev/sdb'),
('enable_delete_on_termination', True),
('disable_delete_on_termination', True),
@@ -874,6 +1202,37 @@ class TestServerVolume(TestServer):
'with argument --enable-delete-on-termination', str(ex))
+class TestServerRemoveVolume(TestServerVolume):
+
+ def setUp(self):
+ super(TestServerRemoveVolume, self).setUp()
+
+ # Get the command object to test
+ self.cmd = server.RemoveServerVolume(self.app, None)
+
+ def test_server_remove_volume(self):
+ arglist = [
+ self.servers[0].id,
+ self.volumes[0].id,
+ ]
+
+ verifylist = [
+ ('server', self.servers[0].id),
+ ('volume', self.volumes[0].id),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.assertIsNone(result)
+ self.sdk_client.delete_volume_attachment.assert_called_once_with(
+ self.volumes[0],
+ self.servers[0],
+ ignore_missing=False,
+ )
+
+
class TestServerAddNetwork(TestServer):
def setUp(self):
@@ -891,7 +1250,7 @@ class TestServerAddNetwork(TestServer):
self.app.client_manager.network.find_network = self.find_network
def _test_server_add_network(self, net_id):
- servers = self.setup_servers_mock(count=1)
+ servers = self.setup_sdk_servers_mock(count=1)
network = 'fake-network'
arglist = [
@@ -906,8 +1265,8 @@ class TestServerAddNetwork(TestServer):
result = self.cmd.take_action(parsed_args)
- servers[0].interface_attach.assert_called_once_with(
- port_id=None, net_id=net_id, fixed_ip=None)
+ self.sdk_client.create_server_interface.assert_called_once_with(
+ servers[0], net_id=net_id, fixed_ip=None)
self.assertIsNone(result)
def test_server_add_network(self):
@@ -920,11 +1279,12 @@ class TestServerAddNetwork(TestServer):
self._test_server_add_network('fake-network')
self.find_network.assert_not_called()
- def test_server_add_network_with_tag(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion', return_value=True)
+ def test_server_add_network_with_tag(self, sm_mock):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
'2.49')
- servers = self.setup_servers_mock(count=1)
+ servers = self.setup_sdk_servers_mock(count=1)
self.find_network.return_value.id = 'fake-network'
arglist = [
@@ -942,18 +1302,19 @@ class TestServerAddNetwork(TestServer):
result = self.cmd.take_action(parsed_args)
self.assertIsNone(result)
- servers[0].interface_attach.assert_called_once_with(
- port_id=None,
+ self.sdk_client.create_server_interface.assert_called_once_with(
+ servers[0],
net_id='fake-network',
fixed_ip=None,
tag='tag1'
)
- def test_server_add_network_with_tag_pre_v249(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion', return_value=False)
+ def test_server_add_network_with_tag_pre_v249(self, sm_mock):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
'2.48')
- servers = self.setup_servers_mock(count=1)
+ servers = self.setup_sdk_servers_mock(count=1)
self.find_network.return_value.id = 'fake-network'
arglist = [
@@ -3554,6 +3915,226 @@ class TestServerCreate(TestServer):
self.assertFalse(self.images_mock.called)
self.assertFalse(self.flavors_mock.called)
+ def test_server_create_with_hostname_v290(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.90')
+
+ arglist = [
+ '--image', 'image1',
+ '--flavor', 'flavor1',
+ '--hostname', 'hostname',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('image', 'image1'),
+ ('flavor', 'flavor1'),
+ ('hostname', 'hostname'),
+ ('config_drive', False),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # ServerManager.create(name, image, flavor, **kwargs)
+ self.servers_mock.create.assert_called_with(
+ self.new_server.name,
+ self.image,
+ self.flavor,
+ meta=None,
+ files={},
+ reservation_id=None,
+ min_count=1,
+ max_count=1,
+ security_groups=[],
+ userdata=None,
+ key_name=None,
+ availability_zone=None,
+ admin_pass=None,
+ block_device_mapping_v2=[],
+ nics='auto',
+ scheduler_hints={},
+ config_drive=None,
+ hostname='hostname',
+ )
+
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist(), data)
+ self.assertFalse(self.images_mock.called)
+ self.assertFalse(self.flavors_mock.called)
+
+ def test_server_create_with_hostname_pre_v290(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.89')
+
+ arglist = [
+ '--image', 'image1',
+ '--flavor', 'flavor1',
+ '--hostname', 'hostname',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('image', 'image1'),
+ ('flavor', 'flavor1'),
+ ('hostname', 'hostname'),
+ ('config_drive', False),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(
+ exceptions.CommandError, self.cmd.take_action,
+ parsed_args)
+
+ def test_server_create_with_trusted_image_cert(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.63')
+
+ arglist = [
+ '--image', 'image1',
+ '--flavor', 'flavor1',
+ '--trusted-image-cert', 'foo',
+ '--trusted-image-cert', 'bar',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('image', 'image1'),
+ ('flavor', 'flavor1'),
+ ('config_drive', False),
+ ('trusted_image_certs', ['foo', 'bar']),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # Set expected values
+ kwargs = dict(
+ meta=None,
+ files={},
+ reservation_id=None,
+ min_count=1,
+ max_count=1,
+ security_groups=[],
+ userdata=None,
+ key_name=None,
+ availability_zone=None,
+ admin_pass=None,
+ block_device_mapping_v2=[],
+ nics='auto',
+ scheduler_hints={},
+ config_drive=None,
+ trusted_image_certificates=['foo', 'bar'],
+ )
+ # 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)
+ self.assertFalse(self.images_mock.called)
+ self.assertFalse(self.flavors_mock.called)
+
+ def test_server_create_with_trusted_image_cert_prev263(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.62')
+
+ arglist = [
+ '--image', 'image1',
+ '--flavor', 'flavor1',
+ '--trusted-image-cert', 'foo',
+ '--trusted-image-cert', 'bar',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('image', 'image1'),
+ ('flavor', 'flavor1'),
+ ('config_drive', False),
+ ('trusted_image_certs', ['foo', 'bar']),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+
+ def test_server_create_with_trusted_image_cert_from_volume(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.63')
+ arglist = [
+ '--volume', 'volume1',
+ '--flavor', 'flavor1',
+ '--trusted-image-cert', 'foo',
+ '--trusted-image-cert', 'bar',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('volume', 'volume1'),
+ ('flavor', 'flavor1'),
+ ('config_drive', False),
+ ('trusted_image_certs', ['foo', 'bar']),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+
+ def test_server_create_with_trusted_image_cert_from_snapshot(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.63')
+ arglist = [
+ '--snapshot', 'snapshot1',
+ '--flavor', 'flavor1',
+ '--trusted-image-cert', 'foo',
+ '--trusted-image-cert', 'bar',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('snapshot', 'snapshot1'),
+ ('flavor', 'flavor1'),
+ ('config_drive', False),
+ ('trusted_image_certs', ['foo', 'bar']),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+
+ def test_server_create_with_trusted_image_cert_boot_from_volume(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.63')
+ arglist = [
+ '--image', 'image1',
+ '--flavor', 'flavor1',
+ '--boot-from-volume', '1',
+ '--trusted-image-cert', 'foo',
+ '--trusted-image-cert', 'bar',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('image', 'image1'),
+ ('flavor', 'flavor1'),
+ ('boot_from_volume', 1),
+ ('config_drive', False),
+ ('trusted_image_certs', ['foo', 'bar']),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+
class TestServerDelete(TestServer):
@@ -3709,7 +4290,7 @@ class TestServerDumpCreate(TestServer):
self.run_method_with_servers('trigger_crash_dump', 3)
-class TestServerList(TestServer):
+class _TestServerList(TestServer):
# Columns to be listed up.
columns = (
@@ -3737,7 +4318,7 @@ class TestServerList(TestServer):
)
def setUp(self):
- super(TestServerList, self).setUp()
+ super(_TestServerList, self).setUp()
self.search_opts = {
'reservation_id': None,
@@ -3776,7 +4357,7 @@ class TestServerList(TestServer):
},
'OS-EXT-AZ:availability_zone': 'availability-zone-xxx',
'OS-EXT-SRV-ATTR:host': 'host-name-xxx',
- 'Metadata': '',
+ 'Metadata': format_columns.DictColumn({}),
}
# The servers to be listed.
@@ -3795,10 +4376,11 @@ class TestServerList(TestServer):
# Get the command object to test
self.cmd = server.ListServer(self.app, None)
- # Prepare data returned by fake Nova API.
- self.data = []
- self.data_long = []
- self.data_no_name_lookup = []
+
+class TestServerList(_TestServerList):
+
+ def setUp(self):
+ super(TestServerList, self).setUp()
Image = collections.namedtuple('Image', 'id name')
self.images_mock.return_value = [
@@ -3813,8 +4395,8 @@ class TestServerList(TestServer):
for s in self.servers
]
- for s in self.servers:
- self.data.append((
+ self.data = tuple(
+ (
s.id,
s.name,
s.status,
@@ -3822,34 +4404,8 @@ class TestServerList(TestServer):
# Image will be an empty string if boot-from-volume
self.image.name if s.image else server.IMAGE_STRING_FOR_BFV,
self.flavor.name,
- ))
- self.data_long.append((
- s.id,
- s.name,
- s.status,
- getattr(s, 'OS-EXT-STS:task_state'),
- server.PowerStateColumn(
- getattr(s, 'OS-EXT-STS:power_state')
- ),
- format_columns.DictListColumn(s.networks),
- # Image will be an empty string if boot-from-volume
- self.image.name if s.image else server.IMAGE_STRING_FOR_BFV,
- s.image['id'] if s.image else server.IMAGE_STRING_FOR_BFV,
- self.flavor.name,
- s.flavor['id'],
- getattr(s, 'OS-EXT-AZ:availability_zone'),
- getattr(s, 'OS-EXT-SRV-ATTR:host'),
- format_columns.DictColumn({}),
- ))
- self.data_no_name_lookup.append((
- s.id,
- s.name,
- s.status,
- format_columns.DictListColumn(s.networks),
- # Image will be an empty string if boot-from-volume
- s.image['id'] if s.image else server.IMAGE_STRING_FOR_BFV,
- s.flavor['id']
- ))
+ ) for s in self.servers
+ )
def test_server_list_no_option(self):
arglist = []
@@ -3870,7 +4426,7 @@ class TestServerList(TestServer):
self.assertFalse(self.flavors_mock.get.call_count)
self.assertFalse(self.get_image_mock.call_count)
self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
+ self.assertEqual(self.data, tuple(data))
def test_server_list_no_servers(self):
arglist = []
@@ -3889,9 +4445,28 @@ class TestServerList(TestServer):
self.assertEqual(0, self.images_mock.list.call_count)
self.assertEqual(0, self.flavors_mock.list.call_count)
self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
+ self.assertEqual(self.data, tuple(data))
def test_server_list_long_option(self):
+ self.data = tuple(
+ (
+ s.id,
+ s.name,
+ s.status,
+ getattr(s, 'OS-EXT-STS:task_state'),
+ server.PowerStateColumn(
+ getattr(s, 'OS-EXT-STS:power_state')
+ ),
+ format_columns.DictListColumn(s.networks),
+ # Image will be an empty string if boot-from-volume
+ self.image.name if s.image else server.IMAGE_STRING_FOR_BFV,
+ s.image['id'] if s.image else server.IMAGE_STRING_FOR_BFV,
+ self.flavor.name,
+ s.flavor['id'],
+ getattr(s, 'OS-EXT-AZ:availability_zone'),
+ getattr(s, 'OS-EXT-SRV-ATTR:host'),
+ s.Metadata,
+ ) for s in self.servers)
arglist = [
'--long',
]
@@ -3902,10 +4477,9 @@ class TestServerList(TestServer):
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.assertCountEqual(tuple(self.data_long), tuple(data))
+ self.assertEqual(self.data, tuple(data))
def test_server_list_column_option(self):
arglist = [
@@ -3927,6 +4501,18 @@ class TestServerList(TestServer):
self.assertIn('Created At', columns)
def test_server_list_no_name_lookup_option(self):
+ self.data = tuple(
+ (
+ s.id,
+ s.name,
+ s.status,
+ format_columns.DictListColumn(s.networks),
+ # Image will be an empty string if boot-from-volume
+ s.image['id'] if s.image else server.IMAGE_STRING_FOR_BFV,
+ s.flavor['id']
+ ) for s in self.servers
+ )
+
arglist = [
'--no-name-lookup',
]
@@ -3940,9 +4526,21 @@ class TestServerList(TestServer):
self.servers_mock.list.assert_called_with(**self.kwargs)
self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data_no_name_lookup), tuple(data))
+ self.assertEqual(self.data, tuple(data))
def test_server_list_n_option(self):
+ self.data = tuple(
+ (
+ s.id,
+ s.name,
+ s.status,
+ format_columns.DictListColumn(s.networks),
+ # Image will be an empty string if boot-from-volume
+ s.image['id'] if s.image else server.IMAGE_STRING_FOR_BFV,
+ s.flavor['id']
+ ) for s in self.servers
+ )
+
arglist = [
'-n',
]
@@ -3956,7 +4554,7 @@ class TestServerList(TestServer):
self.servers_mock.list.assert_called_with(**self.kwargs)
self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data_no_name_lookup), tuple(data))
+ self.assertEqual(self.data, tuple(data))
def test_server_list_name_lookup_one_by_one(self):
arglist = [
@@ -3978,7 +4576,7 @@ class TestServerList(TestServer):
self.flavors_mock.get.assert_called()
self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
+ self.assertEqual(self.data, tuple(data))
def test_server_list_with_image(self):
@@ -3999,81 +4597,7 @@ class TestServerList(TestServer):
self.servers_mock.list.assert_called_with(**self.kwargs)
self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
-
- def test_server_list_with_locked_pre_v273(self):
-
- arglist = [
- '--locked'
- ]
- verifylist = [
- ('locked', True)
- ]
-
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- ex = self.assertRaises(exceptions.CommandError,
- self.cmd.take_action,
- parsed_args)
- self.assertIn(
- '--os-compute-api-version 2.73 or greater is required', str(ex))
-
- def test_server_list_with_locked_v273(self):
-
- self.app.client_manager.compute.api_version = \
- api_versions.APIVersion('2.73')
- arglist = [
- '--locked'
- ]
- verifylist = [
- ('locked', True)
- ]
-
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- columns, data = self.cmd.take_action(parsed_args)
-
- self.search_opts['locked'] = True
- self.servers_mock.list.assert_called_with(**self.kwargs)
-
- self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
-
- def test_server_list_with_unlocked_v273(self):
-
- self.app.client_manager.compute.api_version = \
- api_versions.APIVersion('2.73')
- arglist = [
- '--unlocked'
- ]
- verifylist = [
- ('unlocked', True)
- ]
-
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- columns, data = self.cmd.take_action(parsed_args)
-
- self.search_opts['locked'] = False
- self.servers_mock.list.assert_called_with(**self.kwargs)
-
- self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
-
- def test_server_list_with_locked_and_unlocked_v273(self):
-
- self.app.client_manager.compute.api_version = \
- api_versions.APIVersion('2.73')
- arglist = [
- '--locked',
- '--unlocked'
- ]
- verifylist = [
- ('locked', True),
- ('unlocked', True)
- ]
-
- ex = self.assertRaises(
- utils.ParserException,
- self.check_parser, self.cmd, arglist, verifylist)
- self.assertIn('Argument parse failed', str(ex))
+ self.assertEqual(self.data, tuple(data))
def test_server_list_with_flavor(self):
@@ -4093,7 +4617,7 @@ class TestServerList(TestServer):
self.servers_mock.list.assert_called_with(**self.kwargs)
self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
+ self.assertEqual(self.data, tuple(data))
def test_server_list_with_changes_since(self):
@@ -4114,7 +4638,7 @@ class TestServerList(TestServer):
self.servers_mock.list.assert_called_with(**self.kwargs)
self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
+ self.assertEqual(self.data, tuple(data))
@mock.patch.object(iso8601, 'parse_date', side_effect=iso8601.ParseError)
def test_server_list_with_invalid_changes_since(self, mock_parse_isotime):
@@ -4137,123 +4661,6 @@ class TestServerList(TestServer):
'Invalid time value'
)
- def test_server_list_v266_with_changes_before(self):
- self.app.client_manager.compute.api_version = (
- api_versions.APIVersion('2.66'))
- arglist = [
- '--changes-before', '2016-03-05T06:27:59Z',
- '--deleted'
- ]
- verifylist = [
- ('changes_before', '2016-03-05T06:27:59Z'),
- ('deleted', True),
- ]
-
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- columns, data = self.cmd.take_action(parsed_args)
-
- self.search_opts['changes-before'] = '2016-03-05T06:27:59Z'
- self.search_opts['deleted'] = True
-
- self.servers_mock.list.assert_called_with(**self.kwargs)
-
- self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
-
- @mock.patch.object(iso8601, 'parse_date', side_effect=iso8601.ParseError)
- def test_server_list_v266_with_invalid_changes_before(
- self, mock_parse_isotime):
- self.app.client_manager.compute.api_version = (
- api_versions.APIVersion('2.66'))
-
- arglist = [
- '--changes-before', 'Invalid time value',
- ]
- verifylist = [
- ('changes_before', 'Invalid time value'),
- ]
-
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- try:
- self.cmd.take_action(parsed_args)
- self.fail('CommandError should be raised.')
- except exceptions.CommandError as e:
- self.assertEqual('Invalid changes-before value: Invalid time '
- 'value', str(e))
- mock_parse_isotime.assert_called_once_with(
- 'Invalid time value'
- )
-
- def test_server_with_changes_before_pre_v266(self):
- self.app.client_manager.compute.api_version = (
- api_versions.APIVersion('2.65'))
-
- arglist = [
- '--changes-before', '2016-03-05T06:27:59Z',
- '--deleted'
- ]
- verifylist = [
- ('changes_before', '2016-03-05T06:27:59Z'),
- ('deleted', True),
- ]
-
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
-
- self.assertRaises(exceptions.CommandError,
- self.cmd.take_action,
- parsed_args)
-
- def test_server_list_v269_with_partial_constructs(self):
- self.app.client_manager.compute.api_version = \
- api_versions.APIVersion('2.69')
-
- arglist = []
- verifylist = []
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
-
- # include "partial results" from non-responsive part of
- # infrastructure.
- server_dict = {
- "id": "server-id-95a56bfc4xxxxxx28d7e418bfd97813a",
- "status": "UNKNOWN",
- "tenant_id": "6f70656e737461636b20342065766572",
- "created": "2018-12-03T21:06:18Z",
- "links": [
- {
- "href": "http://fake/v2.1/",
- "rel": "self"
- },
- {
- "href": "http://fake",
- "rel": "bookmark"
- }
- ],
- # We need to pass networks as {} because its defined as a property
- # of the novaclient Server class which gives {} by default. If not
- # it will fail at formatting the networks info later on.
- "networks": {}
- }
- _server = compute_fakes.fakes.FakeResource(
- info=server_dict,
- )
- self.servers.append(_server)
- columns, data = self.cmd.take_action(parsed_args)
- # get the first three servers out since our interest is in the partial
- # server.
- next(data)
- next(data)
- next(data)
- partial_server = next(data)
- expected_row = (
- 'server-id-95a56bfc4xxxxxx28d7e418bfd97813a',
- '',
- 'UNKNOWN',
- format_columns.DictListColumn({}),
- '',
- '',
- )
- self.assertEqual(expected_row, partial_server)
-
def test_server_list_with_tag(self):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
'2.26')
@@ -4269,12 +4676,12 @@ class TestServerList(TestServer):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- self.search_opts['tags'] = ['tag1', 'tag2']
+ self.search_opts['tags'] = 'tag1,tag2'
self.servers_mock.list.assert_called_with(**self.kwargs)
self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
+ self.assertEqual(self.data, tuple(data))
def test_server_list_with_tag_pre_v225(self):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
@@ -4312,12 +4719,12 @@ class TestServerList(TestServer):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- self.search_opts['not-tags'] = ['tag1', 'tag2']
+ self.search_opts['not-tags'] = 'tag1,tag2'
self.servers_mock.list.assert_called_with(**self.kwargs)
self.assertEqual(self.columns, columns)
- self.assertEqual(tuple(self.data), tuple(data))
+ self.assertEqual(self.data, tuple(data))
def test_server_list_with_not_tag_pre_v226(self):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
@@ -4478,6 +4885,258 @@ class TestServerList(TestServer):
self.assertEqual(tuple(self.data), tuple(data))
+class TestServerListV273(_TestServerList):
+
+ # Columns to be listed up.
+ columns = (
+ 'ID',
+ 'Name',
+ 'Status',
+ 'Networks',
+ 'Image',
+ 'Flavor',
+ )
+ columns_long = (
+ 'ID',
+ 'Name',
+ 'Status',
+ 'Task State',
+ 'Power State',
+ 'Networks',
+ 'Image Name',
+ 'Image ID',
+ 'Flavor',
+ 'Availability Zone',
+ 'Host',
+ 'Properties',
+ )
+
+ def setUp(self):
+ super(TestServerListV273, self).setUp()
+
+ # The fake servers' attributes. Use the original attributes names in
+ # nova, not the ones printed by "server list" command.
+ self.attrs['flavor'] = {
+ 'vcpus': self.flavor.vcpus,
+ 'ram': self.flavor.ram,
+ 'disk': self.flavor.disk,
+ 'ephemeral': self.flavor.ephemeral,
+ 'swap': self.flavor.swap,
+ 'original_name': self.flavor.name,
+ 'extra_specs': self.flavor.extra_specs,
+ }
+
+ # The servers to be listed.
+ self.servers = self.setup_servers_mock(3)
+ self.servers_mock.list.return_value = self.servers
+
+ Image = collections.namedtuple('Image', 'id name')
+ self.images_mock.return_value = [
+ Image(id=s.image['id'], name=self.image.name)
+ # Image will be an empty string if boot-from-volume
+ for s in self.servers if s.image
+ ]
+
+ # The flavor information is embedded, so now reason for this to be
+ # called
+ self.flavors_mock.list = mock.NonCallableMock()
+
+ self.data = tuple(
+ (
+ s.id,
+ s.name,
+ s.status,
+ format_columns.DictListColumn(s.networks),
+ # Image will be an empty string if boot-from-volume
+ self.image.name if s.image else server.IMAGE_STRING_FOR_BFV,
+ self.flavor.name,
+ ) for s in self.servers)
+
+ def test_server_list_with_locked_pre_v273(self):
+
+ arglist = [
+ '--locked'
+ ]
+ verifylist = [
+ ('locked', True)
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ ex = self.assertRaises(exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+ self.assertIn(
+ '--os-compute-api-version 2.73 or greater is required', str(ex))
+
+ def test_server_list_with_locked(self):
+
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.73')
+ arglist = [
+ '--locked'
+ ]
+ verifylist = [
+ ('locked', True)
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.search_opts['locked'] = True
+ self.servers_mock.list.assert_called_with(**self.kwargs)
+
+ self.assertItemsEqual(self.columns, columns)
+ self.assertItemsEqual(self.data, tuple(data))
+
+ def test_server_list_with_unlocked_v273(self):
+
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.73')
+ arglist = [
+ '--unlocked'
+ ]
+ verifylist = [
+ ('unlocked', True)
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.search_opts['locked'] = False
+ self.servers_mock.list.assert_called_with(**self.kwargs)
+
+ self.assertItemsEqual(self.columns, columns)
+ self.assertItemsEqual(self.data, tuple(data))
+
+ def test_server_list_with_locked_and_unlocked(self):
+
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.73')
+ arglist = [
+ '--locked',
+ '--unlocked'
+ ]
+ verifylist = [
+ ('locked', True),
+ ('unlocked', True)
+ ]
+
+ ex = self.assertRaises(
+ utils.ParserException,
+ self.check_parser, self.cmd, arglist, verifylist)
+ self.assertIn('Argument parse failed', str(ex))
+
+ def test_server_list_with_changes_before(self):
+ self.app.client_manager.compute.api_version = (
+ api_versions.APIVersion('2.66'))
+ arglist = [
+ '--changes-before', '2016-03-05T06:27:59Z',
+ '--deleted'
+ ]
+ verifylist = [
+ ('changes_before', '2016-03-05T06:27:59Z'),
+ ('deleted', True),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.search_opts['changes-before'] = '2016-03-05T06:27:59Z'
+ self.search_opts['deleted'] = True
+
+ self.servers_mock.list.assert_called_with(**self.kwargs)
+
+ self.assertItemsEqual(self.columns, columns)
+ self.assertItemsEqual(self.data, tuple(data))
+
+ @mock.patch.object(iso8601, 'parse_date', side_effect=iso8601.ParseError)
+ def test_server_list_with_invalid_changes_before(
+ self, mock_parse_isotime):
+ self.app.client_manager.compute.api_version = (
+ api_versions.APIVersion('2.66'))
+
+ arglist = [
+ '--changes-before', 'Invalid time value',
+ ]
+ verifylist = [
+ ('changes_before', 'Invalid time value'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ try:
+ self.cmd.take_action(parsed_args)
+ self.fail('CommandError should be raised.')
+ except exceptions.CommandError as e:
+ self.assertEqual('Invalid changes-before value: Invalid time '
+ 'value', str(e))
+ mock_parse_isotime.assert_called_once_with(
+ 'Invalid time value'
+ )
+
+ def test_server_with_changes_before_pre_v266(self):
+ self.app.client_manager.compute.api_version = (
+ api_versions.APIVersion('2.65'))
+
+ arglist = [
+ '--changes-before', '2016-03-05T06:27:59Z',
+ '--deleted'
+ ]
+ verifylist = [
+ ('changes_before', '2016-03-05T06:27:59Z'),
+ ('deleted', True),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+
+ def test_server_list_v269_with_partial_constructs(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.69')
+ arglist = []
+ verifylist = []
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ # include "partial results" from non-responsive part of
+ # infrastructure.
+ server_dict = {
+ "id": "server-id-95a56bfc4xxxxxx28d7e418bfd97813a",
+ "status": "UNKNOWN",
+ "tenant_id": "6f70656e737461636b20342065766572",
+ "created": "2018-12-03T21:06:18Z",
+ "links": [
+ {
+ "href": "http://fake/v2.1/",
+ "rel": "self"
+ },
+ {
+ "href": "http://fake",
+ "rel": "bookmark"
+ }
+ ],
+ # We need to pass networks as {} because its defined as a property
+ # of the novaclient Server class which gives {} by default. If not
+ # it will fail at formatting the networks info later on.
+ "networks": {}
+ }
+ server = compute_fakes.fakes.FakeResource(
+ info=server_dict,
+ )
+ self.servers.append(server)
+ columns, data = self.cmd.take_action(parsed_args)
+ # get the first three servers out since our interest is in the partial
+ # server.
+ next(data)
+ next(data)
+ next(data)
+ partial_server = next(data)
+ expected_row = (
+ 'server-id-95a56bfc4xxxxxx28d7e418bfd97813a', '',
+ 'UNKNOWN', format_columns.DictListColumn({}), '', '')
+ self.assertEqual(expected_row, partial_server)
+
+
class TestServerLock(TestServer):
def setUp(self):
@@ -4667,7 +5326,7 @@ class TestServerMigrate(TestServer):
self.assertNotCalled(self.servers_mock.live_migrate)
self.assertNotCalled(self.servers_mock.migrate)
- def test_server_migrate_with_host_pre_2_56(self):
+ def test_server_migrate_with_host_pre_v256(self):
# Tests that --host is not allowed for a cold migration
# before microversion 2.56 (the test defaults to 2.1).
arglist = [
@@ -4909,6 +5568,13 @@ class TestListMigration(TestServer):
'Old Flavor', 'New Flavor', 'Created At', 'Updated At'
]
+ # These are the fields that come back in the response from the REST API.
+ MIGRATION_FIELDS = [
+ 'source_node', 'dest_node', 'source_compute', 'dest_compute',
+ 'dest_host', 'status', 'instance_uuid', 'old_instance_type_id',
+ 'new_instance_type_id', 'created_at', 'updated_at'
+ ]
+
def setUp(self):
super(TestListMigration, self).setUp()
@@ -4920,7 +5586,7 @@ class TestListMigration(TestServer):
self.migrations_mock.list.return_value = self.migrations
self.data = (common_utils.get_item_properties(
- s, self.MIGRATION_COLUMNS) for s in self.migrations)
+ s, self.MIGRATION_FIELDS) for s in self.migrations)
# Get the command object to test
self.cmd = server.ListMigration(self.app, None)
@@ -4982,6 +5648,13 @@ class TestListMigrationV223(TestListMigration):
'Type', 'Created At', 'Updated At'
]
+ # These are the fields that come back in the response from the REST API.
+ MIGRATION_FIELDS = [
+ 'id', 'source_node', 'dest_node', 'source_compute', 'dest_compute',
+ 'dest_host', 'status', 'instance_uuid', 'old_instance_type_id',
+ 'new_instance_type_id', 'migration_type', 'created_at', 'updated_at'
+ ]
+
def setUp(self):
super(TestListMigrationV223, self).setUp()
@@ -5019,6 +5692,14 @@ class TestListMigrationV259(TestListMigration):
'Old Flavor', 'New Flavor', 'Type', 'Created At', 'Updated At'
]
+ # These are the fields that come back in the response from the REST API.
+ MIGRATION_FIELDS = [
+ 'id', 'uuid', 'source_node', 'dest_node', 'source_compute',
+ 'dest_compute', 'dest_host', 'status', 'instance_uuid',
+ 'old_instance_type_id', 'new_instance_type_id', 'migration_type',
+ 'created_at', 'updated_at'
+ ]
+
def setUp(self):
super(TestListMigrationV259, self).setUp()
@@ -5125,6 +5806,14 @@ class TestListMigrationV266(TestListMigration):
'Old Flavor', 'New Flavor', 'Type', 'Created At', 'Updated At'
]
+ # These are the fields that come back in the response from the REST API.
+ MIGRATION_FIELDS = [
+ 'id', 'uuid', 'source_node', 'dest_node', 'source_compute',
+ 'dest_compute', 'dest_host', 'status', 'instance_uuid',
+ 'old_instance_type_id', 'new_instance_type_id', 'migration_type',
+ 'created_at', 'updated_at'
+ ]
+
def setUp(self):
super(TestListMigrationV266, self).setUp()
@@ -5194,6 +5883,14 @@ class TestListMigrationV280(TestListMigration):
'Old Flavor', 'New Flavor', 'Type', 'Created At', 'Updated At'
]
+ # These are the fields that come back in the response from the REST API.
+ MIGRATION_FIELDS = [
+ 'id', 'uuid', 'source_node', 'dest_node', 'source_compute',
+ 'dest_compute', 'dest_host', 'status', 'instance_uuid',
+ 'old_instance_type_id', 'new_instance_type_id', 'migration_type',
+ 'created_at', 'updated_at'
+ ]
+
project = identity_fakes.FakeProject.create_one_project()
user = identity_fakes.FakeUser.create_one_user()
@@ -5247,10 +5944,14 @@ class TestListMigrationV280(TestListMigration):
self.MIGRATION_COLUMNS.insert(
len(self.MIGRATION_COLUMNS) - 2, "Project")
+ self.MIGRATION_FIELDS.insert(
+ len(self.MIGRATION_FIELDS) - 2, "project_id")
self.assertEqual(self.MIGRATION_COLUMNS, columns)
self.assertEqual(tuple(self.data), tuple(data))
# Clean up global variables MIGRATION_COLUMNS
self.MIGRATION_COLUMNS.remove('Project')
+ # Clean up global variables MIGRATION_FIELDS
+ self.MIGRATION_FIELDS.remove('project_id')
def test_get_migrations_with_project_pre_v280(self):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
@@ -5309,10 +6010,14 @@ class TestListMigrationV280(TestListMigration):
self.MIGRATION_COLUMNS.insert(
len(self.MIGRATION_COLUMNS) - 2, "User")
+ self.MIGRATION_FIELDS.insert(
+ len(self.MIGRATION_FIELDS) - 2, "user_id")
self.assertEqual(self.MIGRATION_COLUMNS, columns)
self.assertEqual(tuple(self.data), tuple(data))
# Clean up global variables MIGRATION_COLUMNS
self.MIGRATION_COLUMNS.remove('User')
+ # Clean up global variables MIGRATION_FIELDS
+ self.MIGRATION_FIELDS.remove('user_id')
def test_get_migrations_with_user_pre_v280(self):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
@@ -5371,13 +6076,19 @@ class TestListMigrationV280(TestListMigration):
self.MIGRATION_COLUMNS.insert(
len(self.MIGRATION_COLUMNS) - 2, "Project")
+ self.MIGRATION_FIELDS.insert(
+ len(self.MIGRATION_FIELDS) - 2, "project_id")
self.MIGRATION_COLUMNS.insert(
len(self.MIGRATION_COLUMNS) - 2, "User")
+ self.MIGRATION_FIELDS.insert(
+ len(self.MIGRATION_FIELDS) - 2, "user_id")
self.assertEqual(self.MIGRATION_COLUMNS, columns)
self.assertEqual(tuple(self.data), tuple(data))
# Clean up global variables MIGRATION_COLUMNS
self.MIGRATION_COLUMNS.remove('Project')
+ self.MIGRATION_FIELDS.remove('project_id')
self.MIGRATION_COLUMNS.remove('User')
+ self.MIGRATION_FIELDS.remove('user_id')
def test_get_migrations_with_project_and_user_pre_v280(self):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
@@ -5638,10 +6349,10 @@ class TestServerPause(TestServer):
}
def test_server_pause_one_server(self):
- self.run_method_with_servers('pause', 1)
+ self.run_method_with_sdk_servers('pause_server', 1)
def test_server_pause_multi_servers(self):
- self.run_method_with_servers('pause', 3)
+ self.run_method_with_sdk_servers('pause_server', 3)
class TestServerRebuild(TestServer):
@@ -6032,7 +6743,7 @@ class TestServerRebuild(TestServer):
self.image, None,
userdata=mock_file,)
- def test_rebuild_with_user_data_pre_257(self):
+ def test_rebuild_with_user_data_pre_v257(self):
self.app.client_manager.compute.api_version = \
api_versions.APIVersion('2.56')
@@ -6072,7 +6783,7 @@ class TestServerRebuild(TestServer):
self.server.rebuild.assert_called_with(
self.image, None, userdata=None)
- def test_rebuild_with_no_user_data_pre_254(self):
+ def test_rebuild_with_no_user_data_pre_v254(self):
self.app.client_manager.compute.api_version = \
api_versions.APIVersion('2.53')
@@ -6164,7 +6875,7 @@ class TestServerRebuild(TestServer):
self.server.rebuild.assert_called_with(
self.image, None, trusted_image_certificates=None)
- def test_rebuild_with_no_trusted_image_cert_pre_257(self):
+ def test_rebuild_with_no_trusted_image_cert_pre_v263(self):
self.app.client_manager.compute.api_version = \
api_versions.APIVersion('2.62')
@@ -6183,6 +6894,46 @@ class TestServerRebuild(TestServer):
self.cmd.take_action,
parsed_args)
+ def test_rebuild_with_hostname(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.90')
+
+ arglist = [
+ self.server.id,
+ '--hostname', 'new-hostname'
+ ]
+ verifylist = [
+ ('server', self.server.id),
+ ('hostname', 'new-hostname')
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.get_image_mock.assert_called_with(self.image.id)
+ self.server.rebuild.assert_called_with(
+ self.image, None, hostname='new-hostname')
+
+ def test_rebuild_with_hostname_pre_v290(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.89')
+
+ arglist = [
+ self.server.id,
+ '--hostname', 'new-hostname',
+ ]
+ verifylist = [
+ ('server', self.server.id),
+ ('hostname', 'new-hostname')
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+
class TestEvacuateServer(TestServer):
@@ -6548,14 +7299,14 @@ class TestServerRemovePort(TestServer):
# Set method to be tested.
self.methods = {
- 'interface_detach': None,
+ 'delete_server_interface': None,
}
self.find_port = mock.Mock()
self.app.client_manager.network.find_port = self.find_port
def _test_server_remove_port(self, port_id):
- servers = self.setup_servers_mock(count=1)
+ servers = self.setup_sdk_servers_mock(count=1)
port = 'fake-port'
arglist = [
@@ -6570,7 +7321,8 @@ class TestServerRemovePort(TestServer):
result = self.cmd.take_action(parsed_args)
- servers[0].interface_detach.assert_called_once_with(port_id)
+ self.sdk_client.delete_server_interface.assert_called_with(
+ port_id, server=servers[0], ignore_missing=False)
self.assertIsNone(result)
def test_server_remove_port(self):
@@ -6595,17 +7347,18 @@ class TestServerRemoveNetwork(TestServer):
# Set method to be tested.
self.fake_inf = mock.Mock()
self.methods = {
- 'interface_list': [self.fake_inf],
- 'interface_detach': None,
+ 'server_interfaces': [self.fake_inf],
+ 'delete_server_interface': None,
}
self.find_network = mock.Mock()
self.app.client_manager.network.find_network = self.find_network
+ self.sdk_client.server_interfaces.return_value = [self.fake_inf]
def _test_server_remove_network(self, network_id):
self.fake_inf.net_id = network_id
self.fake_inf.port_id = 'fake-port'
- servers = self.setup_servers_mock(count=1)
+ servers = self.setup_sdk_servers_mock(count=1)
network = 'fake-network'
arglist = [
@@ -6620,8 +7373,9 @@ class TestServerRemoveNetwork(TestServer):
result = self.cmd.take_action(parsed_args)
- servers[0].interface_list.assert_called_once_with()
- servers[0].interface_detach.assert_called_once_with('fake-port')
+ self.sdk_client.server_interfaces.assert_called_once_with(servers[0])
+ self.sdk_client.delete_server_interface.assert_called_once_with(
+ 'fake-port', server=servers[0])
self.assertIsNone(result)
def test_server_remove_network(self):
@@ -7137,10 +7891,10 @@ class TestServerResume(TestServer):
}
def test_server_resume_one_server(self):
- self.run_method_with_servers('resume', 1)
+ self.run_method_with_sdk_servers('resume_server', 1)
def test_server_resume_multi_servers(self):
- self.run_method_with_servers('resume', 3)
+ self.run_method_with_sdk_servers('resume_server', 3)
class TestServerSet(TestServer):
@@ -7288,10 +8042,10 @@ class TestServerSet(TestServer):
mock.sentinel.fake_pass)
self.assertIsNone(result)
- def test_server_set_with_description_api_newer(self):
+ def test_server_set_with_description(self):
# Description is supported for nova api version 2.19 or above
- self.fake_servers[0].api_version = 2.19
+ self.fake_servers[0].api_version = api_versions.APIVersion('2.19')
arglist = [
'--description', 'foo_description',
@@ -7302,18 +8056,15 @@ class TestServerSet(TestServer):
('server', 'foo_vm'),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- with mock.patch.object(api_versions,
- 'APIVersion',
- return_value=2.19):
- result = self.cmd.take_action(parsed_args)
- self.fake_servers[0].update.assert_called_once_with(
- description='foo_description')
- self.assertIsNone(result)
+ result = self.cmd.take_action(parsed_args)
+ self.fake_servers[0].update.assert_called_once_with(
+ description='foo_description')
+ self.assertIsNone(result)
- def test_server_set_with_description_api_older(self):
+ def test_server_set_with_description_pre_v219(self):
# Description is not supported for nova api version below 2.19
- self.fake_servers[0].api_version = 2.18
+ self.fake_servers[0].api_version = api_versions.APIVersion('2.18')
arglist = [
'--description', 'foo_description',
@@ -7324,11 +8075,8 @@ class TestServerSet(TestServer):
('server', 'foo_vm'),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- with mock.patch.object(api_versions,
- 'APIVersion',
- return_value=2.19):
- self.assertRaises(exceptions.CommandError, self.cmd.take_action,
- parsed_args)
+ self.assertRaises(exceptions.CommandError, self.cmd.take_action,
+ parsed_args)
def test_server_set_with_tag(self):
self.fake_servers[0].api_version = api_versions.APIVersion('2.26')
@@ -7374,6 +8122,41 @@ class TestServerSet(TestServer):
'--os-compute-api-version 2.26 or greater is required',
str(ex))
+ def test_server_set_with_hostname(self):
+
+ self.fake_servers[0].api_version = api_versions.APIVersion('2.90')
+
+ arglist = [
+ '--hostname', 'foo-hostname',
+ 'foo_vm',
+ ]
+ verifylist = [
+ ('hostname', 'foo-hostname'),
+ ('server', 'foo_vm'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+ self.fake_servers[0].update.assert_called_once_with(
+ hostname='foo-hostname')
+ self.assertIsNone(result)
+
+ def test_server_set_with_hostname_pre_v290(self):
+
+ self.fake_servers[0].api_version = api_versions.APIVersion('2.89')
+
+ arglist = [
+ '--hostname', 'foo-hostname',
+ 'foo_vm',
+ ]
+ verifylist = [
+ ('hostname', 'foo-hostname'),
+ ('server', 'foo_vm'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.assertRaises(
+ exceptions.CommandError, self.cmd.take_action,
+ parsed_args)
+
class TestServerShelve(TestServer):
@@ -7677,6 +8460,123 @@ class TestServerShow(TestServer):
exceptions.CommandError, self.cmd.take_action, parsed_args)
+@mock.patch('openstackclient.compute.v2.server.os.system')
+class TestServerSsh(TestServer):
+
+ def setUp(self):
+ super().setUp()
+
+ self.cmd = server.SshServer(self.app, None)
+
+ self.app.client_manager.auth_ref = mock.Mock()
+ self.app.client_manager.auth_ref.username = 'cloud'
+
+ self.attrs = {
+ 'addresses': {
+ 'public': [
+ {
+ 'addr': '192.168.1.30',
+ 'OS-EXT-IPS-MAC:mac_addr': '00:0c:29:0d:11:74',
+ 'OS-EXT-IPS:type': 'fixed',
+ 'version': 4,
+ },
+ ],
+ },
+ }
+ self.server = compute_fakes.FakeServer.create_one_server(
+ attrs=self.attrs, methods=self.methods,
+ )
+ self.servers_mock.get.return_value = self.server
+
+ def test_server_ssh_no_opts(self, mock_exec):
+ arglist = [
+ self.server.name,
+ ]
+ verifylist = [
+ ('server', self.server.name),
+ ('login', None),
+ ('port', None),
+ ('identity', None),
+ ('option', None),
+ ('ipv4', False),
+ ('ipv6', False),
+ ('address_type', 'public'),
+ ('verbose', False),
+ ('ssh_args', []),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ with mock.patch.object(self.cmd.log, 'warning') as mock_warning:
+ result = self.cmd.take_action(parsed_args)
+
+ self.assertIsNone(result)
+ mock_exec.assert_called_once_with('ssh 192.168.1.30 -l cloud')
+ mock_warning.assert_not_called()
+
+ def test_server_ssh_passthrough_opts(self, mock_exec):
+ arglist = [
+ self.server.name,
+ '--',
+ '-l', 'username',
+ '-p', '2222',
+ ]
+ verifylist = [
+ ('server', self.server.name),
+ ('login', None),
+ ('port', None),
+ ('identity', None),
+ ('option', None),
+ ('ipv4', False),
+ ('ipv6', False),
+ ('address_type', 'public'),
+ ('verbose', False),
+ ('ssh_args', ['-l', 'username', '-p', '2222']),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ with mock.patch.object(self.cmd.log, 'warning') as mock_warning:
+ result = self.cmd.take_action(parsed_args)
+
+ self.assertIsNone(result)
+ mock_exec.assert_called_once_with(
+ 'ssh 192.168.1.30 -l username -p 2222'
+ )
+ mock_warning.assert_not_called()
+
+ def test_server_ssh_deprecated_opts(self, mock_exec):
+ arglist = [
+ self.server.name,
+ '-l', 'username',
+ '-p', '2222',
+ ]
+ verifylist = [
+ ('server', self.server.name),
+ ('login', 'username'),
+ ('port', 2222),
+ ('identity', None),
+ ('option', None),
+ ('ipv4', False),
+ ('ipv6', False),
+ ('address_type', 'public'),
+ ('verbose', False),
+ ('ssh_args', []),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ with mock.patch.object(self.cmd.log, 'warning') as mock_warning:
+ result = self.cmd.take_action(parsed_args)
+
+ self.assertIsNone(result)
+ mock_exec.assert_called_once_with(
+ 'ssh 192.168.1.30 -p 2222 -l username'
+ )
+ mock_warning.assert_called_once()
+ self.assertIn(
+ 'The ssh options have been deprecated.',
+ mock_warning.call_args[0][0],
+ )
+
+
class TestServerStart(TestServer):
def setUp(self):
@@ -7775,10 +8675,10 @@ class TestServerSuspend(TestServer):
}
def test_server_suspend_one_server(self):
- self.run_method_with_servers('suspend', 1)
+ self.run_method_with_sdk_servers('suspend_server', 1)
def test_server_suspend_multi_servers(self):
- self.run_method_with_servers('suspend', 3)
+ self.run_method_with_sdk_servers('suspend_server', 3)
class TestServerUnlock(TestServer):
@@ -7815,10 +8715,10 @@ class TestServerUnpause(TestServer):
}
def test_server_unpause_one_server(self):
- self.run_method_with_servers('unpause', 1)
+ self.run_method_with_sdk_servers('unpause_server', 1)
def test_server_unpause_multi_servers(self):
- self.run_method_with_servers('unpause', 3)
+ self.run_method_with_sdk_servers('unpause_server', 3)
class TestServerUnset(TestServer):
diff --git a/openstackclient/tests/unit/compute/v2/test_server_backup.py b/openstackclient/tests/unit/compute/v2/test_server_backup.py
index 753db9cd..1644baae 100644
--- a/openstackclient/tests/unit/compute/v2/test_server_backup.py
+++ b/openstackclient/tests/unit/compute/v2/test_server_backup.py
@@ -28,8 +28,9 @@ class TestServerBackup(compute_fakes.TestComputev2):
super(TestServerBackup, self).setUp()
# Get a shortcut to the compute client ServerManager Mock
- self.servers_mock = self.app.client_manager.compute.servers
- self.servers_mock.reset_mock()
+ self.app.client_manager.sdk_connection = mock.Mock()
+ self.app.client_manager.sdk_connection.compute = mock.Mock()
+ self.sdk_client = self.app.client_manager.sdk_connection.compute
# Get a shortcut to the image client ImageManager Mock
self.images_mock = self.app.client_manager.image
@@ -42,14 +43,14 @@ class TestServerBackup(compute_fakes.TestComputev2):
self.methods = {}
def setup_servers_mock(self, count):
- servers = compute_fakes.FakeServer.create_servers(
+ servers = compute_fakes.FakeServer.create_sdk_servers(
attrs=self.attrs,
methods=self.methods,
count=count,
)
- # This is the return value for utils.find_resource()
- self.servers_mock.get = compute_fakes.FakeServer.get_servers(
+ # This is the return value for compute_client.find_server()
+ self.sdk_client.find_server = compute_fakes.FakeServer.get_servers(
servers,
0,
)
@@ -130,8 +131,7 @@ class TestServerBackupCreate(TestServerBackup):
# data to be shown.
columns, data = self.cmd.take_action(parsed_args)
- # ServerManager.backup(server, backup_name, backup_type, rotation)
- self.servers_mock.backup.assert_called_with(
+ self.sdk_client.backup_server.assert_called_with(
servers[0].id,
servers[0].name,
'',
@@ -139,7 +139,7 @@ class TestServerBackupCreate(TestServerBackup):
)
self.assertEqual(self.image_columns(images[0]), columns)
- self.assertItemsEqual(self.image_data(images[0]), data)
+ self.assertCountEqual(self.image_data(images[0]), data)
def test_server_backup_create_options(self):
servers = self.setup_servers_mock(count=1)
@@ -164,8 +164,7 @@ class TestServerBackupCreate(TestServerBackup):
# data to be shown.
columns, data = self.cmd.take_action(parsed_args)
- # ServerManager.backup(server, backup_name, backup_type, rotation)
- self.servers_mock.backup.assert_called_with(
+ self.sdk_client.backup_server.assert_called_with(
servers[0].id,
'image',
'daily',
@@ -173,7 +172,7 @@ class TestServerBackupCreate(TestServerBackup):
)
self.assertEqual(self.image_columns(images[0]), columns)
- self.assertItemsEqual(self.image_data(images[0]), data)
+ self.assertCountEqual(self.image_data(images[0]), data)
@mock.patch.object(common_utils, 'wait_for_status', return_value=False)
def test_server_backup_wait_fail(self, mock_wait_for_status):
@@ -212,8 +211,7 @@ class TestServerBackupCreate(TestServerBackup):
parsed_args,
)
- # ServerManager.backup(server, backup_name, backup_type, rotation)
- self.servers_mock.backup.assert_called_with(
+ self.sdk_client.backup_server.assert_called_with(
servers[0].id,
'image',
'daily',
@@ -254,8 +252,7 @@ class TestServerBackupCreate(TestServerBackup):
# data to be shown.
columns, data = self.cmd.take_action(parsed_args)
- # ServerManager.backup(server, backup_name, backup_type, rotation)
- self.servers_mock.backup.assert_called_with(
+ self.sdk_client.backup_server.assert_called_with(
servers[0].id,
'image',
'daily',
@@ -269,4 +266,4 @@ class TestServerBackupCreate(TestServerBackup):
)
self.assertEqual(self.image_columns(images[0]), columns)
- self.assertItemsEqual(self.image_data(images[0]), data)
+ self.assertCountEqual(self.image_data(images[0]), data)
diff --git a/openstackclient/tests/unit/compute/v2/test_server_image.py b/openstackclient/tests/unit/compute/v2/test_server_image.py
index 66452a8b..b73cc763 100644
--- a/openstackclient/tests/unit/compute/v2/test_server_image.py
+++ b/openstackclient/tests/unit/compute/v2/test_server_image.py
@@ -27,8 +27,9 @@ class TestServerImage(compute_fakes.TestComputev2):
super(TestServerImage, self).setUp()
# Get a shortcut to the compute client ServerManager Mock
- self.servers_mock = self.app.client_manager.compute.servers
- self.servers_mock.reset_mock()
+ self.app.client_manager.sdk_connection = mock.Mock()
+ self.app.client_manager.sdk_connection.compute = mock.Mock()
+ self.sdk_client = self.app.client_manager.sdk_connection.compute
# Get a shortcut to the image client ImageManager Mock
self.images_mock = self.app.client_manager.image
@@ -41,14 +42,14 @@ class TestServerImage(compute_fakes.TestComputev2):
self.methods = {}
def setup_servers_mock(self, count):
- servers = compute_fakes.FakeServer.create_servers(
+ servers = compute_fakes.FakeServer.create_sdk_servers(
attrs=self.attrs,
methods=self.methods,
count=count,
)
- # This is the return value for utils.find_resource()
- self.servers_mock.get = compute_fakes.FakeServer.get_servers(
+ # This is the return value for compute_client.find_server()
+ self.sdk_client.find_server = compute_fakes.FakeServer.get_servers(
servers,
0,
)
@@ -104,8 +105,8 @@ class TestServerImageCreate(TestServerImage):
)
self.images_mock.find_image = mock.Mock(side_effect=images)
- self.servers_mock.create_image = mock.Mock(
- return_value=images[0].id,
+ self.sdk_client.create_server_image = mock.Mock(
+ return_value=images[0],
)
return images
@@ -126,15 +127,14 @@ class TestServerImageCreate(TestServerImage):
# data to be shown.
columns, data = self.cmd.take_action(parsed_args)
- # ServerManager.create_image(server, image_name, metadata=)
- self.servers_mock.create_image.assert_called_with(
+ self.sdk_client.create_server_image.assert_called_with(
servers[0].id,
servers[0].name,
None,
)
self.assertEqual(self.image_columns(images[0]), columns)
- self.assertItemsEqual(self.image_data(images[0]), data)
+ self.assertCountEqual(self.image_data(images[0]), data)
def test_server_image_create_options(self):
servers = self.setup_servers_mock(count=1)
@@ -157,15 +157,14 @@ class TestServerImageCreate(TestServerImage):
# data to be shown.
columns, data = self.cmd.take_action(parsed_args)
- # ServerManager.create_image(server, image_name, metadata=)
- self.servers_mock.create_image.assert_called_with(
+ self.sdk_client.create_server_image.assert_called_with(
servers[0].id,
'img-nam',
{'key': 'value'},
)
self.assertEqual(self.image_columns(images[0]), columns)
- self.assertItemsEqual(self.image_data(images[0]), data)
+ self.assertCountEqual(self.image_data(images[0]), data)
@mock.patch.object(common_utils, 'wait_for_status', return_value=False)
def test_server_create_image_wait_fail(self, mock_wait_for_status):
@@ -188,8 +187,7 @@ class TestServerImageCreate(TestServerImage):
parsed_args,
)
- # ServerManager.create_image(server, image_name, metadata=)
- self.servers_mock.create_image.assert_called_with(
+ self.sdk_client.create_server_image.assert_called_with(
servers[0].id,
servers[0].name,
None,
@@ -221,8 +219,7 @@ class TestServerImageCreate(TestServerImage):
# data to be shown.
columns, data = self.cmd.take_action(parsed_args)
- # ServerManager.create_image(server, image_name, metadata=)
- self.servers_mock.create_image.assert_called_with(
+ self.sdk_client.create_server_image.assert_called_with(
servers[0].id,
servers[0].name,
None,
@@ -235,4 +232,4 @@ class TestServerImageCreate(TestServerImage):
)
self.assertEqual(self.image_columns(images[0]), columns)
- self.assertItemsEqual(self.image_data(images[0]), data)
+ self.assertCountEqual(self.image_data(images[0]), data)
diff --git a/openstackclient/tests/unit/compute/v2/test_server_volume.py b/openstackclient/tests/unit/compute/v2/test_server_volume.py
index 4d4916b7..02d378f8 100644
--- a/openstackclient/tests/unit/compute/v2/test_server_volume.py
+++ b/openstackclient/tests/unit/compute/v2/test_server_volume.py
@@ -167,6 +167,55 @@ class TestServerVolumeList(TestServerVolume):
self.servers_volumes_mock.get_server_volumes.assert_called_once_with(
self.server.id)
+ def test_server_volume_list_with_attachment_ids(self):
+ self.app.client_manager.compute.api_version = \
+ api_versions.APIVersion('2.89')
+
+ arglist = [
+ self.server.id,
+ ]
+ verifylist = [
+ ('server', self.server.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.assertEqual(
+ (
+ 'Device', 'Server ID', 'Volume ID', 'Tag',
+ 'Delete On Termination?', 'Attachment ID',
+ 'BlockDeviceMapping UUID',
+ ),
+ columns,
+ )
+ self.assertEqual(
+ (
+ (
+ self.volume_attachments[0].device,
+ self.volume_attachments[0].serverId,
+ self.volume_attachments[0].volumeId,
+ self.volume_attachments[0].tag,
+ self.volume_attachments[0].delete_on_termination,
+ self.volume_attachments[0].attachment_id,
+ self.volume_attachments[0].bdm_uuid
+
+ ),
+ (
+ self.volume_attachments[1].device,
+ self.volume_attachments[1].serverId,
+ self.volume_attachments[1].volumeId,
+ self.volume_attachments[1].tag,
+ self.volume_attachments[1].delete_on_termination,
+ self.volume_attachments[1].attachment_id,
+ self.volume_attachments[1].bdm_uuid
+ ),
+ ),
+ tuple(data),
+ )
+ self.servers_volumes_mock.get_server_volumes.assert_called_once_with(
+ self.server.id)
+
class TestServerVolumeUpdate(TestServerVolume):
diff --git a/openstackclient/tests/unit/compute/v2/test_service.py b/openstackclient/tests/unit/compute/v2/test_service.py
index 87e54747..5b58431a 100644
--- a/openstackclient/tests/unit/compute/v2/test_service.py
+++ b/openstackclient/tests/unit/compute/v2/test_service.py
@@ -17,6 +17,7 @@ from unittest import mock
from unittest.mock import call
from novaclient import api_versions
+from openstack import utils as sdk_utils
from osc_lib import exceptions
from openstackclient.compute.v2 import service
@@ -28,9 +29,9 @@ class TestService(compute_fakes.TestComputev2):
def setUp(self):
super(TestService, self).setUp()
- # Get a shortcut to the ServiceManager Mock
- self.service_mock = self.app.client_manager.compute.services
- self.service_mock.reset_mock()
+ self.app.client_manager.sdk_connection = mock.Mock()
+ self.app.client_manager.sdk_connection.compute = mock.Mock()
+ self.sdk_client = self.app.client_manager.sdk_connection.compute
class TestServiceDelete(TestService):
@@ -40,7 +41,7 @@ class TestServiceDelete(TestService):
def setUp(self):
super(TestServiceDelete, self).setUp()
- self.service_mock.delete.return_value = None
+ self.sdk_client.delete_service.return_value = None
# Get the command object to test
self.cmd = service.DeleteService(self.app, None)
@@ -56,8 +57,9 @@ class TestServiceDelete(TestService):
result = self.cmd.take_action(parsed_args)
- self.service_mock.delete.assert_called_with(
+ self.sdk_client.delete_service.assert_called_with(
self.services[0].binary,
+ ignore_missing=False
)
self.assertIsNone(result)
@@ -74,8 +76,8 @@ class TestServiceDelete(TestService):
calls = []
for s in self.services:
- calls.append(call(s.binary))
- self.service_mock.delete.assert_has_calls(calls)
+ calls.append(call(s.binary, ignore_missing=False))
+ self.sdk_client.delete_service.assert_has_calls(calls)
self.assertIsNone(result)
def test_multi_services_delete_with_exception(self):
@@ -89,7 +91,7 @@ class TestServiceDelete(TestService):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
delete_mock_result = [None, exceptions.CommandError]
- self.service_mock.delete = (
+ self.sdk_client.delete_service = (
mock.Mock(side_effect=delete_mock_result)
)
@@ -100,8 +102,14 @@ class TestServiceDelete(TestService):
self.assertEqual(
'1 of 2 compute services failed to delete.', str(e))
- self.service_mock.delete.assert_any_call(self.services[0].binary)
- self.service_mock.delete.assert_any_call('unexist_service')
+ self.sdk_client.delete_service.assert_any_call(
+ self.services[0].binary,
+ ignore_missing=False
+ )
+ self.sdk_client.delete_service.assert_any_call(
+ 'unexist_service',
+ ignore_missing=False
+ )
class TestServiceList(TestService):
@@ -125,7 +133,7 @@ class TestServiceList(TestService):
service.id,
service.binary,
service.host,
- service.zone,
+ service.availability_zone,
service.status,
service.state,
service.updated_at,
@@ -135,7 +143,7 @@ class TestServiceList(TestService):
def setUp(self):
super(TestServiceList, self).setUp()
- self.service_mock.list.return_value = [self.service]
+ self.sdk_client.services.return_value = [self.service]
# Get the command object to test
self.cmd = service.ListService(self.app, None)
@@ -156,15 +164,18 @@ class TestServiceList(TestService):
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
- self.service_mock.list.assert_called_with(
- self.service.host,
- self.service.binary,
+ self.sdk_client.services.assert_called_with(
+ host=self.service.host,
+ binary=self.service.binary,
)
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))
- def test_service_list_with_long_option(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_list_with_long_option(self, sm_mock):
+ sm_mock.return_value = False
+
arglist = [
'--host', self.service.host,
'--service', self.service.binary,
@@ -182,14 +193,49 @@ class TestServiceList(TestService):
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
- self.service_mock.list.assert_called_with(
- self.service.host,
- self.service.binary,
+ self.sdk_client.services.assert_called_with(
+ host=self.service.host,
+ binary=self.service.binary,
)
self.assertEqual(self.columns_long, columns)
self.assertEqual(self.data_long, list(data))
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_list_with_long_option_2_11(self, sm_mock):
+ sm_mock.return_value = True
+
+ arglist = [
+ '--host', self.service.host,
+ '--service', self.service.binary,
+ '--long'
+ ]
+ verifylist = [
+ ('host', self.service.host),
+ ('service', self.service.binary),
+ ('long', True)
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.app.client_manager.compute.api_version = api_versions.APIVersion(
+ '2.11')
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.sdk_client.services.assert_called_with(
+ host=self.service.host,
+ binary=self.service.binary,
+ )
+
+ # In 2.11 there is also a forced_down column.
+ columns_long = self.columns_long + ('Forced Down',)
+ data_long = [self.data_long[0] + (self.service.is_forced_down,)]
+
+ self.assertEqual(columns_long, columns)
+ self.assertEqual(data_long, list(data))
+
class TestServiceSet(TestService):
@@ -198,12 +244,14 @@ class TestServiceSet(TestService):
self.service = compute_fakes.FakeService.create_one_service()
- self.service_mock.enable.return_value = self.service
- self.service_mock.disable.return_value = self.service
+ self.sdk_client.enable_service.return_value = self.service
+ self.sdk_client.disable_service.return_value = self.service
self.cmd = service.SetService(self.app, None)
- def test_set_nothing(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_set_nothing(self, sm_mock):
+ sm_mock.return_value = False
arglist = [
self.service.host,
self.service.binary,
@@ -215,12 +263,13 @@ class TestServiceSet(TestService):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- self.service_mock.enable.assert_not_called()
- self.service_mock.disable.assert_not_called()
- self.service_mock.disable_log_reason.assert_not_called()
+ self.sdk_client.enable_service.assert_not_called()
+ self.sdk_client.disable_service.assert_not_called()
self.assertIsNone(result)
- def test_service_set_enable(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_enable(self, sm_mock):
+ sm_mock.return_value = False
arglist = [
'--enable',
self.service.host,
@@ -235,13 +284,16 @@ class TestServiceSet(TestService):
result = self.cmd.take_action(parsed_args)
- self.service_mock.enable.assert_called_with(
+ self.sdk_client.enable_service.assert_called_with(
+ None,
self.service.host,
self.service.binary
)
self.assertIsNone(result)
- def test_service_set_disable(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_disable(self, sm_mock):
+ sm_mock.return_value = False
arglist = [
'--disable',
self.service.host,
@@ -256,13 +308,17 @@ class TestServiceSet(TestService):
result = self.cmd.take_action(parsed_args)
- self.service_mock.disable.assert_called_with(
+ self.sdk_client.disable_service.assert_called_with(
+ None,
self.service.host,
- self.service.binary
+ self.service.binary,
+ None
)
self.assertIsNone(result)
- def test_service_set_disable_with_reason(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_disable_with_reason(self, sm_mock):
+ sm_mock.return_value = False
reason = 'earthquake'
arglist = [
'--disable',
@@ -280,14 +336,17 @@ class TestServiceSet(TestService):
result = self.cmd.take_action(parsed_args)
- self.service_mock.disable_log_reason.assert_called_with(
+ self.sdk_client.disable_service.assert_called_with(
+ None,
self.service.host,
self.service.binary,
reason
)
self.assertIsNone(result)
- def test_service_set_only_with_disable_reason(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_only_with_disable_reason(self, sm_mock):
+ sm_mock.return_value = False
reason = 'earthquake'
arglist = [
'--disable-reason', reason,
@@ -307,7 +366,9 @@ class TestServiceSet(TestService):
self.assertEqual("Cannot specify option --disable-reason without "
"--disable specified.", str(e))
- def test_service_set_enable_with_disable_reason(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_enable_with_disable_reason(self, sm_mock):
+ sm_mock.return_value = False
reason = 'earthquake'
arglist = [
'--enable',
@@ -329,7 +390,9 @@ class TestServiceSet(TestService):
self.assertEqual("Cannot specify option --disable-reason without "
"--disable specified.", str(e))
- def test_service_set_state_up(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_state_up(self, sm_mock):
+ sm_mock.side_effect = [False, True]
arglist = [
'--up',
self.service.host,
@@ -341,16 +404,20 @@ class TestServiceSet(TestService):
('service', self.service.binary),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.11')
result = self.cmd.take_action(parsed_args)
- self.service_mock.force_down.assert_called_once_with(
- self.service.host, self.service.binary, False)
- self.assertNotCalled(self.service_mock.enable)
- self.assertNotCalled(self.service_mock.disable)
+ self.sdk_client.update_service_forced_down.assert_called_once_with(
+ None,
+ self.service.host,
+ self.service.binary,
+ False
+ )
+ self.assertNotCalled(self.sdk_client.enable_service)
+ self.assertNotCalled(self.sdk_client.disable_service)
self.assertIsNone(result)
- def test_service_set_state_down(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_state_down(self, sm_mock):
+ sm_mock.side_effect = [False, True]
arglist = [
'--down',
self.service.host,
@@ -362,16 +429,20 @@ class TestServiceSet(TestService):
('service', self.service.binary),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.11')
result = self.cmd.take_action(parsed_args)
- self.service_mock.force_down.assert_called_once_with(
- self.service.host, self.service.binary, True)
- self.assertNotCalled(self.service_mock.enable)
- self.assertNotCalled(self.service_mock.disable)
+ self.sdk_client.update_service_forced_down.assert_called_once_with(
+ None,
+ self.service.host,
+ self.service.binary,
+ True
+ )
+ self.assertNotCalled(self.sdk_client.enable_service)
+ self.assertNotCalled(self.sdk_client.disable_service)
self.assertIsNone(result)
- def test_service_set_enable_and_state_down(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_enable_and_state_down(self, sm_mock):
+ sm_mock.side_effect = [False, True]
arglist = [
'--enable',
'--down',
@@ -385,16 +456,23 @@ class TestServiceSet(TestService):
('service', self.service.binary),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.11')
result = self.cmd.take_action(parsed_args)
- self.service_mock.enable.assert_called_once_with(
- self.service.host, self.service.binary)
- self.service_mock.force_down.assert_called_once_with(
- self.service.host, self.service.binary, True)
+ self.sdk_client.enable_service.assert_called_once_with(
+ None,
+ self.service.host,
+ self.service.binary
+ )
+ self.sdk_client.update_service_forced_down.assert_called_once_with(
+ None,
+ self.service.host,
+ self.service.binary,
+ True
+ )
self.assertIsNone(result)
- def test_service_set_enable_and_state_down_with_exception(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_enable_and_state_down_with_exception(self, sm_mock):
+ sm_mock.side_effect = [False, True]
arglist = [
'--enable',
'--down',
@@ -409,18 +487,22 @@ class TestServiceSet(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.11')
- with mock.patch.object(self.service_mock, 'enable',
+ with mock.patch.object(self.sdk_client, 'enable_service',
side_effect=Exception()):
self.assertRaises(exceptions.CommandError,
self.cmd.take_action, parsed_args)
- self.service_mock.force_down.assert_called_once_with(
- self.service.host, self.service.binary, True)
-
- def test_service_set_2_53_disable_down(self):
+ self.sdk_client.update_service_forced_down.assert_called_once_with(
+ None,
+ self.service.host,
+ self.service.binary,
+ True
+ )
+
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_2_53_disable_down(self, sm_mock):
# Tests disabling and forcing down a compute service with microversion
# 2.53 which requires looking up the service by host and binary.
+ sm_mock.return_value = True
arglist = [
'--disable',
'--down',
@@ -434,18 +516,27 @@ class TestServiceSet(TestService):
('service', self.service.binary),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.53')
service_id = '339478d0-0b95-4a94-be63-d5be05dfeb1c'
- self.service_mock.list.return_value = [mock.Mock(id=service_id)]
+ self.sdk_client.services.return_value = [mock.Mock(id=service_id)]
result = self.cmd.take_action(parsed_args)
- self.service_mock.disable.assert_called_once_with(service_id)
- self.service_mock.force_down.assert_called_once_with(service_id, True)
+ self.sdk_client.disable_service.assert_called_once_with(
+ service_id,
+ self.service.host,
+ self.service.binary,
+ None
+ )
+ self.sdk_client.update_service_forced_down.assert_called_once_with(
+ service_id,
+ self.service.host,
+ self.service.binary,
+ True)
self.assertIsNone(result)
- def test_service_set_2_53_disable_reason(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_2_53_disable_reason(self, sm_mock):
# Tests disabling with reason a compute service with microversion
# 2.53 which requires looking up the service by host and binary.
+ sm_mock.return_value = True
reason = 'earthquake'
arglist = [
'--disable',
@@ -460,18 +551,22 @@ class TestServiceSet(TestService):
('service', self.service.binary),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.53')
service_id = '339478d0-0b95-4a94-be63-d5be05dfeb1c'
- self.service_mock.list.return_value = [mock.Mock(id=service_id)]
+ self.sdk_client.services.return_value = [mock.Mock(id=service_id)]
result = self.cmd.take_action(parsed_args)
- self.service_mock.disable_log_reason.assert_called_once_with(
- service_id, reason)
+ self.sdk_client.disable_service.assert_called_once_with(
+ service_id,
+ self.service.host,
+ self.service.binary,
+ reason
+ )
self.assertIsNone(result)
- def test_service_set_2_53_enable_up(self):
+ @mock.patch.object(sdk_utils, 'supports_microversion')
+ def test_service_set_2_53_enable_up(self, sm_mock):
# Tests enabling and bringing up a compute service with microversion
# 2.53 which requires looking up the service by host and binary.
+ sm_mock.return_value = True
arglist = [
'--enable',
'--up',
@@ -485,30 +580,37 @@ class TestServiceSet(TestService):
('service', self.service.binary),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.app.client_manager.compute.api_version = api_versions.APIVersion(
- '2.53')
service_id = '339478d0-0b95-4a94-be63-d5be05dfeb1c'
- self.service_mock.list.return_value = [mock.Mock(id=service_id)]
+ self.sdk_client.services.return_value = [mock.Mock(id=service_id)]
result = self.cmd.take_action(parsed_args)
- self.service_mock.enable.assert_called_once_with(service_id)
- self.service_mock.force_down.assert_called_once_with(service_id, False)
+ self.sdk_client.enable_service.assert_called_once_with(
+ service_id,
+ self.service.host,
+ self.service.binary
+ )
+ self.sdk_client.update_service_forced_down.assert_called_once_with(
+ service_id,
+ self.service.host,
+ self.service.binary,
+ False
+ )
self.assertIsNone(result)
def test_service_set_find_service_by_host_and_binary_no_results(self):
# Tests that no compute services are found by host and binary.
- self.service_mock.list.return_value = []
+ self.sdk_client.services.return_value = []
ex = self.assertRaises(exceptions.CommandError,
self.cmd._find_service_by_host_and_binary,
- self.service_mock, 'fake-host', 'nova-compute')
+ self.sdk_client, 'fake-host', 'nova-compute')
self.assertIn('Compute service for host "fake-host" and binary '
'"nova-compute" not found.', str(ex))
def test_service_set_find_service_by_host_and_binary_many_results(self):
# Tests that more than one compute service is found by host and binary.
- self.service_mock.list.return_value = [mock.Mock(), mock.Mock()]
+ self.sdk_client.services.return_value = [mock.Mock(), mock.Mock()]
ex = self.assertRaises(exceptions.CommandError,
self.cmd._find_service_by_host_and_binary,
- self.service_mock, 'fake-host', 'nova-compute')
+ self.sdk_client, 'fake-host', 'nova-compute')
self.assertIn('Multiple compute services found for host "fake-host" '
'and binary "nova-compute". Unable to proceed.',
str(ex))
diff --git a/openstackclient/tests/unit/identity/v2_0/test_catalog.py b/openstackclient/tests/unit/identity/v2_0/test_catalog.py
index e2c56ba1..bfb28f69 100644
--- a/openstackclient/tests/unit/identity/v2_0/test_catalog.py
+++ b/openstackclient/tests/unit/identity/v2_0/test_catalog.py
@@ -74,7 +74,7 @@ class TestCatalogList(TestCatalog):
catalog.EndpointsColumn(
auth_ref.service_catalog.catalog[0]['endpoints']),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_catalog_list_with_endpoint_url(self):
attr = {
@@ -117,7 +117,7 @@ class TestCatalogList(TestCatalog):
catalog.EndpointsColumn(
auth_ref.service_catalog.catalog[0]['endpoints']),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
class TestCatalogShow(TestCatalog):
@@ -158,7 +158,7 @@ class TestCatalogShow(TestCatalog):
'supernova',
'compute',
)
- self.assertItemsEqual(datalist, data)
+ self.assertCountEqual(datalist, data)
class TestFormatColumns(TestCatalog):
diff --git a/openstackclient/tests/unit/identity/v2_0/test_project.py b/openstackclient/tests/unit/identity/v2_0/test_project.py
index 766d5dab..496214aa 100644
--- a/openstackclient/tests/unit/identity/v2_0/test_project.py
+++ b/openstackclient/tests/unit/identity/v2_0/test_project.py
@@ -643,7 +643,7 @@ class TestProjectShow(TestProject):
self.fake_proj_show.name,
format_columns.DictColumn({}),
)
- self.assertItemsEqual(datalist, data)
+ self.assertCountEqual(datalist, data)
class TestProjectUnset(TestProject):
diff --git a/openstackclient/tests/unit/identity/v2_0/test_user.py b/openstackclient/tests/unit/identity/v2_0/test_user.py
index dd300478..c3f5f1d7 100644
--- a/openstackclient/tests/unit/identity/v2_0/test_user.py
+++ b/openstackclient/tests/unit/identity/v2_0/test_user.py
@@ -482,7 +482,7 @@ class TestUserList(TestUser):
self.users_mock.list.assert_called_with(tenant_id=None)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_user_list_project(self):
arglist = [
@@ -502,7 +502,7 @@ class TestUserList(TestUser):
self.users_mock.list.assert_called_with(tenant_id=project_id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_user_list_long(self):
arglist = [
@@ -531,7 +531,7 @@ class TestUserList(TestUser):
self.fake_user_l.email,
True,
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
class TestUserSet(TestUser):
@@ -819,4 +819,4 @@ class TestUserShow(TestUser):
self.fake_user.name,
self.fake_project.id,
)
- self.assertItemsEqual(datalist, data)
+ self.assertCountEqual(datalist, data)
diff --git a/openstackclient/tests/unit/identity/v3/test_catalog.py b/openstackclient/tests/unit/identity/v3/test_catalog.py
index 97ce48f6..802a9017 100644
--- a/openstackclient/tests/unit/identity/v3/test_catalog.py
+++ b/openstackclient/tests/unit/identity/v3/test_catalog.py
@@ -94,7 +94,7 @@ class TestCatalogList(TestCatalog):
catalog.EndpointsColumn(
auth_ref.service_catalog.catalog[0]['endpoints']),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
class TestCatalogShow(TestCatalog):
@@ -135,7 +135,7 @@ class TestCatalogShow(TestCatalog):
'supernova',
'compute',
)
- self.assertItemsEqual(datalist, data)
+ self.assertCountEqual(datalist, data)
class TestFormatColumns(TestCatalog):
diff --git a/openstackclient/tests/unit/identity/v3/test_identity_provider.py b/openstackclient/tests/unit/identity/v3/test_identity_provider.py
index 5aff2b1b..1a9a7991 100644
--- a/openstackclient/tests/unit/identity/v3/test_identity_provider.py
+++ b/openstackclient/tests/unit/identity/v3/test_identity_provider.py
@@ -89,7 +89,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_create_identity_provider_description(self):
arglist = [
@@ -117,7 +117,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_create_identity_provider_remote_id(self):
arglist = [
@@ -145,7 +145,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_create_identity_provider_remote_ids_multiple(self):
arglist = [
@@ -174,7 +174,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_create_identity_provider_remote_ids_file(self):
arglist = [
@@ -207,7 +207,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_create_identity_provider_disabled(self):
@@ -250,7 +250,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
identity_fakes.idp_id,
identity_fakes.formatted_idp_remote_ids
)
- self.assertItemsEqual(datalist, data)
+ self.assertCountEqual(datalist, data)
def test_create_identity_provider_domain_name(self):
arglist = [
@@ -278,7 +278,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_create_identity_provider_domain_id(self):
arglist = [
@@ -306,7 +306,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
class TestIdentityProviderDelete(TestIdentityProvider):
@@ -382,7 +382,7 @@ class TestIdentityProviderList(TestIdentityProvider):
identity_fakes.domain_id,
identity_fakes.idp_description,
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_identity_provider_list_ID_option(self):
arglist = ['--id',
@@ -410,7 +410,7 @@ class TestIdentityProviderList(TestIdentityProvider):
identity_fakes.domain_id,
identity_fakes.idp_description,
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_identity_provider_list_enabled_option(self):
arglist = ['--enabled']
@@ -437,7 +437,7 @@ class TestIdentityProviderList(TestIdentityProvider):
identity_fakes.domain_id,
identity_fakes.idp_description,
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
class TestIdentityProviderSet(TestIdentityProvider):
@@ -722,4 +722,4 @@ class TestIdentityProviderShow(TestIdentityProvider):
identity_fakes.idp_id,
identity_fakes.formatted_idp_remote_ids
)
- self.assertItemsEqual(datalist, data)
+ self.assertCountEqual(datalist, data)
diff --git a/openstackclient/tests/unit/image/v1/fakes.py b/openstackclient/tests/unit/image/v1/fakes.py
index add3978d..59ae5f7a 100644
--- a/openstackclient/tests/unit/image/v1/fakes.py
+++ b/openstackclient/tests/unit/image/v1/fakes.py
@@ -11,7 +11,6 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
-#
from unittest import mock
import uuid
@@ -25,36 +24,6 @@ from openstackclient.tests.unit.volume.v1 import fakes as volume_fakes
image_id = 'im1'
image_name = 'graven'
-image_owner = 'baal'
-image_protected = False
-image_public = True
-image_properties = {
- 'Alpha': 'a',
- 'Beta': 'b',
- 'Gamma': 'g',
-}
-image_properties_str = "Alpha='a', Beta='b', Gamma='g'"
-image_data = 'line 1\nline 2\n'
-image_size = 0
-
-IMAGE = {
- 'id': image_id,
- 'name': image_name,
- 'container_format': '',
- 'disk_format': '',
- 'owner': image_owner,
- 'min_disk': 0,
- 'min_ram': 0,
- 'is_public': image_public,
- 'protected': image_protected,
- 'properties': image_properties,
- 'size': image_size,
-}
-
-IMAGE_columns = tuple(sorted(IMAGE))
-IMAGE_output = dict(IMAGE)
-IMAGE_output['properties'] = image_properties_str
-IMAGE_data = tuple((IMAGE_output[x] for x in sorted(IMAGE_output)))
class FakeImagev1Client(object):
diff --git a/openstackclient/tests/unit/image/v1/test_image.py b/openstackclient/tests/unit/image/v1/test_image.py
index db64983c..5c69bf0f 100644
--- a/openstackclient/tests/unit/image/v1/test_image.py
+++ b/openstackclient/tests/unit/image/v1/test_image.py
@@ -100,7 +100,7 @@ class TestImageCreate(TestImage):
self.assertEqual(self.client.update_image.call_args_list, [])
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
@mock.patch('sys.stdin', side_effect=[None])
def test_image_reserve_options(self, raw_input):
@@ -149,7 +149,7 @@ class TestImageCreate(TestImage):
self.assertEqual(self.client.update_image.call_args_list, [])
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
@mock.patch('openstackclient.image.v1.image.io.open', name='Open')
def test_image_create_file(self, mock_open):
@@ -205,7 +205,7 @@ class TestImageCreate(TestImage):
self.assertEqual(self.client.update_image.call_args_list, [])
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestImageDelete(TestImage):
@@ -386,7 +386,7 @@ class TestImageList(TestImage):
format_columns.DictColumn(
{'Alpha': 'a', 'Beta': 'b', 'Gamma': 'g'}),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
@mock.patch('osc_lib.api.utils.simple_filter')
def test_image_list_property_option(self, sf_mock):
@@ -737,7 +737,7 @@ class TestImageShow(TestImage):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_image_show_human_readable(self):
arglist = [
diff --git a/openstackclient/tests/unit/image/v2/fakes.py b/openstackclient/tests/unit/image/v2/fakes.py
index 516d5630..49ce400d 100644
--- a/openstackclient/tests/unit/image/v2/fakes.py
+++ b/openstackclient/tests/unit/image/v2/fakes.py
@@ -11,16 +11,13 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
-#
-import copy
import random
from unittest import mock
import uuid
from openstack.image.v2 import image
from openstack.image.v2 import member
-from osc_lib.cli import format_columns
from openstackclient.tests.unit import fakes
from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
@@ -28,121 +25,6 @@ from openstackclient.tests.unit import utils
image_id = '0f41529e-7c12-4de8-be2d-181abb825b3c'
image_name = 'graven'
-image_owner = 'baal'
-image_protected = False
-image_visibility = 'public'
-image_tags = []
-image_size = 0
-
-IMAGE = {
- 'id': image_id,
- 'name': image_name,
- 'owner': image_owner,
- 'protected': image_protected,
- 'visibility': image_visibility,
- 'tags': image_tags,
- 'size': image_size
-}
-
-IMAGE_columns = tuple(sorted(IMAGE))
-IMAGE_data = tuple((IMAGE[x] for x in sorted(IMAGE)))
-
-IMAGE_SHOW = copy.copy(IMAGE)
-IMAGE_SHOW['tags'] = format_columns.ListColumn(IMAGE_SHOW['tags'])
-IMAGE_SHOW_data = tuple((IMAGE_SHOW[x] for x in sorted(IMAGE_SHOW)))
-
-# Just enough v2 schema to do some testing
-IMAGE_schema = {
- "additionalProperties": {
- "type": "string"
- },
- "name": "image",
- "links": [
- {
- "href": "{self}",
- "rel": "self"
- },
- {
- "href": "{file}",
- "rel": "enclosure"
- },
- {
- "href": "{schema}",
- "rel": "describedby"
- }
- ],
- "properties": {
- "id": {
- "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", # noqa
- "type": "string",
- "description": "An identifier for the image"
- },
- "name": {
- "type": [
- "null",
- "string"
- ],
- "description": "Descriptive name for the image",
- "maxLength": 255
- },
- "owner": {
- "type": [
- "null",
- "string"
- ],
- "description": "Owner of the image",
- "maxLength": 255
- },
- "protected": {
- "type": "boolean",
- "description": "If true, image will not be deletable."
- },
- "self": {
- "type": "string",
- "description": "(READ-ONLY)"
- },
- "schema": {
- "type": "string",
- "description": "(READ-ONLY)"
- },
- "size": {
- "type": [
- "null",
- "integer",
- "string"
- ],
- "description": "Size of image file in bytes (READ-ONLY)"
- },
- "status": {
- "enum": [
- "queued",
- "saving",
- "active",
- "killed",
- "deleted",
- "pending_delete"
- ],
- "type": "string",
- "description": "Status of the image (READ-ONLY)"
- },
- "tags": {
- "items": {
- "type": "string",
- "maxLength": 255
- },
- "type": "array",
- "description": "List of strings related to the image"
- },
- "visibility": {
- "enum": [
- "public",
- "private"
- ],
- "type": "string",
- "description": "Scope of image accessibility"
- },
- }
-}
class FakeImagev2Client(object):
@@ -232,61 +114,6 @@ class FakeImage(object):
return images
@staticmethod
- def get_images(images=None, count=2):
- """Get an iterable MagicMock object with a list of faked images.
-
- If images list is provided, then initialize the Mock object with the
- list. Otherwise create one.
-
- :param List images:
- A list of FakeResource objects faking images
- :param Integer count:
- The number of images to be faked
- :return:
- An iterable Mock object with side_effect set to a list of faked
- images
- """
- if images is None:
- images = FakeImage.create_images(count)
-
- return mock.Mock(side_effect=images)
-
- @staticmethod
- def get_image_columns(image=None):
- """Get the image columns from a faked image object.
-
- :param image:
- A FakeResource objects faking image
- :return:
- A tuple which may include the following keys:
- ('id', 'name', 'owner', 'protected', 'visibility', 'tags')
- """
- if image is not None:
- return tuple(sorted(image))
- return IMAGE_columns
-
- @staticmethod
- def get_image_data(image=None):
- """Get the image data from a faked image object.
-
- :param image:
- A FakeResource objects faking image
- :return:
- A tuple which may include the following values:
- ('image-123', 'image-foo', 'admin', False, 'public', 'bar, baz')
- """
- data_list = []
- if image is not None:
- for x in sorted(image.keys()):
- if x == 'tags':
- # The 'tags' should be format_list
- data_list.append(
- format_columns.ListColumn(getattr(image, x)))
- else:
- data_list.append(getattr(image, x))
- return tuple(data_list)
-
- @staticmethod
def create_one_image_member(attrs=None):
"""Create a fake image member.
@@ -308,8 +135,3 @@ class FakeImage(object):
image_member_info.update(attrs)
return member.Member(**image_member_info)
-
- image_member = fakes.FakeModel(
- copy.deepcopy(image_member_info))
-
- return image_member
diff --git a/openstackclient/tests/unit/image/v2/test_image.py b/openstackclient/tests/unit/image/v2/test_image.py
index c44c767b..35af6799 100644
--- a/openstackclient/tests/unit/image/v2/test_image.py
+++ b/openstackclient/tests/unit/image/v2/test_image.py
@@ -111,7 +111,7 @@ class TestImageCreate(TestImage):
self.assertEqual(
self.expected_columns,
columns)
- self.assertItemsEqual(
+ self.assertCountEqual(
self.expected_data,
data)
@@ -166,7 +166,7 @@ class TestImageCreate(TestImage):
self.assertEqual(
self.expected_columns,
columns)
- self.assertItemsEqual(
+ self.assertCountEqual(
self.expected_data,
data)
@@ -255,7 +255,7 @@ class TestImageCreate(TestImage):
self.assertEqual(
self.expected_columns,
columns)
- self.assertItemsEqual(
+ self.assertCountEqual(
self.expected_data,
data)
@@ -513,7 +513,7 @@ class TestImageList(TestImage):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_image_list_public_option(self):
arglist = [
@@ -537,7 +537,7 @@ class TestImageList(TestImage):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_image_list_private_option(self):
arglist = [
@@ -561,7 +561,7 @@ class TestImageList(TestImage):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_image_list_community_option(self):
arglist = [
@@ -609,7 +609,7 @@ class TestImageList(TestImage):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_image_list_shared_member_status_option(self):
arglist = [
@@ -697,7 +697,7 @@ class TestImageList(TestImage):
self._image.owner_id,
format_columns.ListColumn(self._image.tags),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
@mock.patch('osc_lib.api.utils.simple_filter')
def test_image_list_property_option(self, sf_mock):
@@ -725,7 +725,7 @@ class TestImageList(TestImage):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
@mock.patch('osc_lib.utils.sort_items')
def test_image_list_sort_option(self, si_mock):
@@ -747,7 +747,7 @@ class TestImageList(TestImage):
str,
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_image_list_limit_option(self):
ret_limit = 1
@@ -782,7 +782,7 @@ class TestImageList(TestImage):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
@mock.patch('osc_lib.utils.find_resource')
def test_image_list_marker_option(self, fr_mock):
@@ -1555,7 +1555,7 @@ class TestImageShow(TestImage):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_image_show_human_readable(self):
self.client.find_image.return_value = self.new_image
diff --git a/openstackclient/tests/unit/network/test_sdk_utils.py b/openstackclient/tests/unit/network/test_sdk_utils.py
deleted file mode 100644
index d1efa7e4..00000000
--- a/openstackclient/tests/unit/network/test_sdk_utils.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-from openstackclient.network import sdk_utils
-from openstackclient.tests.unit import utils as tests_utils
-
-
-class TestSDKUtils(tests_utils.TestCase):
-
- def setUp(self):
- super(TestSDKUtils, self).setUp()
-
- def _test_get_osc_show_columns_for_sdk_resource(
- self, sdk_resource, column_map,
- expected_display_columns, expected_attr_columns):
- display_columns, attr_columns = \
- sdk_utils.get_osc_show_columns_for_sdk_resource(
- sdk_resource, column_map)
- self.assertEqual(expected_display_columns, display_columns)
- self.assertEqual(expected_attr_columns, attr_columns)
-
- def test_get_osc_show_columns_for_sdk_resource_empty(self):
- self._test_get_osc_show_columns_for_sdk_resource(
- {}, {}, tuple(), tuple())
-
- def test_get_osc_show_columns_for_sdk_resource_empty_map(self):
- self._test_get_osc_show_columns_for_sdk_resource(
- {'foo': 'foo1'}, {},
- ('foo',), ('foo',))
-
- def test_get_osc_show_columns_for_sdk_resource_empty_data(self):
- self._test_get_osc_show_columns_for_sdk_resource(
- {}, {'foo': 'foo_map'},
- ('foo_map',), ('foo_map',))
-
- def test_get_osc_show_columns_for_sdk_resource_map(self):
- self._test_get_osc_show_columns_for_sdk_resource(
- {'foo': 'foo1'}, {'foo': 'foo_map'},
- ('foo_map',), ('foo',))
-
- def test_get_osc_show_columns_for_sdk_resource_map_dup(self):
- self._test_get_osc_show_columns_for_sdk_resource(
- {'foo': 'foo1', 'foo_map': 'foo1'}, {'foo': 'foo_map'},
- ('foo_map',), ('foo',))
-
- def test_get_osc_show_columns_for_sdk_resource_map_full(self):
- self._test_get_osc_show_columns_for_sdk_resource(
- {'foo': 'foo1', 'bar': 'bar1'},
- {'foo': 'foo_map', 'new': 'bar'},
- ('bar', 'foo_map'), ('bar', 'foo'))
diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py
index ab77d719..4a36f99b 100644
--- a/openstackclient/tests/unit/network/v2/fakes.py
+++ b/openstackclient/tests/unit/network/v2/fakes.py
@@ -102,8 +102,9 @@ class FakeAddressGroup(object):
'name': 'address-group-name-' + uuid.uuid4().hex,
'description': 'address-group-description-' + uuid.uuid4().hex,
'id': 'address-group-id-' + uuid.uuid4().hex,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'addresses': ['10.0.0.1/32'],
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -113,9 +114,6 @@ class FakeAddressGroup(object):
info=copy.deepcopy(address_group_attrs),
loaded=True)
- # Set attributes with special mapping in OpenStack SDK.
- address_group.project_id = address_group_attrs['tenant_id']
-
return address_group
@staticmethod
@@ -174,9 +172,10 @@ class FakeAddressScope(object):
address_scope_attrs = {
'name': 'address-scope-name-' + uuid.uuid4().hex,
'id': 'address-scope-id-' + uuid.uuid4().hex,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'shared': False,
'ip_version': 4,
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -188,7 +187,6 @@ class FakeAddressScope(object):
# Set attributes with special mapping in OpenStack SDK.
address_scope.is_shared = address_scope_attrs['shared']
- address_scope.project_id = address_scope_attrs['tenant_id']
return address_scope
@@ -239,7 +237,7 @@ class FakeAutoAllocatedTopology(object):
auto_allocated_topology_attrs = {
'id': 'network-id-' + uuid.uuid4().hex,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
}
auto_allocated_topology_attrs.update(attrs)
@@ -248,10 +246,6 @@ class FakeAutoAllocatedTopology(object):
info=copy.deepcopy(auto_allocated_topology_attrs),
loaded=True)
- auto_allocated_topology.project_id = auto_allocated_topology_attrs[
- 'tenant_id'
- ]
-
return auto_allocated_topology
@@ -322,17 +316,17 @@ class FakeIPAvailability(object):
network_ip_attrs = {
'network_id': 'network-id-' + uuid.uuid4().hex,
'network_name': 'network-name-' + uuid.uuid4().hex,
- 'tenant_id': '',
+ 'project_id': '',
'subnet_ip_availability': [],
'total_ips': 254,
'used_ips': 6,
+ 'location': 'MUNCHMUNCHMUNCH',
}
network_ip_attrs.update(attrs)
network_ip_availability = fakes.FakeResource(
info=copy.deepcopy(network_ip_attrs),
loaded=True)
- network_ip_availability.project_id = network_ip_attrs['tenant_id']
return network_ip_availability
@@ -409,7 +403,7 @@ class FakeNetwork(object):
'description': 'network-description-' + uuid.uuid4().hex,
'dns_domain': 'example.org.',
'mtu': '1350',
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'admin_state_up': True,
'shared': False,
'subnets': ['a', 'b'],
@@ -425,6 +419,7 @@ class FakeNetwork(object):
'ipv4_address_scope': 'ipv4' + uuid.uuid4().hex,
'ipv6_address_scope': 'ipv6' + uuid.uuid4().hex,
'tags': [],
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -434,7 +429,6 @@ class FakeNetwork(object):
loaded=True)
# Set attributes with special mapping in OpenStack SDK.
- network.project_id = network_attrs['tenant_id']
network.is_router_external = network_attrs['router:external']
network.is_admin_state_up = network_attrs['admin_state_up']
network.is_port_security_enabled = \
@@ -513,7 +507,8 @@ class FakeNetworkFlavor(object):
'id': 'network-flavor-id-' + fake_uuid,
'name': 'network-flavor-name-' + fake_uuid,
'service_type': 'vpn',
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -524,7 +519,6 @@ class FakeNetworkFlavor(object):
loaded=True
)
- network_flavor.project_id = network_flavor_attrs['tenant_id']
network_flavor.is_enabled = network_flavor_attrs['enabled']
return network_flavor
@@ -579,6 +573,7 @@ class FakeNetworkSegment(object):
'network_type': 'vlan',
'physical_network': 'physical-network-name-' + fake_uuid,
'segmentation_id': 1024,
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -639,6 +634,7 @@ class FakeNetworkSegmentRange(object):
'used': {104: '3312e4ba67864b2eb53f3f41432f8efc',
106: '3312e4ba67864b2eb53f3f41432f8efc'},
'available': [100, 101, 102, 103, 105],
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -712,11 +708,12 @@ class FakePort(object):
'port_security_enabled': True,
'security_group_ids': [],
'status': 'ACTIVE',
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'qos_network_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
'tags': [],
'propagate_uplink_status': False,
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -733,11 +730,6 @@ class FakePort(object):
port.binding_vnic_type = port_attrs['binding:vnic_type']
port.is_admin_state_up = port_attrs['admin_state_up']
port.is_port_security_enabled = port_attrs['port_security_enabled']
- port.project_id = port_attrs['tenant_id']
- port.security_group_ids = port_attrs['security_group_ids']
- port.qos_policy_id = port_attrs['qos_policy_id']
- port.propagate_uplink_status = port_attrs[
- 'propagate_uplink_status']
return port
@@ -802,6 +794,7 @@ class FakeNetworkAgent(object):
'admin_state_up': True,
'binary': 'binary-' + uuid.uuid4().hex,
'configurations': {'subnet': 2, 'networks': 1},
+ 'location': 'MUNCHMUNCHMUNCH',
}
agent_attrs.update(attrs)
agent = fakes.FakeResource(info=copy.deepcopy(agent_attrs),
@@ -858,7 +851,7 @@ class FakeNetworkRBAC(object):
A dictionary with all attributes
:return:
A FakeResource object, with id, action, target_tenant,
- tenant_id, type
+ project_id, type
"""
attrs = attrs or {}
@@ -869,13 +862,13 @@ class FakeNetworkRBAC(object):
'object_id': 'object-id-' + uuid.uuid4().hex,
'action': 'access_as_shared',
'target_tenant': 'target-tenant-' + uuid.uuid4().hex,
- 'tenant_id': 'tenant-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
+ 'location': 'MUNCHMUNCHMUNCH',
}
rbac_attrs.update(attrs)
rbac = fakes.FakeResource(info=copy.deepcopy(rbac_attrs),
loaded=True)
# Set attributes with special mapping in OpenStack SDK.
- rbac.project_id = rbac_attrs['tenant_id']
rbac.target_project_id = rbac_attrs['target_tenant']
return rbac
@@ -928,10 +921,11 @@ class FakeNetworkFlavorProfile(object):
flavor_profile_attrs = {
'id': 'flavor-profile-id' + uuid.uuid4().hex,
'description': 'flavor-profile-description-' + uuid.uuid4().hex,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'driver': 'driver-' + uuid.uuid4().hex,
'metainfo': 'metainfo-' + uuid.uuid4().hex,
- 'enabled': True
+ 'enabled': True,
+ 'location': 'MUNCHMUNCHMUNCH',
}
flavor_profile_attrs.update(attrs)
@@ -940,7 +934,6 @@ class FakeNetworkFlavorProfile(object):
info=copy.deepcopy(flavor_profile_attrs),
loaded=True)
- flavor_profile.project_id = flavor_profile_attrs['tenant_id']
flavor_profile.is_enabled = flavor_profile_attrs['enabled']
return flavor_profile
@@ -986,10 +979,11 @@ class FakeNetworkQosPolicy(object):
'name': 'qos-policy-name-' + uuid.uuid4().hex,
'id': qos_id,
'is_default': False,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'shared': False,
'description': 'qos-policy-description-' + uuid.uuid4().hex,
'rules': rules,
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -1001,7 +995,6 @@ class FakeNetworkQosPolicy(object):
# Set attributes with special mapping in OpenStack SDK.
qos_policy.is_shared = qos_policy_attrs['shared']
- qos_policy.project_id = qos_policy_attrs['tenant_id']
return qos_policy
@@ -1062,17 +1055,15 @@ class FakeNetworkSecGroup(object):
security_group_attrs = {
'name': 'security-group-name-' + uuid.uuid4().hex,
'id': sg_id,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
- 'description': 'security-group-description-' + uuid.uuid4().hex
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
+ 'description': 'security-group-description-' + uuid.uuid4().hex,
+ 'location': 'MUNCHMUNCHMUNCH',
}
security_group = fakes.FakeResource(
info=copy.deepcopy(security_group_attrs),
loaded=True)
- # Set attributes with special mapping in OpenStack SDK.
- security_group.project_id = security_group_attrs['tenant_id']
-
return security_group
@@ -1095,8 +1086,9 @@ class FakeNetworkQosRule(object):
qos_rule_attrs = {
'id': 'qos-rule-id-' + uuid.uuid4().hex,
'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'type': type,
+ 'location': 'MUNCHMUNCHMUNCH',
}
if type == RULE_TYPE_BANDWIDTH_LIMIT:
qos_rule_attrs['max_kbps'] = randint(1, 10000)
@@ -1114,9 +1106,6 @@ class FakeNetworkQosRule(object):
qos_rule = fakes.FakeResource(info=copy.deepcopy(qos_rule_attrs),
loaded=True)
- # Set attributes with special mapping in OpenStack SDK.
- qos_rule.project_id = qos_rule['tenant_id']
-
return qos_rule
@staticmethod
@@ -1172,6 +1161,7 @@ class FakeNetworkQosRuleType(object):
# Set default attributes.
qos_rule_type_attrs = {
'type': 'rule-type-' + uuid.uuid4().hex,
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -1211,7 +1201,7 @@ class FakeRouter(object):
A dictionary with all attributes
:return:
A FakeResource object, with id, name, admin_state_up,
- status, tenant_id
+ status, project_id
"""
attrs = attrs or {}
@@ -1224,12 +1214,13 @@ class FakeRouter(object):
'description': 'router-description-' + uuid.uuid4().hex,
'distributed': False,
'ha': False,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'routes': [],
'external_gateway_info': {},
'availability_zone_hints': [],
'availability_zones': [],
'tags': [],
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -1239,7 +1230,6 @@ class FakeRouter(object):
loaded=True)
# Set attributes with special mapping in OpenStack SDK.
- router.project_id = router_attrs['tenant_id']
router.is_admin_state_up = router_attrs['admin_state_up']
router.is_distributed = router_attrs['distributed']
router.is_ha = router_attrs['ha']
@@ -1305,7 +1295,8 @@ class FakeSecurityGroup(object):
'stateful': True,
'project_id': 'project-id-' + uuid.uuid4().hex,
'security_group_rules': [],
- 'tags': []
+ 'tags': [],
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -1315,9 +1306,6 @@ class FakeSecurityGroup(object):
info=copy.deepcopy(security_group_attrs),
loaded=True)
- # Set attributes with special mapping in OpenStack SDK.
- security_group.project_id = security_group_attrs['project_id']
-
return security_group
@staticmethod
@@ -1386,7 +1374,8 @@ class FakeSecurityGroupRule(object):
'remote_address_group_id': None,
'remote_ip_prefix': '0.0.0.0/0',
'security_group_id': 'security-group-id-' + uuid.uuid4().hex,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -1396,9 +1385,6 @@ class FakeSecurityGroupRule(object):
info=copy.deepcopy(security_group_rule_attrs),
loaded=True)
- # Set attributes with special mapping in OpenStack SDK.
- security_group_rule.project_id = security_group_rule_attrs['tenant_id']
-
return security_group_rule
@staticmethod
@@ -1461,7 +1447,7 @@ class FakeSubnet(object):
'name': 'subnet-name-' + uuid.uuid4().hex,
'network_id': 'network-id-' + uuid.uuid4().hex,
'cidr': '10.10.10.0/24',
- 'tenant_id': project_id,
+ 'project_id': project_id,
'enable_dhcp': True,
'dns_nameservers': [],
'allocation_pools': [],
@@ -1475,6 +1461,7 @@ class FakeSubnet(object):
'subnetpool_id': None,
'description': 'subnet-description-' + uuid.uuid4().hex,
'tags': [],
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -1486,7 +1473,6 @@ class FakeSubnet(object):
# Set attributes with special mappings in OpenStack SDK.
subnet.is_dhcp_enabled = subnet_attrs['enable_dhcp']
subnet.subnet_pool_id = subnet_attrs['subnetpool_id']
- subnet.project_id = subnet_attrs['tenant_id']
return subnet
@@ -1552,10 +1538,11 @@ class FakeFloatingIP(object):
'floating_network_id': 'network-id-' + uuid.uuid4().hex,
'router_id': 'router-id-' + uuid.uuid4().hex,
'port_id': 'port-id-' + uuid.uuid4().hex,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'description': 'floating-ip-description-' + uuid.uuid4().hex,
'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
'tags': [],
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -1566,9 +1553,6 @@ class FakeFloatingIP(object):
loaded=True
)
- # Set attributes with special mappings in OpenStack SDK.
- floating_ip.project_id = floating_ip_attrs['tenant_id']
-
return floating_ip
@staticmethod
@@ -1619,8 +1603,9 @@ class FakeNetworkMeter(object):
'id': 'meter-id-' + uuid.uuid4().hex,
'name': 'meter-name-' + uuid.uuid4().hex,
'description': 'meter-description-' + uuid.uuid4().hex,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
- 'shared': False
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
+ 'shared': False,
+ 'location': 'MUNCHMUNCHMUNCH',
}
meter_attrs.update(attrs)
@@ -1629,8 +1614,6 @@ class FakeNetworkMeter(object):
info=copy.deepcopy(meter_attrs),
loaded=True)
- meter.project_id = meter_attrs['tenant_id']
-
return meter
@staticmethod
@@ -1668,7 +1651,8 @@ class FakeNetworkMeterRule(object):
'remote_ip_prefix': '10.0.0.0/24',
'source_ip_prefix': '8.8.8.8/32',
'destination_ip_prefix': '10.0.0.0/24',
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
+ 'location': 'MUNCHMUNCHMUNCH',
}
meter_rule_attrs.update(attrs)
@@ -1677,8 +1661,6 @@ class FakeNetworkMeterRule(object):
info=copy.deepcopy(meter_rule_attrs),
loaded=True)
- meter_rule.project_id = meter_rule_attrs['tenant_id']
-
return meter_rule
@staticmethod
@@ -1721,7 +1703,7 @@ class FakeSubnetPool(object):
'prefixes': ['10.0.0.0/24', '10.1.0.0/24'],
'default_prefixlen': '8',
'address_scope_id': 'address-scope-id-' + uuid.uuid4().hex,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'is_default': False,
'shared': False,
'max_prefixlen': '32',
@@ -1730,6 +1712,7 @@ class FakeSubnetPool(object):
'ip_version': '4',
'description': 'subnet-pool-description-' + uuid.uuid4().hex,
'tags': [],
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -1746,7 +1729,6 @@ class FakeSubnetPool(object):
subnet_pool.is_shared = subnet_pool_attrs['shared']
subnet_pool.maximum_prefix_length = subnet_pool_attrs['max_prefixlen']
subnet_pool.minimum_prefix_length = subnet_pool_attrs['min_prefixlen']
- subnet_pool.project_id = subnet_pool_attrs['tenant_id']
return subnet_pool
@@ -1801,6 +1783,7 @@ class FakeNetworkServiceProvider(object):
'name': 'provider-name-' + uuid.uuid4().hex,
'service_type': 'service-type-' + uuid.uuid4().hex,
'default': False,
+ 'location': 'MUNCHMUNCHMUNCH',
}
service_provider.update(attrs)
@@ -1923,6 +1906,7 @@ class FakeFloatingIPPortForwarding(object):
'external_port': randint(1, 65535),
'protocol': 'tcp',
'description': 'some description',
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
@@ -1998,6 +1982,7 @@ class FakeL3ConntrackHelper(object):
'helper': 'tftp',
'protocol': 'tcp',
'port': randint(1, 65535),
+ 'location': 'MUNCHMUNCHMUNCH',
}
# Overwrite default attributes.
diff --git a/openstackclient/tests/unit/network/v2/test_address_group.py b/openstackclient/tests/unit/network/v2/test_address_group.py
index e4fa8ab3..703ab74d 100644
--- a/openstackclient/tests/unit/network/v2/test_address_group.py
+++ b/openstackclient/tests/unit/network/v2/test_address_group.py
@@ -43,7 +43,7 @@ class TestCreateAddressGroup(TestAddressGroup):
new_address_group = (
network_fakes.FakeAddressGroup.create_one_address_group(
attrs={
- 'tenant_id': project.id,
+ 'project_id': project.id,
}
))
columns = (
@@ -99,7 +99,7 @@ class TestCreateAddressGroup(TestAddressGroup):
'addresses': [],
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_all_options(self):
arglist = [
@@ -122,12 +122,12 @@ class TestCreateAddressGroup(TestAddressGroup):
self.network.create_address_group.assert_called_once_with(**{
'addresses': ['10.0.0.1/32'],
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
'name': self.new_address_group.name,
'description': self.new_address_group.description,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestDeleteAddressGroup(TestAddressGroup):
@@ -252,7 +252,7 @@ class TestListAddressGroup(TestAddressGroup):
self.network.address_groups.assert_called_once_with(**{})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_address_group_list_name(self):
arglist = [
@@ -267,7 +267,7 @@ class TestListAddressGroup(TestAddressGroup):
self.network.address_groups.assert_called_once_with(
**{'name': self.address_groups[0].name})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_address_group_list_project(self):
project = identity_fakes_v3.FakeProject.create_one_project()
@@ -284,7 +284,7 @@ class TestListAddressGroup(TestAddressGroup):
self.network.address_groups.assert_called_once_with(
project_id=project.id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_address_group_project_domain(self):
project = identity_fakes_v3.FakeProject.create_one_project()
@@ -302,7 +302,7 @@ class TestListAddressGroup(TestAddressGroup):
self.network.address_groups.assert_called_once_with(
project_id=project.id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
class TestSetAddressGroup(TestAddressGroup):
@@ -438,7 +438,7 @@ class TestShowAddressGroup(TestAddressGroup):
self.network.find_address_group.assert_called_once_with(
self._address_group.name, ignore_missing=False)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
class TestUnsetAddressGroup(TestAddressGroup):
diff --git a/openstackclient/tests/unit/network/v2/test_address_scope.py b/openstackclient/tests/unit/network/v2/test_address_scope.py
index 17f13e83..7e7c4215 100644
--- a/openstackclient/tests/unit/network/v2/test_address_scope.py
+++ b/openstackclient/tests/unit/network/v2/test_address_scope.py
@@ -43,7 +43,7 @@ class TestCreateAddressScope(TestAddressScope):
new_address_scope = (
network_fakes.FakeAddressScope.create_one_address_scope(
attrs={
- 'tenant_id': project.id,
+ 'project_id': project.id,
}
))
columns = (
@@ -122,7 +122,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': self.project.id,
+ 'project_id': self.project.id,
'name': self.new_address_scope.name,
})
self.assertEqual(self.columns, columns)
@@ -318,7 +318,7 @@ class TestListAddressScope(TestAddressScope):
columns, data = self.cmd.take_action(parsed_args)
self.network.address_scopes.assert_called_once_with(
- **{'tenant_id': project.id, 'project_id': project.id})
+ **{'project_id': project.id})
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))
@@ -335,7 +335,7 @@ class TestListAddressScope(TestAddressScope):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': project.id, 'project_id': project.id}
+ filters = {'project_id': project.id}
self.network.address_scopes.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
diff --git a/openstackclient/tests/unit/network/v2/test_floating_ip_network.py b/openstackclient/tests/unit/network/v2/test_floating_ip_network.py
index dbcd5c97..5b5c83a5 100644
--- a/openstackclient/tests/unit/network/v2/test_floating_ip_network.py
+++ b/openstackclient/tests/unit/network/v2/test_floating_ip_network.py
@@ -179,7 +179,7 @@ class TestCreateFloatingIPNetwork(TestFloatingIPNetwork):
self.network.create_ip.assert_called_once_with(**{
'floating_network_id': self.floating_ip.floating_network_id,
- 'tenant_id': project.id,
+ 'project_id': project.id,
})
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
@@ -205,7 +205,7 @@ class TestCreateFloatingIPNetwork(TestFloatingIPNetwork):
self.network.create_ip.assert_called_once_with(**{
'floating_network_id': self.floating_ip.floating_network_id,
- 'tenant_id': project.id,
+ 'project_id': project.id,
})
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
@@ -414,7 +414,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork):
ip.fixed_ip_address,
ip.port_id,
ip.floating_network_id,
- ip.tenant_id,
+ ip.project_id,
))
data_long.append((
ip.id,
@@ -422,7 +422,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork):
ip.fixed_ip_address,
ip.port_id,
ip.floating_network_id,
- ip.tenant_id,
+ ip.project_id,
ip.router_id,
ip.status,
ip.description,
@@ -563,8 +563,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': project.id,
- 'project_id': project.id, }
+ filters = {'project_id': project.id}
self.network.ips.assert_called_once_with(**filters)
@@ -584,8 +583,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': project.id,
- 'project_id': project.id, }
+ filters = {'project_id': project.id}
self.network.ips.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
diff --git a/openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py b/openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py
index 1028c18a..7b9e3aa6 100644
--- a/openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py
+++ b/openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py
@@ -39,7 +39,6 @@ class TestFloatingIPPortForwarding(network_fakes.TestNetworkV2):
class TestCreateFloatingIPPortForwarding(TestFloatingIPPortForwarding):
def setUp(self):
- project_id = ''
super(TestCreateFloatingIPPortForwarding, self).setUp()
self.new_port_forwarding = (
network_fakes.FakeFloatingIPPortForwarding.
@@ -69,7 +68,6 @@ class TestCreateFloatingIPPortForwarding(TestFloatingIPPortForwarding):
'internal_ip_address',
'internal_port',
'internal_port_id',
- 'project_id',
'protocol'
)
@@ -81,7 +79,6 @@ class TestCreateFloatingIPPortForwarding(TestFloatingIPPortForwarding):
self.new_port_forwarding.internal_ip_address,
self.new_port_forwarding.internal_port,
self.new_port_forwarding.internal_port_id,
- project_id,
self.new_port_forwarding.protocol,
)
@@ -446,12 +443,10 @@ class TestShowFloatingIPPortForwarding(TestFloatingIPPortForwarding):
'internal_ip_address',
'internal_port',
'internal_port_id',
- 'project_id',
'protocol',
)
def setUp(self):
- project_id = ''
super(TestShowFloatingIPPortForwarding, self).setUp()
self._port_forwarding = (
network_fakes.FakeFloatingIPPortForwarding.
@@ -469,7 +464,6 @@ class TestShowFloatingIPPortForwarding(TestFloatingIPPortForwarding):
self._port_forwarding.internal_ip_address,
self._port_forwarding.internal_port,
self._port_forwarding.internal_port_id,
- project_id,
self._port_forwarding.protocol,
)
self.network.find_floating_ip_port_forwarding = mock.Mock(
diff --git a/openstackclient/tests/unit/network/v2/test_ip_availability.py b/openstackclient/tests/unit/network/v2/test_ip_availability.py
index ade57837..880cf581 100644
--- a/openstackclient/tests/unit/network/v2/test_ip_availability.py
+++ b/openstackclient/tests/unit/network/v2/test_ip_availability.py
@@ -75,7 +75,7 @@ class TestListIPAvailability(TestIPAvailability):
self.network.network_ip_availabilities.assert_called_once_with(
**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_list_ip_version(self):
arglist = [
@@ -93,7 +93,7 @@ class TestListIPAvailability(TestIPAvailability):
self.network.network_ip_availabilities.assert_called_once_with(
**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_list_project(self):
arglist = [
@@ -106,14 +106,13 @@ class TestListIPAvailability(TestIPAvailability):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': self.project.id,
- 'project_id': self.project.id,
+ filters = {'project_id': self.project.id,
'ip_version': 4}
self.network.network_ip_availabilities.assert_called_once_with(
**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
class TestShowIPAvailability(TestIPAvailability):
@@ -134,7 +133,7 @@ class TestShowIPAvailability(TestIPAvailability):
data = (
_ip_availability.network_id,
_ip_availability.network_name,
- _ip_availability.tenant_id,
+ _ip_availability.project_id,
format_columns.ListDictColumn(
_ip_availability.subnet_ip_availability),
_ip_availability.total_ips,
@@ -176,4 +175,4 @@ class TestShowIPAvailability(TestIPAvailability):
self._ip_availability.network_name,
ignore_missing=False)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
diff --git a/openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py b/openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py
index 1676c9ff..b3d026a7 100644
--- a/openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py
+++ b/openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py
@@ -127,7 +127,7 @@ class TestDeleteL3ConntrackHelper(TestConntrackHelper):
self.ct_helper.id
]
verifylist = [
- ('conntrack_helper_ids', [self.ct_helper.id]),
+ ('conntrack_helper_id', [self.ct_helper.id]),
('router', self.ct_helper.router_id),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -143,7 +143,7 @@ class TestDeleteL3ConntrackHelper(TestConntrackHelper):
self.ct_helper.id
]
verifylist = [
- ('conntrack_helper_ids', [self.ct_helper.id]),
+ ('conntrack_helper_id', [self.ct_helper.id]),
('router', self.router.id),
]
self.network.delete_conntrack_helper.side_effect = Exception(
diff --git a/openstackclient/tests/unit/network/v2/test_network.py b/openstackclient/tests/unit/network/v2/test_network.py
index e29b72c7..2b04edf5 100644
--- a/openstackclient/tests/unit/network/v2/test_network.py
+++ b/openstackclient/tests/unit/network/v2/test_network.py
@@ -48,7 +48,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
# The new network created.
_network = network_fakes.FakeNetwork.create_one_network(
attrs={
- 'tenant_id': project.id,
+ 'project_id': project.id,
'availability_zone_hints': ["nova"],
}
)
@@ -146,7 +146,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
})
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_all_options(self):
arglist = [
@@ -197,8 +197,6 @@ class TestCreateNetworkIdentityV3(TestNetwork):
'shared': True,
'description': self._network.description,
'mtu': self._network.mtu,
- # TODO(dtroyer): Remove tenant_id when we clean up the SDK refactor
- 'tenant_id': self.project.id,
'project_id': self.project.id,
'is_default': True,
'router:external': True,
@@ -211,7 +209,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
'dns_domain': 'example.org.',
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_other_options(self):
arglist = [
@@ -238,7 +236,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
'port_security_enabled': False,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def _test_create_with_tag(self, add_tags=True):
arglist = [self._network.name]
@@ -270,7 +268,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
else:
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_tags(self):
self._test_create_with_tag(add_tags=True)
@@ -284,7 +282,7 @@ 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': project.id}
+ attrs={'project_id': project.id}
)
columns = (
@@ -379,13 +377,11 @@ class TestCreateNetworkIdentityV2(TestNetwork):
self.network.create_network.assert_called_once_with(**{
'admin_state_up': True,
'name': self._network.name,
- # TODO(dtroyer): Remove tenant_id when we clean up the SDK refactor
- 'tenant_id': self.project.id,
'project_id': self.project.id,
})
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_domain_identityv2(self):
arglist = [
@@ -577,7 +573,7 @@ class TestListNetwork(TestNetwork):
self.network.networks.assert_called_once_with()
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_list_external(self):
arglist = [
@@ -598,7 +594,7 @@ class TestListNetwork(TestNetwork):
**{'router:external': True, 'is_router_external': True}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_list_internal(self):
arglist = [
@@ -615,7 +611,7 @@ class TestListNetwork(TestNetwork):
**{'router:external': False, 'is_router_external': False}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_long(self):
arglist = [
@@ -634,7 +630,7 @@ class TestListNetwork(TestNetwork):
self.network.networks.assert_called_once_with()
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, list(data))
+ self.assertCountEqual(self.data_long, list(data))
def test_list_name(self):
test_name = "fakename"
@@ -653,7 +649,7 @@ class TestListNetwork(TestNetwork):
**{'name': test_name}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_enable(self):
arglist = [
@@ -671,7 +667,7 @@ class TestListNetwork(TestNetwork):
**{'admin_state_up': True, 'is_admin_state_up': True}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_disable(self):
arglist = [
@@ -689,7 +685,7 @@ class TestListNetwork(TestNetwork):
**{'admin_state_up': False, 'is_admin_state_up': False}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_project(self):
project = identity_fakes_v3.FakeProject.create_one_project()
@@ -704,11 +700,11 @@ class TestListNetwork(TestNetwork):
columns, data = self.cmd.take_action(parsed_args)
self.network.networks.assert_called_once_with(
- **{'tenant_id': project.id, 'project_id': project.id}
+ **{'project_id': project.id}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_project_domain(self):
project = identity_fakes_v3.FakeProject.create_one_project()
@@ -723,11 +719,11 @@ class TestListNetwork(TestNetwork):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': project.id, 'project_id': project.id}
+ filters = {'project_id': project.id}
self.network.networks.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_share(self):
arglist = [
@@ -744,7 +740,7 @@ class TestListNetwork(TestNetwork):
**{'shared': True, 'is_shared': True}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_no_share(self):
arglist = [
@@ -761,7 +757,7 @@ class TestListNetwork(TestNetwork):
**{'shared': False, 'is_shared': False}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_status(self):
choices = ['ACTIVE', 'BUILD', 'DOWN', 'ERROR']
@@ -780,7 +776,7 @@ class TestListNetwork(TestNetwork):
**{'status': test_status}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_provider_network_type(self):
network_type = self._network[0].provider_network_type
@@ -798,7 +794,7 @@ class TestListNetwork(TestNetwork):
'provider_network_type': network_type}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_provider_physical_network(self):
physical_network = self._network[0].provider_physical_network
@@ -816,7 +812,7 @@ class TestListNetwork(TestNetwork):
'provider_physical_network': physical_network}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_provider_segment(self):
segmentation_id = self._network[0].provider_segmentation_id
@@ -834,7 +830,7 @@ class TestListNetwork(TestNetwork):
'provider_segmentation_id': segmentation_id}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_list_dhcp_agent(self):
arglist = [
@@ -853,7 +849,7 @@ class TestListNetwork(TestNetwork):
*attrs)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(list(data), list(self.data))
+ self.assertCountEqual(list(data), list(self.data))
def test_list_with_tag_options(self):
arglist = [
@@ -878,7 +874,7 @@ class TestListNetwork(TestNetwork):
'not_any_tags': 'black,white'}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
class TestSetNetwork(TestNetwork):
@@ -1111,7 +1107,7 @@ class TestShowNetwork(TestNetwork):
self._network.name, ignore_missing=False)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestUnsetNetwork(TestNetwork):
diff --git a/openstackclient/tests/unit/network/v2/test_network_agent.py b/openstackclient/tests/unit/network/v2/test_network_agent.py
index fceac68e..734a36ee 100644
--- a/openstackclient/tests/unit/network/v2/test_network_agent.py
+++ b/openstackclient/tests/unit/network/v2/test_network_agent.py
@@ -246,7 +246,7 @@ class TestListNetworkAgent(TestNetworkAgent):
self.network.agents.assert_called_once_with(**{})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_agents_list_agent_type(self):
arglist = [
@@ -263,7 +263,7 @@ class TestListNetworkAgent(TestNetworkAgent):
'agent_type': 'DHCP agent',
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_agents_list_host(self):
arglist = [
@@ -280,7 +280,7 @@ class TestListNetworkAgent(TestNetworkAgent):
'host': self.network_agents[0].host,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_agents_list_networks(self):
arglist = [
@@ -298,7 +298,7 @@ class TestListNetworkAgent(TestNetworkAgent):
self.network.network_hosting_dhcp_agents.assert_called_once_with(
*attrs)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_agents_list_routers(self):
arglist = [
@@ -318,7 +318,7 @@ class TestListNetworkAgent(TestNetworkAgent):
*attrs)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_network_agents_list_routers_with_long_option(self):
arglist = [
@@ -343,7 +343,7 @@ class TestListNetworkAgent(TestNetworkAgent):
router_agent_data = [d + ('',) for d in self.data]
self.assertEqual(router_agent_columns, columns)
- self.assertItemsEqual(router_agent_data, list(data))
+ self.assertCountEqual(router_agent_data, list(data))
class TestRemoveNetworkFromAgent(TestNetworkAgent):
@@ -571,4 +571,4 @@ class TestShowNetworkAgent(TestNetworkAgent):
self.network.get_agent.assert_called_once_with(
self._network_agent.id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(list(self.data), list(data))
+ self.assertCountEqual(list(self.data), list(data))
diff --git a/openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py b/openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py
index e9687a70..d77d6894 100644
--- a/openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py
+++ b/openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py
@@ -33,7 +33,7 @@ class TestCreateAutoAllocatedTopology(TestAutoAllocatedTopology):
topology = network_fakes.FakeAutoAllocatedTopology.create_one_topology(
attrs={'id': network_object.id,
- 'tenant_id': project.id}
+ 'project_id': project.id}
)
columns = (
@@ -131,7 +131,7 @@ class TestValidateAutoAllocatedTopology(TestAutoAllocatedTopology):
topology = network_fakes.FakeAutoAllocatedTopology.create_one_topology(
attrs={'id': network_object.id,
- 'tenant_id': project.id}
+ 'project_id': project.id}
)
columns = (
@@ -208,7 +208,7 @@ class TestDeleteAutoAllocatedTopology(TestAutoAllocatedTopology):
topology = network_fakes.FakeAutoAllocatedTopology.create_one_topology(
attrs={'id': network_object.id,
- 'tenant_id': project.id}
+ 'project_id': project.id}
)
def setUp(self):
diff --git a/openstackclient/tests/unit/network/v2/test_network_flavor.py b/openstackclient/tests/unit/network/v2/test_network_flavor.py
index 010f53d3..20c5b9d6 100644
--- a/openstackclient/tests/unit/network/v2/test_network_flavor.py
+++ b/openstackclient/tests/unit/network/v2/test_network_flavor.py
@@ -166,7 +166,7 @@ class TestCreateNetworkFlavor(TestNetworkFlavor):
self.network.create_flavor.assert_called_once_with(**{
'description': self.new_network_flavor.description,
'enabled': True,
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
'service_type': self.new_network_flavor.service_type,
'name': self.new_network_flavor.name,
})
diff --git a/openstackclient/tests/unit/network/v2/test_network_flavor_profile.py b/openstackclient/tests/unit/network/v2/test_network_flavor_profile.py
index fcf24da9..1cbe30ba 100644
--- a/openstackclient/tests/unit/network/v2/test_network_flavor_profile.py
+++ b/openstackclient/tests/unit/network/v2/test_network_flavor_profile.py
@@ -89,7 +89,7 @@ class TestCreateFlavorProfile(TestFlavorProfile):
self.network.create_service_profile.assert_called_once_with(
**{'description': self.new_flavor_profile.description,
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
'enabled': self.new_flavor_profile.enabled,
'driver': self.new_flavor_profile.driver,
'metainfo': self.new_flavor_profile.metainfo}
@@ -119,7 +119,7 @@ class TestCreateFlavorProfile(TestFlavorProfile):
self.network.create_service_profile.assert_called_once_with(
**{'description': self.new_flavor_profile.description,
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
'enabled': self.new_flavor_profile.enabled,
'metainfo': self.new_flavor_profile.metainfo}
)
@@ -148,7 +148,7 @@ class TestCreateFlavorProfile(TestFlavorProfile):
self.network.create_service_profile.assert_called_once_with(
**{'description': self.new_flavor_profile.description,
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
'enabled': self.new_flavor_profile.enabled,
'driver': self.new_flavor_profile.driver,
}
diff --git a/openstackclient/tests/unit/network/v2/test_network_meter.py b/openstackclient/tests/unit/network/v2/test_network_meter.py
index 4fadcfe1..5cedf0f4 100644
--- a/openstackclient/tests/unit/network/v2/test_network_meter.py
+++ b/openstackclient/tests/unit/network/v2/test_network_meter.py
@@ -112,7 +112,7 @@ class TestCreateMeter(TestMeter):
self.network.create_metering_label.assert_called_once_with(
**{'description': self.new_meter.description,
'name': self.new_meter.name,
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
'shared': True, }
)
self.assertEqual(self.columns, columns)
diff --git a/openstackclient/tests/unit/network/v2/test_network_qos_policy.py b/openstackclient/tests/unit/network/v2/test_network_qos_policy.py
index d6a78410..af4cb3fb 100644
--- a/openstackclient/tests/unit/network/v2/test_network_qos_policy.py
+++ b/openstackclient/tests/unit/network/v2/test_network_qos_policy.py
@@ -42,7 +42,7 @@ class TestCreateNetworkQosPolicy(TestQosPolicy):
new_qos_policy = (
network_fakes.FakeNetworkQosPolicy.create_one_qos_policy(
attrs={
- 'tenant_id': project.id,
+ 'project_id': project.id,
}
))
columns = (
@@ -123,7 +123,7 @@ class TestCreateNetworkQosPolicy(TestQosPolicy):
self.network.create_qos_policy.assert_called_once_with(**{
'shared': True,
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
'name': self.new_qos_policy.name,
'description': 'QoS policy description',
'is_default': True,
@@ -325,7 +325,7 @@ class TestListNetworkQosPolicy(TestQosPolicy):
columns, data = self.cmd.take_action(parsed_args)
self.network.qos_policies.assert_called_once_with(
- **{'tenant_id': project.id}
+ **{'project_id': project.id}
)
self.assertEqual(self.columns, columns)
diff --git a/openstackclient/tests/unit/network/v2/test_network_rbac.py b/openstackclient/tests/unit/network/v2/test_network_rbac.py
index 08be64c5..e20efc8b 100644
--- a/openstackclient/tests/unit/network/v2/test_network_rbac.py
+++ b/openstackclient/tests/unit/network/v2/test_network_rbac.py
@@ -45,7 +45,7 @@ class TestCreateNetworkRBAC(TestNetworkRBAC):
ag_object = network_fakes.FakeAddressGroup.create_one_address_group()
project = identity_fakes_v3.FakeProject.create_one_project()
rbac_policy = network_fakes.FakeNetworkRBAC.create_one_network_rbac(
- attrs={'tenant_id': project.id,
+ attrs={'project_id': project.id,
'target_tenant': project.id,
'object_id': network_object.id}
)
@@ -64,7 +64,7 @@ class TestCreateNetworkRBAC(TestNetworkRBAC):
rbac_policy.id,
rbac_policy.object_id,
rbac_policy.object_type,
- rbac_policy.tenant_id,
+ rbac_policy.project_id,
rbac_policy.target_tenant,
]
@@ -206,7 +206,7 @@ class TestCreateNetworkRBAC(TestNetworkRBAC):
'--type', self.rbac_policy.object_type,
'--action', self.rbac_policy.action,
'--target-project', self.rbac_policy.target_tenant,
- '--project', self.rbac_policy.tenant_id,
+ '--project', self.rbac_policy.project_id,
'--project-domain', self.project.domain_id,
'--target-project-domain', self.project.domain_id,
self.rbac_policy.object_id,
@@ -215,7 +215,7 @@ class TestCreateNetworkRBAC(TestNetworkRBAC):
('type', self.rbac_policy.object_type),
('action', self.rbac_policy.action),
('target_project', self.rbac_policy.target_tenant),
- ('project', self.rbac_policy.tenant_id),
+ ('project', self.rbac_policy.project_id),
('project_domain', self.project.domain_id),
('target_project_domain', self.project.domain_id),
('rbac_object', self.rbac_policy.object_id),
@@ -230,7 +230,7 @@ class TestCreateNetworkRBAC(TestNetworkRBAC):
'object_type': self.rbac_policy.object_type,
'action': self.rbac_policy.action,
'target_tenant': self.rbac_policy.target_tenant,
- 'tenant_id': self.rbac_policy.tenant_id,
+ 'project_id': self.rbac_policy.project_id,
})
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))
@@ -276,7 +276,7 @@ class TestCreateNetworkRBAC(TestNetworkRBAC):
self.rbac_policy.id,
obj_fake.id,
obj_type,
- self.rbac_policy.tenant_id,
+ self.rbac_policy.project_id,
self.rbac_policy.target_tenant,
]
self.assertEqual(self.columns, columns)
@@ -541,7 +541,7 @@ class TestShowNetworkRBAC(TestNetworkRBAC):
rbac_policy.id,
rbac_policy.object_id,
rbac_policy.object_type,
- rbac_policy.tenant_id,
+ rbac_policy.project_id,
rbac_policy.target_tenant,
]
diff --git a/openstackclient/tests/unit/network/v2/test_port.py b/openstackclient/tests/unit/network/v2/test_port.py
index 8c5158d7..3c18f362 100644
--- a/openstackclient/tests/unit/network/v2/test_port.py
+++ b/openstackclient/tests/unit/network/v2/test_port.py
@@ -153,7 +153,7 @@ class TestCreatePort(TestPort):
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_full_options(self):
arglist = [
@@ -211,7 +211,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_invalid_json_binding_profile(self):
arglist = [
@@ -262,7 +262,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_security_group(self):
secgroup = network_fakes.FakeSecurityGroup.create_one_security_group()
@@ -291,7 +291,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_port_with_dns_name(self):
arglist = [
@@ -317,7 +317,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_security_groups(self):
sg_1 = network_fakes.FakeSecurityGroup.create_one_security_group()
@@ -347,7 +347,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_no_security_groups(self):
arglist = [
@@ -373,7 +373,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_no_fixed_ips(self):
arglist = [
@@ -399,7 +399,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_port_with_allowed_address_pair_ipaddr(self):
pairs = [{'ip_address': '192.168.1.123'},
@@ -429,7 +429,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_port_with_allowed_address_pair(self):
pairs = [{'ip_address': '192.168.1.123',
@@ -465,7 +465,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_port_with_qos(self):
qos_policy = network_fakes.FakeNetworkQosPolicy.create_one_qos_policy()
@@ -493,7 +493,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_port_security_enabled(self):
arglist = [
@@ -602,7 +602,7 @@ class TestCreatePort(TestPort):
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_tags(self):
self._test_create_with_tag(add_tags=True, add_tags_in_post=True)
@@ -645,7 +645,7 @@ class TestCreatePort(TestPort):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_uplink_status_propagation_enabled(self):
self._test_create_with_uplink_status_propagation(enable=True)
@@ -725,7 +725,7 @@ class TestCreatePort(TestPort):
self.network.create_port.assert_called_once_with(**create_args)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_numa_affinity_policy_required(self):
self._test_create_with_numa_affinity_policy(policy='required')
@@ -764,7 +764,7 @@ class TestCreatePort(TestPort):
}
self.network.create_port.assert_called_once_with(**create_args)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestDeletePort(TestPort):
@@ -919,7 +919,7 @@ class TestListPort(TestPort):
self.network.ports.assert_called_once_with(
fields=LIST_FIELDS_TO_RETRIEVE)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_router_opt(self):
arglist = [
@@ -939,7 +939,7 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
@mock.patch.object(utils, 'find_resource')
def test_port_list_with_server_option(self, mock_find):
@@ -960,7 +960,7 @@ class TestListPort(TestPort):
fields=LIST_FIELDS_TO_RETRIEVE)
mock_find.assert_called_once_with(mock.ANY, 'fake-server-name')
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_device_id_opt(self):
arglist = [
@@ -980,7 +980,7 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_device_owner_opt(self):
arglist = [
@@ -1000,7 +1000,7 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_all_opt(self):
arglist = [
@@ -1029,7 +1029,7 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_mac_address_opt(self):
arglist = [
@@ -1049,7 +1049,7 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_fixed_ip_opt_ip_address(self):
ip_address = self._ports[0].fixed_ips[0]['ip_address']
@@ -1069,7 +1069,7 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_fixed_ip_opt_ip_address_substr(self):
ip_address_ss = self._ports[0].fixed_ips[0]['ip_address'][:-1]
@@ -1089,7 +1089,7 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_fixed_ip_opt_subnet_id(self):
subnet_id = self._ports[0].fixed_ips[0]['subnet_id']
@@ -1111,7 +1111,7 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_fixed_ip_opts(self):
subnet_id = self._ports[0].fixed_ips[0]['subnet_id']
@@ -1137,7 +1137,7 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_fixed_ips(self):
subnet_id = self._ports[0].fixed_ips[0]['subnet_id']
@@ -1165,7 +1165,7 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_list_port_with_long(self):
arglist = [
@@ -1183,7 +1183,7 @@ class TestListPort(TestPort):
self.network.ports.assert_called_once_with(
fields=LIST_FIELDS_TO_RETRIEVE + LIST_FIELDS_TO_RETRIEVE_LONG)
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, list(data))
+ self.assertCountEqual(self.data_long, list(data))
def test_port_list_host(self):
arglist = [
@@ -1202,7 +1202,7 @@ class TestListPort(TestPort):
self.network.ports.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_project(self):
project = identity_fakes.FakeProject.create_one_project()
@@ -1217,14 +1217,13 @@ class TestListPort(TestPort):
columns, data = self.cmd.take_action(parsed_args)
filters = {
- 'tenant_id': project.id,
'project_id': project.id,
'fields': LIST_FIELDS_TO_RETRIEVE,
}
self.network.ports.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_project_domain(self):
project = identity_fakes.FakeProject.create_one_project()
@@ -1241,14 +1240,13 @@ class TestListPort(TestPort):
columns, data = self.cmd.take_action(parsed_args)
filters = {
- 'tenant_id': project.id,
'project_id': project.id,
'fields': LIST_FIELDS_TO_RETRIEVE,
}
self.network.ports.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_port_list_name(self):
test_name = "fakename"
@@ -1268,7 +1266,7 @@ class TestListPort(TestPort):
self.network.ports.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_list_with_tag_options(self):
arglist = [
@@ -1294,7 +1292,27 @@ class TestListPort(TestPort):
'fields': LIST_FIELDS_TO_RETRIEVE}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
+
+ def test_port_list_security_group(self):
+ arglist = [
+ '--security-group', 'sg-id1',
+ '--security-group', 'sg-id2',
+ ]
+ verifylist = [
+ ('security_groups', ['sg-id1', 'sg-id2']),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ filters = {
+ 'security_groups': ['sg-id1', 'sg-id2'],
+ 'fields': LIST_FIELDS_TO_RETRIEVE,
+ }
+
+ self.network.ports.assert_called_once_with(**filters)
+ self.assertEqual(self.columns, columns)
+ self.assertCountEqual(self.data, list(data))
class TestSetPort(TestPort):
@@ -1894,7 +1912,7 @@ class TestShowPort(TestPort):
self._port.name, ignore_missing=False)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestUnsetPort(TestPort):
@@ -1923,6 +1941,7 @@ class TestUnsetPort(TestPort):
'subnet=042eb10a-3a18-4658-ab-cf47c8d03152,ip-address=1.0.0.0',
'--binding-profile', 'Superman',
'--qos-policy',
+ '--host',
self._testport.name,
]
verifylist = [
@@ -1931,6 +1950,7 @@ class TestUnsetPort(TestPort):
'ip-address': '1.0.0.0'}]),
('binding_profile', ['Superman']),
('qos_policy', True),
+ ('host', True)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1941,7 +1961,8 @@ class TestUnsetPort(TestPort):
'subnet_id': '042eb10a-3a18-4658-ab-cf47c8d03152',
'ip_address': '0.0.0.1'}],
'binding:profile': {'batman': 'Joker'},
- 'qos_policy_id': None
+ 'qos_policy_id': None,
+ 'binding:host_id': None
}
self.network.update_port.assert_called_once_with(
self._testport, **attrs)
diff --git a/openstackclient/tests/unit/network/v2/test_router.py b/openstackclient/tests/unit/network/v2/test_router.py
index 323c9198..4d035077 100644
--- a/openstackclient/tests/unit/network/v2/test_router.py
+++ b/openstackclient/tests/unit/network/v2/test_router.py
@@ -141,7 +141,7 @@ class TestCreateRouter(TestRouter):
new_router.ha,
new_router.id,
new_router.name,
- new_router.tenant_id,
+ new_router.project_id,
router.RoutesColumn(new_router.routes),
new_router.status,
format_columns.ListColumn(new_router.tags),
@@ -184,7 +184,44 @@ class TestCreateRouter(TestRouter):
})
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
+
+ def test_create_with_gateway(self):
+ _network = network_fakes.FakeNetwork.create_one_network()
+ _subnet = network_fakes.FakeSubnet.create_one_subnet()
+ self.network.find_network = mock.Mock(return_value=_network)
+ self.network.find_subnet = mock.Mock(return_value=_subnet)
+ arglist = [
+ self.new_router.name,
+ '--external-gateway', _network.name,
+ '--enable-snat',
+ '--fixed-ip', 'ip-address=2001:db8::1'
+ ]
+ verifylist = [
+ ('name', self.new_router.name),
+ ('enable', True),
+ ('distributed', False),
+ ('ha', False),
+ ('external_gateway', _network.name),
+ ('enable_snat', True),
+ ('fixed_ip', [{'ip-address': '2001:db8::1'}]),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = (self.cmd.take_action(parsed_args))
+
+ self.network.create_router.assert_called_once_with(**{
+ 'admin_state_up': True,
+ 'name': self.new_router.name,
+ 'external_gateway_info': {
+ 'network_id': _network.id,
+ 'enable_snat': True,
+ 'external_fixed_ips': [{'ip_address': '2001:db8::1'}],
+ },
+ })
+ self.assertFalse(self.network.set_tags.called)
+ self.assertEqual(self.columns, columns)
+ self.assertCountEqual(self.data, data)
def _test_create_with_ha_options(self, option, ha):
arglist = [
@@ -208,7 +245,7 @@ class TestCreateRouter(TestRouter):
'ha': ha,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_ha_option(self):
self._test_create_with_ha_options('--ha', True)
@@ -237,7 +274,7 @@ class TestCreateRouter(TestRouter):
'distributed': distributed,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_distributed_option(self):
self._test_create_with_distributed_options('--distributed', True)
@@ -268,7 +305,7 @@ class TestCreateRouter(TestRouter):
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def _test_create_with_tag(self, add_tags=True):
arglist = [self.new_router.name]
@@ -301,7 +338,7 @@ class TestCreateRouter(TestRouter):
else:
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_tags(self):
self._test_create_with_tag(add_tags=True)
@@ -423,7 +460,7 @@ class TestListRouter(TestRouter):
r.name,
r.status,
router.AdminStateColumn(r.admin_state_up),
- r.tenant_id,
+ r.project_id,
r.distributed,
r.ha,
))
@@ -494,7 +531,7 @@ class TestListRouter(TestRouter):
self.network.routers.assert_called_once_with()
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_router_list_no_ha_no_distributed(self):
_routers = network_fakes.FakeRouter.create_routers({
@@ -531,7 +568,7 @@ class TestListRouter(TestRouter):
self.network.routers.assert_called_once_with()
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, list(data))
+ self.assertCountEqual(self.data_long, list(data))
def test_router_list_long_no_az(self):
arglist = [
@@ -552,7 +589,7 @@ class TestListRouter(TestRouter):
self.network.routers.assert_called_once_with()
self.assertEqual(self.columns_long_no_az, columns)
- self.assertItemsEqual(self.data_long_no_az, list(data))
+ self.assertCountEqual(self.data_long_no_az, list(data))
def test_list_name(self):
test_name = "fakename"
@@ -570,7 +607,7 @@ class TestListRouter(TestRouter):
**{'name': test_name}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_router_list_enable(self):
arglist = [
@@ -587,7 +624,7 @@ class TestListRouter(TestRouter):
**{'admin_state_up': True, 'is_admin_state_up': True}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_router_list_disable(self):
arglist = [
@@ -605,7 +642,7 @@ class TestListRouter(TestRouter):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_router_list_project(self):
project = identity_fakes_v3.FakeProject.create_one_project()
@@ -619,11 +656,11 @@ class TestListRouter(TestRouter):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': project.id, 'project_id': project.id}
+ filters = {'project_id': project.id}
self.network.routers.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_router_list_project_domain(self):
project = identity_fakes_v3.FakeProject.create_one_project()
@@ -639,11 +676,11 @@ class TestListRouter(TestRouter):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': project.id, 'project_id': project.id}
+ filters = {'project_id': project.id}
self.network.routers.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_router_list_agents_no_args(self):
arglist = [
@@ -671,7 +708,7 @@ class TestListRouter(TestRouter):
self.network.agent_hosted_routers(
*attrs)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_list_with_tag_options(self):
arglist = [
@@ -696,7 +733,7 @@ class TestListRouter(TestRouter):
'not_any_tags': 'black,white'}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
class TestRemovePortFromRouter(TestRouter):
@@ -1364,7 +1401,7 @@ class TestShowRouter(TestRouter):
_router.id,
router.RouterInfoColumn(_router.interfaces_info),
_router.name,
- _router.tenant_id,
+ _router.project_id,
router.RoutesColumn(_router.routes),
_router.status,
format_columns.ListColumn(_router.tags),
@@ -1403,7 +1440,7 @@ class TestShowRouter(TestRouter):
'device_id': self._router.id
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_show_no_ha_no_distributed(self):
_router = network_fakes.FakeRouter.create_one_router({
diff --git a/openstackclient/tests/unit/network/v2/test_security_group_compute.py b/openstackclient/tests/unit/network/v2/test_security_group_compute.py
index 837c9b21..4f1ddce5 100644
--- a/openstackclient/tests/unit/network/v2/test_security_group_compute.py
+++ b/openstackclient/tests/unit/network/v2/test_security_group_compute.py
@@ -88,7 +88,7 @@ class TestCreateSecurityGroupCompute(TestSecurityGroupCompute):
self._security_group['name'],
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_security_group_create_all_options(self, sg_mock):
sg_mock.return_value = self._security_group
@@ -109,7 +109,7 @@ class TestCreateSecurityGroupCompute(TestSecurityGroupCompute):
self._security_group['description'],
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
@mock.patch(
@@ -255,7 +255,7 @@ class TestListSecurityGroupCompute(TestSecurityGroupCompute):
kwargs = {'search_opts': {'all_tenants': False}}
sg_mock.assert_called_once_with(**kwargs)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_security_group_list_all_projects(self, sg_mock):
sg_mock.return_value = self._security_groups
@@ -272,7 +272,7 @@ class TestListSecurityGroupCompute(TestSecurityGroupCompute):
kwargs = {'search_opts': {'all_tenants': True}}
sg_mock.assert_called_once_with(**kwargs)
self.assertEqual(self.columns_all_projects, columns)
- self.assertItemsEqual(self.data_all_projects, list(data))
+ self.assertCountEqual(self.data_all_projects, list(data))
@mock.patch(
@@ -401,4 +401,4 @@ class TestShowSecurityGroupCompute(TestSecurityGroupCompute):
sg_mock.assert_called_once_with(self._security_group['id'])
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
diff --git a/openstackclient/tests/unit/network/v2/test_security_group_network.py b/openstackclient/tests/unit/network/v2/test_security_group_network.py
index fe377785..95262bf1 100644
--- a/openstackclient/tests/unit/network/v2/test_security_group_network.py
+++ b/openstackclient/tests/unit/network/v2/test_security_group_network.py
@@ -96,7 +96,7 @@ class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork):
'name': self._security_group.name,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_all_options(self):
arglist = [
@@ -121,10 +121,10 @@ class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork):
'description': self._security_group.description,
'stateful': self._security_group.stateful,
'name': self._security_group.name,
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def _test_create_with_tag(self, add_tags=True):
arglist = [self._security_group.name]
@@ -155,7 +155,7 @@ class TestCreateSecurityGroupNetwork(TestSecurityGroupNetwork):
else:
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_tags(self):
self._test_create_with_tag(add_tags=True)
@@ -293,7 +293,7 @@ class TestListSecurityGroupNetwork(TestSecurityGroupNetwork):
self.network.security_groups.assert_called_once_with(
fields=security_group.ListSecurityGroup.FIELDS_TO_RETRIEVE)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_security_group_list_all_projects(self):
arglist = [
@@ -309,7 +309,7 @@ class TestListSecurityGroupNetwork(TestSecurityGroupNetwork):
self.network.security_groups.assert_called_once_with(
fields=security_group.ListSecurityGroup.FIELDS_TO_RETRIEVE)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_security_group_list_project(self):
project = identity_fakes.FakeProject.create_one_project()
@@ -324,12 +324,12 @@ class TestListSecurityGroupNetwork(TestSecurityGroupNetwork):
columns, data = self.cmd.take_action(parsed_args)
filters = {
- 'tenant_id': project.id, 'project_id': project.id,
+ 'project_id': project.id,
'fields': security_group.ListSecurityGroup.FIELDS_TO_RETRIEVE}
self.network.security_groups.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_security_group_list_project_domain(self):
project = identity_fakes.FakeProject.create_one_project()
@@ -346,12 +346,12 @@ class TestListSecurityGroupNetwork(TestSecurityGroupNetwork):
columns, data = self.cmd.take_action(parsed_args)
filters = {
- 'tenant_id': project.id, 'project_id': project.id,
+ 'project_id': project.id,
'fields': security_group.ListSecurityGroup.FIELDS_TO_RETRIEVE}
self.network.security_groups.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_list_with_tag_options(self):
arglist = [
@@ -539,7 +539,7 @@ class TestShowSecurityGroupNetwork(TestSecurityGroupNetwork):
self.network.find_security_group.assert_called_once_with(
self._security_group.id, ignore_missing=False)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestUnsetSecurityGroupNetwork(TestSecurityGroupNetwork):
diff --git a/openstackclient/tests/unit/network/v2/test_security_group_rule_network.py b/openstackclient/tests/unit/network/v2/test_security_group_rule_network.py
index bcdb0c26..4e765f3d 100644
--- a/openstackclient/tests/unit/network/v2/test_security_group_rule_network.py
+++ b/openstackclient/tests/unit/network/v2/test_security_group_rule_network.py
@@ -458,7 +458,7 @@ class TestCreateSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork):
'protocol': self._security_group_rule.protocol,
'remote_ip_prefix': self._security_group_rule.remote_ip_prefix,
'security_group_id': self._security_group.id,
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
})
self.assertEqual(self.expected_columns, columns)
self.assertEqual(self.expected_data, data)
diff --git a/openstackclient/tests/unit/network/v2/test_subnet.py b/openstackclient/tests/unit/network/v2/test_subnet.py
index 6085cda8..dcac2ef8 100644
--- a/openstackclient/tests/unit/network/v2/test_subnet.py
+++ b/openstackclient/tests/unit/network/v2/test_subnet.py
@@ -44,7 +44,7 @@ class TestCreateSubnet(TestSubnet):
# An IPv4 subnet to be created with mostly default values
self._subnet = network_fakes.FakeSubnet.create_one_subnet(
attrs={
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
}
)
@@ -55,7 +55,7 @@ class TestCreateSubnet(TestSubnet):
# An IPv4 subnet to be created using a specific subnet pool
self._subnet_from_pool = network_fakes.FakeSubnet.create_one_subnet(
attrs={
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
'subnetpool_id': self._subnet_pool.id,
'dns_nameservers': ['8.8.8.8',
'8.8.4.4'],
@@ -71,7 +71,7 @@ class TestCreateSubnet(TestSubnet):
# An IPv6 subnet to be created with most options specified
self._subnet_ipv6 = network_fakes.FakeSubnet.create_one_subnet(
attrs={
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
'cidr': 'fe80:0:0:a00a::/64',
'enable_dhcp': True,
'dns_nameservers': ['fe80:27ff:a00a:f00f::ffff',
@@ -255,7 +255,7 @@ class TestCreateSubnet(TestSubnet):
})
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_from_subnet_pool_options(self):
# Mock SDK calls for this test.
@@ -317,7 +317,7 @@ class TestCreateSubnet(TestSubnet):
'service_types': self._subnet_from_pool.service_types,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data_subnet_pool, data)
+ self.assertCountEqual(self.data_subnet_pool, data)
def test_create_options_subnet_range_ipv6(self):
# Mock SDK calls for this test.
@@ -390,7 +390,7 @@ class TestCreateSubnet(TestSubnet):
})
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data_ipv6, data)
+ self.assertCountEqual(self.data_ipv6, data)
def test_create_with_network_segment(self):
# Mock SDK calls for this test.
@@ -424,7 +424,7 @@ class TestCreateSubnet(TestSubnet):
})
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_description(self):
# Mock SDK calls for this test.
@@ -458,7 +458,7 @@ class TestCreateSubnet(TestSubnet):
})
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def _test_create_with_dns(self, publish_dns=True):
arglist = [
@@ -490,7 +490,7 @@ class TestCreateSubnet(TestSubnet):
dns_publish_fixed_ip=publish_dns,
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_dns(self):
self._test_create_with_dns(publish_dns=True)
@@ -535,7 +535,7 @@ class TestCreateSubnet(TestSubnet):
else:
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_tags(self):
self._test_create_with_tag(add_tags=True)
@@ -661,7 +661,7 @@ class TestListSubnet(TestSubnet):
subnet.name,
subnet.network_id,
subnet.cidr,
- subnet.tenant_id,
+ subnet.project_id,
subnet.enable_dhcp,
format_columns.ListColumn(subnet.dns_nameservers),
subnet_v2.AllocationPoolsColumn(subnet.allocation_pools),
@@ -691,7 +691,7 @@ class TestListSubnet(TestSubnet):
self.network.subnets.assert_called_once_with()
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_long(self):
arglist = [
@@ -706,7 +706,7 @@ class TestListSubnet(TestSubnet):
self.network.subnets.assert_called_once_with()
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, list(data))
+ self.assertCountEqual(self.data_long, list(data))
def test_subnet_list_ip_version(self):
arglist = [
@@ -722,7 +722,7 @@ class TestListSubnet(TestSubnet):
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_dhcp(self):
arglist = [
@@ -738,7 +738,7 @@ class TestListSubnet(TestSubnet):
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_no_dhcp(self):
arglist = [
@@ -754,7 +754,7 @@ class TestListSubnet(TestSubnet):
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_service_type(self):
arglist = [
@@ -769,7 +769,7 @@ class TestListSubnet(TestSubnet):
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_project(self):
project = identity_fakes_v3.FakeProject.create_one_project()
@@ -783,11 +783,11 @@ class TestListSubnet(TestSubnet):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': project.id, 'project_id': project.id}
+ filters = {'project_id': project.id}
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_service_type_multiple(self):
arglist = [
@@ -805,7 +805,7 @@ class TestListSubnet(TestSubnet):
'network:floatingip_agent_gateway']}
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_project_domain(self):
project = identity_fakes_v3.FakeProject.create_one_project()
@@ -821,11 +821,11 @@ class TestListSubnet(TestSubnet):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': project.id, 'project_id': project.id}
+ filters = {'project_id': project.id}
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_network(self):
network = network_fakes.FakeNetwork.create_one_network()
@@ -843,7 +843,7 @@ class TestListSubnet(TestSubnet):
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_gateway(self):
subnet = network_fakes.FakeSubnet.create_one_subnet()
@@ -861,7 +861,7 @@ class TestListSubnet(TestSubnet):
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_name(self):
subnet = network_fakes.FakeSubnet.create_one_subnet()
@@ -879,7 +879,7 @@ class TestListSubnet(TestSubnet):
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_list_subnet_range(self):
subnet = network_fakes.FakeSubnet.create_one_subnet()
@@ -897,6 +897,48 @@ class TestListSubnet(TestSubnet):
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
+ self.assertCountEqual(self.data, list(data))
+
+ def test_subnet_list_subnetpool_by_name(self):
+ subnet_pool = network_fakes.FakeSubnetPool.create_one_subnet_pool()
+ subnet = network_fakes.FakeSubnet.create_one_subnet(
+ {'subnetpool_id': subnet_pool.id})
+ self.network.find_network = mock.Mock(return_value=subnet)
+ self.network.find_subnet_pool = mock.Mock(return_value=subnet_pool)
+ arglist = [
+ '--subnet-pool', subnet_pool.name,
+ ]
+ verifylist = [
+ ('subnet_pool', subnet_pool.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ filters = {'subnetpool_id': subnet_pool.id}
+
+ self.network.subnets.assert_called_once_with(**filters)
+ self.assertEqual(self.columns, columns)
+ self.assertItemsEqual(self.data, list(data))
+
+ def test_subnet_list_subnetpool_by_id(self):
+ subnet_pool = network_fakes.FakeSubnetPool.create_one_subnet_pool()
+ subnet = network_fakes.FakeSubnet.create_one_subnet(
+ {'subnetpool_id': subnet_pool.id})
+ self.network.find_network = mock.Mock(return_value=subnet)
+ self.network.find_subnet_pool = mock.Mock(return_value=subnet_pool)
+ arglist = [
+ '--subnet-pool', subnet_pool.id,
+ ]
+ verifylist = [
+ ('subnet_pool', subnet_pool.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ filters = {'subnetpool_id': subnet_pool.id}
+
+ self.network.subnets.assert_called_once_with(**filters)
+ self.assertEqual(self.columns, columns)
self.assertItemsEqual(self.data, list(data))
def test_list_with_tag_options(self):
@@ -1205,7 +1247,7 @@ class TestShowSubnet(TestSubnet):
_subnet.ipv6_ra_mode,
_subnet.name,
_subnet.network_id,
- _subnet.tenant_id,
+ _subnet.project_id,
_subnet.segment_id,
format_columns.ListColumn(_subnet.service_types),
_subnet.subnetpool_id,
@@ -1244,7 +1286,7 @@ class TestShowSubnet(TestSubnet):
self._subnet.name, ignore_missing=False)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestUnsetSubnet(TestSubnet):
diff --git a/openstackclient/tests/unit/network/v2/test_subnet_pool.py b/openstackclient/tests/unit/network/v2/test_subnet_pool.py
index 243fc76d..55d2cc29 100644
--- a/openstackclient/tests/unit/network/v2/test_subnet_pool.py
+++ b/openstackclient/tests/unit/network/v2/test_subnet_pool.py
@@ -133,7 +133,7 @@ class TestCreateSubnetPool(TestSubnetPool):
})
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_prefixlen_options(self):
arglist = [
@@ -163,7 +163,7 @@ class TestCreateSubnetPool(TestSubnetPool):
'name': self._subnet_pool.name,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_len_negative(self):
arglist = [
@@ -197,11 +197,11 @@ class TestCreateSubnetPool(TestSubnetPool):
self.network.create_subnet_pool.assert_called_once_with(**{
'prefixes': ['10.0.10.0/24'],
- 'tenant_id': self.project.id,
+ 'project_id': self.project.id,
'name': self._subnet_pool.name,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_address_scope_option(self):
arglist = [
@@ -224,7 +224,7 @@ class TestCreateSubnetPool(TestSubnetPool):
'name': self._subnet_pool.name,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_default_and_shared_options(self):
arglist = [
@@ -250,7 +250,7 @@ class TestCreateSubnetPool(TestSubnetPool):
'shared': True,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_description(self):
arglist = [
@@ -273,7 +273,7 @@ class TestCreateSubnetPool(TestSubnetPool):
'description': self._subnet_pool.description,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_default_quota(self):
arglist = [
@@ -294,7 +294,7 @@ class TestCreateSubnetPool(TestSubnetPool):
'default_quota': 10,
})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def _test_create_with_tag(self, add_tags=True):
arglist = [
@@ -328,7 +328,7 @@ class TestCreateSubnetPool(TestSubnetPool):
else:
self.assertFalse(self.network.set_tags.called)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_create_with_tags(self):
self._test_create_with_tag(add_tags=True)
@@ -476,7 +476,7 @@ class TestListSubnetPool(TestSubnetPool):
self.network.subnet_pools.assert_called_once_with()
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_pool_list_long(self):
arglist = [
@@ -491,7 +491,7 @@ class TestListSubnetPool(TestSubnetPool):
self.network.subnet_pools.assert_called_once_with()
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, list(data))
+ self.assertCountEqual(self.data_long, list(data))
def test_subnet_pool_list_no_share(self):
arglist = [
@@ -507,7 +507,7 @@ class TestListSubnetPool(TestSubnetPool):
self.network.subnet_pools.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_pool_list_share(self):
arglist = [
@@ -523,7 +523,7 @@ class TestListSubnetPool(TestSubnetPool):
self.network.subnet_pools.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_pool_list_no_default(self):
arglist = [
@@ -539,7 +539,7 @@ class TestListSubnetPool(TestSubnetPool):
self.network.subnet_pools.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_pool_list_default(self):
arglist = [
@@ -555,7 +555,7 @@ class TestListSubnetPool(TestSubnetPool):
self.network.subnet_pools.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_pool_list_project(self):
project = identity_fakes_v3.FakeProject.create_one_project()
@@ -569,11 +569,11 @@ class TestListSubnetPool(TestSubnetPool):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': project.id, 'project_id': project.id}
+ filters = {'project_id': project.id}
self.network.subnet_pools.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_pool_list_project_domain(self):
project = identity_fakes_v3.FakeProject.create_one_project()
@@ -589,11 +589,11 @@ class TestListSubnetPool(TestSubnetPool):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- filters = {'tenant_id': project.id, 'project_id': project.id}
+ filters = {'project_id': project.id}
self.network.subnet_pools.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_pool_list_name(self):
subnet_pool = network_fakes.FakeSubnetPool.create_one_subnet_pool()
@@ -611,7 +611,7 @@ class TestListSubnetPool(TestSubnetPool):
self.network.subnet_pools.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_subnet_pool_list_address_scope(self):
addr_scope = network_fakes.FakeAddressScope.create_one_address_scope()
@@ -629,7 +629,7 @@ class TestListSubnetPool(TestSubnetPool):
self.network.subnet_pools.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_list_with_tag_options(self):
arglist = [
@@ -654,7 +654,7 @@ class TestListSubnetPool(TestSubnetPool):
'not_any_tags': 'black,white'}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
class TestSetSubnetPool(TestSubnetPool):
@@ -970,7 +970,7 @@ class TestShowSubnetPool(TestSubnetPool):
_subnet_pool.min_prefixlen,
_subnet_pool.name,
format_columns.ListColumn(_subnet_pool.prefixes),
- _subnet_pool.tenant_id,
+ _subnet_pool.project_id,
_subnet_pool.shared,
format_columns.ListColumn(_subnet_pool.tags),
)
@@ -1008,7 +1008,7 @@ class TestShowSubnetPool(TestSubnetPool):
ignore_missing=False
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestUnsetSubnetPool(TestSubnetPool):
diff --git a/openstackclient/tests/unit/volume/v1/test_qos_specs.py b/openstackclient/tests/unit/volume/v1/test_qos_specs.py
index 5b8e0656..d66a8558 100644
--- a/openstackclient/tests/unit/volume/v1/test_qos_specs.py
+++ b/openstackclient/tests/unit/volume/v1/test_qos_specs.py
@@ -109,7 +109,7 @@ class TestQosCreate(TestQos):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_qos_create_with_consumer(self):
arglist = [
@@ -129,7 +129,7 @@ class TestQosCreate(TestQos):
{'consumer': self.new_qos_spec.consumer}
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_qos_create_with_properties(self):
arglist = [
@@ -155,7 +155,7 @@ class TestQosCreate(TestQos):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
class TestQosDelete(TestQos):
@@ -350,7 +350,7 @@ class TestQosList(TestQos):
self.qos_mock.list.assert_called_with()
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_qos_list_no_association(self):
self.qos_mock.reset_mock()
@@ -377,7 +377,7 @@ class TestQosList(TestQos):
format_columns.ListColumn(None),
format_columns.DictColumn(self.qos_specs[1].specs),
)
- self.assertItemsEqual(ex_data, list(data))
+ self.assertCountEqual(ex_data, list(data))
class TestQosSet(TestQos):
@@ -454,7 +454,7 @@ class TestQosShow(TestQos):
self.qos_spec.name,
format_columns.DictColumn(self.qos_spec.specs),
)
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
class TestQosUnset(TestQos):
diff --git a/openstackclient/tests/unit/volume/v1/test_type.py b/openstackclient/tests/unit/volume/v1/test_type.py
index f3707849..ca74c3e6 100644
--- a/openstackclient/tests/unit/volume/v1/test_type.py
+++ b/openstackclient/tests/unit/volume/v1/test_type.py
@@ -78,7 +78,7 @@ class TestTypeCreate(TestType):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_type_create_with_encryption(self):
encryption_info = {
@@ -140,7 +140,7 @@ class TestTypeCreate(TestType):
body,
)
self.assertEqual(encryption_columns, columns)
- self.assertItemsEqual(encryption_data, data)
+ self.assertCountEqual(encryption_data, data)
class TestTypeDelete(TestType):
@@ -271,7 +271,7 @@ class TestTypeList(TestType):
columns, data = self.cmd.take_action(parsed_args)
self.types_mock.list.assert_called_once_with()
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_type_list_with_options(self):
arglist = [
@@ -285,7 +285,7 @@ class TestTypeList(TestType):
columns, data = self.cmd.take_action(parsed_args)
self.types_mock.list.assert_called_once_with()
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, list(data))
+ self.assertCountEqual(self.data_long, list(data))
def test_type_list_with_encryption(self):
encryption_type = \
@@ -330,7 +330,7 @@ class TestTypeList(TestType):
self.encryption_types_mock.list.assert_called_once_with()
self.types_mock.list.assert_called_once_with()
self.assertEqual(encryption_columns, columns)
- self.assertItemsEqual(encryption_data, list(data))
+ self.assertCountEqual(encryption_data, list(data))
class TestTypeSet(TestType):
@@ -471,7 +471,7 @@ class TestTypeShow(TestType):
self.types_mock.get.assert_called_with(self.volume_type.id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_type_show_with_encryption(self):
encryption_type = \
@@ -516,7 +516,7 @@ class TestTypeShow(TestType):
self.types_mock.get.assert_called_with(self.volume_type.id)
self.encryption_types_mock.get.assert_called_with(self.volume_type.id)
self.assertEqual(encryption_columns, columns)
- self.assertItemsEqual(encryption_data, data)
+ self.assertCountEqual(encryption_data, data)
class TestTypeUnset(TestType):
diff --git a/openstackclient/tests/unit/volume/v1/test_volume.py b/openstackclient/tests/unit/volume/v1/test_volume.py
index 704a66da..702f79ed 100644
--- a/openstackclient/tests/unit/volume/v1/test_volume.py
+++ b/openstackclient/tests/unit/volume/v1/test_volume.py
@@ -135,7 +135,7 @@ class TestVolumeCreate(TestVolume):
None,
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_options(self):
arglist = [
@@ -179,7 +179,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_user_project_id(self):
# Return a project
@@ -226,7 +226,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_user_project_name(self):
# Return a project
@@ -273,7 +273,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_properties(self):
arglist = [
@@ -314,7 +314,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_image_id(self):
image = image_fakes.FakeImage.create_one_image()
@@ -357,7 +357,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_image_name(self):
image = image_fakes.FakeImage.create_one_image()
@@ -400,7 +400,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_with_source(self):
self.volumes_mock.get.return_value = self.new_volume
@@ -430,7 +430,7 @@ class TestVolumeCreate(TestVolume):
None,
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_with_bootable_and_readonly(self):
arglist = [
@@ -468,7 +468,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
self.volumes_mock.set_bootable.assert_called_with(
self.new_volume.id, True)
self.volumes_mock.update_readonly_flag.assert_called_with(
@@ -510,7 +510,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
self.volumes_mock.set_bootable.assert_called_with(
self.new_volume.id, False)
self.volumes_mock.update_readonly_flag.assert_called_with(
@@ -562,7 +562,7 @@ class TestVolumeCreate(TestVolume):
self.assertEqual(2, mock_error.call_count)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
self.volumes_mock.set_bootable.assert_called_with(
self.new_volume.id, True)
self.volumes_mock.update_readonly_flag.assert_called_with(
@@ -765,7 +765,7 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_volume_list_name(self):
arglist = [
@@ -782,7 +782,7 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, tuple(columns))
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_volume_list_status(self):
arglist = [
@@ -799,7 +799,7 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, tuple(columns))
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_volume_list_all_projects(self):
arglist = [
@@ -816,7 +816,7 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, tuple(columns))
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_volume_list_long(self):
arglist = [
@@ -856,11 +856,12 @@ class TestVolumeList(TestVolume):
volume.AttachmentsColumn(self._volume.attachments),
format_columns.DictColumn(self._volume.metadata),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
- def test_volume_list_with_limit(self):
+ def test_volume_list_with_limit_and_offset(self):
arglist = [
'--limit', '2',
+ '--offset', '5',
]
verifylist = [
('long', False),
@@ -868,6 +869,7 @@ class TestVolumeList(TestVolume):
('name', None),
('status', None),
('limit', 2),
+ ('offset', 5),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -876,12 +878,14 @@ class TestVolumeList(TestVolume):
self.volumes_mock.list.assert_called_once_with(
limit=2,
search_opts={
+ 'offset': 5,
'status': None,
'display_name': None,
- 'all_tenants': False, }
+ 'all_tenants': False,
+ },
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, tuple(data))
+ self.assertCountEqual(self.datalist, tuple(data))
def test_volume_list_negative_limit(self):
arglist = [
@@ -1272,7 +1276,7 @@ class TestVolumeShow(TestVolume):
self.volumes_mock.get.assert_called_with(self._volume.id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_show_backward_compatibility(self):
arglist = [
diff --git a/openstackclient/tests/unit/volume/v1/test_volume_backup.py b/openstackclient/tests/unit/volume/v1/test_volume_backup.py
index a7131550..f25a5ffa 100644
--- a/openstackclient/tests/unit/volume/v1/test_volume_backup.py
+++ b/openstackclient/tests/unit/volume/v1/test_volume_backup.py
@@ -100,7 +100,7 @@ class TestBackupCreate(TestBackup):
self.new_backup.description,
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_backup_create_without_name(self):
arglist = [
@@ -124,7 +124,7 @@ class TestBackupCreate(TestBackup):
self.new_backup.description,
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestBackupDelete(TestBackup):
@@ -277,7 +277,7 @@ class TestBackupList(TestBackup):
search_opts=search_opts,
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_backup_list_with_options(self):
arglist = [
@@ -309,7 +309,7 @@ class TestBackupList(TestBackup):
search_opts=search_opts,
)
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, list(data))
+ self.assertCountEqual(self.data_long, list(data))
class TestBackupRestore(TestBackup):
@@ -391,4 +391,4 @@ class TestBackupShow(TestBackup):
self.backups_mock.get.assert_called_with(self.backup.id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
diff --git a/openstackclient/tests/unit/volume/v2/fakes.py b/openstackclient/tests/unit/volume/v2/fakes.py
index b5f66d4b..96e381d3 100644
--- a/openstackclient/tests/unit/volume/v2/fakes.py
+++ b/openstackclient/tests/unit/volume/v2/fakes.py
@@ -18,6 +18,7 @@ from unittest import mock
import uuid
from cinderclient import api_versions
+from openstack.block_storage.v3 import volume
from osc_lib.cli import format_columns
from openstackclient.tests.unit import fakes
@@ -46,7 +47,7 @@ class FakeTransfer(object):
def create_one_transfer(attrs=None):
"""Create a fake transfer.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes of Transfer Request
:return:
A FakeResource object with volume_id, name, id.
@@ -75,7 +76,7 @@ class FakeTransfer(object):
def create_transfers(attrs=None, count=2):
"""Create multiple fake transfers.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes of transfer
:param Integer count:
The number of transfers to be faked
@@ -116,7 +117,7 @@ class FakeTypeAccess(object):
def create_one_type_access(attrs=None):
"""Create a fake volume type access for project.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object, with Volume_type_ID and Project_ID.
@@ -148,7 +149,7 @@ class FakeService(object):
def create_one_service(attrs=None):
"""Create a fake service.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes of service
:return:
A FakeResource object with host, status, etc.
@@ -180,7 +181,7 @@ class FakeService(object):
def create_services(attrs=None, count=2):
"""Create multiple fake services.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes of service
:param Integer count:
The number of services to be faked
@@ -201,7 +202,7 @@ class FakeCapability(object):
def create_one_capability(attrs=None):
"""Create a fake volume backend capability.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes of the Capabilities.
:return:
A FakeResource object with capability name and attrs.
@@ -260,7 +261,7 @@ class FakePool(object):
def create_one_pool(attrs=None):
"""Create a fake pool.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes of the pool
:return:
A FakeResource object with pool name and attrs.
@@ -362,7 +363,7 @@ class FakeVolume(object):
def create_one_volume(attrs=None):
"""Create a fake volume.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes of volume
:return:
A FakeResource object with id, name, status, etc.
@@ -405,7 +406,7 @@ class FakeVolume(object):
def create_volumes(attrs=None, count=2):
"""Create multiple fake volumes.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes of volume
:param Integer count:
The number of volumes to be faked
@@ -419,6 +420,61 @@ class FakeVolume(object):
return volumes
@staticmethod
+ def create_one_sdk_volume(attrs=None):
+ """Create a fake volume.
+
+ :param dict attrs:
+ A dictionary with all attributes of volume
+ :return:
+ A FakeResource object with id, name, status, etc.
+ """
+ attrs = attrs or {}
+
+ # Set default attribute
+ volume_info = {
+ 'id': 'volume-id' + uuid.uuid4().hex,
+ 'name': 'volume-name' + uuid.uuid4().hex,
+ 'description': 'description' + uuid.uuid4().hex,
+ 'status': random.choice(['available', 'in_use']),
+ 'size': random.randint(1, 20),
+ 'volume_type':
+ random.choice(['fake_lvmdriver-1', 'fake_lvmdriver-2']),
+ 'bootable':
+ random.choice(['true', 'false']),
+ 'metadata': {
+ 'key' + uuid.uuid4().hex: 'val' + uuid.uuid4().hex,
+ 'key' + uuid.uuid4().hex: 'val' + uuid.uuid4().hex,
+ 'key' + uuid.uuid4().hex: 'val' + uuid.uuid4().hex},
+ 'snapshot_id': random.randint(1, 5),
+ 'availability_zone': 'zone' + uuid.uuid4().hex,
+ 'attachments': [{
+ 'device': '/dev/' + uuid.uuid4().hex,
+ 'server_id': uuid.uuid4().hex,
+ }, ],
+ }
+
+ # Overwrite default attributes if there are some attributes set
+ volume_info.update(attrs)
+ return volume.Volume(**volume_info)
+
+ @staticmethod
+ def create_sdk_volumes(attrs=None, count=2):
+ """Create multiple fake volumes.
+
+ :param dict attrs:
+ A dictionary with all attributes of volume
+ :param Integer count:
+ The number of volumes to be faked
+ :return:
+ A list of FakeResource objects
+ """
+ volumes = []
+ for n in range(0, count):
+ volumes.append(FakeVolume.create_one_sdk_volume(attrs))
+
+ return volumes
+
+ @staticmethod
def get_volumes(volumes=None, count=2):
"""Get an iterable MagicMock object with a list of faked volumes.
@@ -484,7 +540,7 @@ class FakeAvailabilityZone(object):
def create_one_availability_zone(attrs=None):
"""Create a fake AZ.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with zoneName, zoneState, etc.
@@ -509,7 +565,7 @@ class FakeAvailabilityZone(object):
def create_availability_zones(attrs=None, count=2):
"""Create multiple fake AZs.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of AZs to fake
@@ -532,7 +588,7 @@ class FakeBackup(object):
def create_one_backup(attrs=None):
"""Create a fake backup.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with id, name, volume_id, etc.
@@ -565,7 +621,7 @@ class FakeBackup(object):
def create_backups(attrs=None, count=2):
"""Create multiple fake backups.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of backups to fake
@@ -636,7 +692,7 @@ class FakeConsistencyGroup(object):
def create_one_consistency_group(attrs=None):
"""Create a fake consistency group.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with id, name, description, etc.
@@ -666,7 +722,7 @@ class FakeConsistencyGroup(object):
def create_consistency_groups(attrs=None, count=2):
"""Create multiple fake consistency groups.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of consistency groups to fake
@@ -713,7 +769,7 @@ class FakeConsistencyGroupSnapshot(object):
def create_one_consistency_group_snapshot(attrs=None):
"""Create a fake consistency group snapshot.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with id, name, description, etc.
@@ -742,7 +798,7 @@ class FakeConsistencyGroupSnapshot(object):
def create_consistency_group_snapshots(attrs=None, count=2):
"""Create multiple fake consistency group snapshots.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of consistency group snapshots to fake
@@ -789,7 +845,7 @@ class FakeExtension(object):
def create_one_extension(attrs=None):
"""Create a fake extension.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with name, namespace, etc.
@@ -825,7 +881,7 @@ class FakeQos(object):
def create_one_qos(attrs=None):
"""Create a fake Qos specification.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with id, name, consumer, etc.
@@ -852,7 +908,7 @@ class FakeQos(object):
def create_one_qos_association(attrs=None):
"""Create a fake Qos specification association.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with id, name, association_type, etc.
@@ -878,7 +934,7 @@ class FakeQos(object):
def create_qoses(attrs=None, count=2):
"""Create multiple fake Qos specifications.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of Qos specifications to fake
@@ -920,7 +976,7 @@ class FakeSnapshot(object):
def create_one_snapshot(attrs=None):
"""Create a fake snapshot.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with id, name, description, etc.
@@ -951,7 +1007,7 @@ class FakeSnapshot(object):
def create_snapshots(attrs=None, count=2):
"""Create multiple fake snapshots.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of snapshots to fake
@@ -993,9 +1049,9 @@ class FakeVolumeType(object):
def create_one_volume_type(attrs=None, methods=None):
"""Create a fake volume type.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
- :param Dictionary methods:
+ :param dict methods:
A dictionary with all methods
:return:
A FakeResource object with id, name, description, etc.
@@ -1025,7 +1081,7 @@ class FakeVolumeType(object):
def create_volume_types(attrs=None, count=2):
"""Create multiple fake volume_types.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:param int count:
The number of types to fake
@@ -1063,7 +1119,7 @@ class FakeVolumeType(object):
def create_one_encryption_volume_type(attrs=None):
"""Create a fake encryption volume type.
- :param Dictionary attrs:
+ :param dict attrs:
A dictionary with all attributes
:return:
A FakeResource object with volume_type_id etc.
diff --git a/openstackclient/tests/unit/volume/v2/test_consistency_group.py b/openstackclient/tests/unit/volume/v2/test_consistency_group.py
index dcdd9bc8..434d0cf9 100644
--- a/openstackclient/tests/unit/volume/v2/test_consistency_group.py
+++ b/openstackclient/tests/unit/volume/v2/test_consistency_group.py
@@ -251,7 +251,7 @@ class TestConsistencyGroupCreate(TestConsistencyGroup):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_consistency_group_create_from_source(self):
arglist = [
@@ -279,7 +279,7 @@ class TestConsistencyGroupCreate(TestConsistencyGroup):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_consistency_group_create_from_snapshot(self):
arglist = [
@@ -307,7 +307,7 @@ class TestConsistencyGroupCreate(TestConsistencyGroup):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestConsistencyGroupDelete(TestConsistencyGroup):
@@ -463,7 +463,7 @@ class TestConsistencyGroupList(TestConsistencyGroup):
self.consistencygroups_mock.list.assert_called_once_with(
detailed=True, search_opts={'all_tenants': False})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_consistency_group_list_with_all_project(self):
arglist = [
@@ -480,7 +480,7 @@ class TestConsistencyGroupList(TestConsistencyGroup):
self.consistencygroups_mock.list.assert_called_once_with(
detailed=True, search_opts={'all_tenants': True})
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_consistency_group_list_with_long(self):
arglist = [
@@ -497,7 +497,7 @@ class TestConsistencyGroupList(TestConsistencyGroup):
self.consistencygroups_mock.list.assert_called_once_with(
detailed=True, search_opts={'all_tenants': False})
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, list(data))
+ self.assertCountEqual(self.data_long, list(data))
class TestConsistencyGroupRemoveVolume(TestConsistencyGroup):
@@ -705,4 +705,4 @@ class TestConsistencyGroupShow(TestConsistencyGroup):
self.consistencygroups_mock.get.assert_called_once_with(
self.consistency_group.id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
diff --git a/openstackclient/tests/unit/volume/v2/test_qos_specs.py b/openstackclient/tests/unit/volume/v2/test_qos_specs.py
index a29080d1..41c18014 100644
--- a/openstackclient/tests/unit/volume/v2/test_qos_specs.py
+++ b/openstackclient/tests/unit/volume/v2/test_qos_specs.py
@@ -112,7 +112,7 @@ class TestQosCreate(TestQos):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_qos_create_with_consumer(self):
arglist = [
@@ -133,7 +133,7 @@ class TestQosCreate(TestQos):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_qos_create_with_properties(self):
arglist = [
@@ -159,7 +159,7 @@ class TestQosCreate(TestQos):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestQosDelete(TestQos):
@@ -342,7 +342,7 @@ class TestQosList(TestQos):
self.qos_mock.list.assert_called_with()
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_qos_list_no_association(self):
self.qos_mock.reset_mock()
@@ -369,7 +369,7 @@ class TestQosList(TestQos):
format_columns.ListColumn(None),
format_columns.DictColumn(self.qos_specs[1].specs),
)
- self.assertItemsEqual(ex_data, list(data))
+ self.assertCountEqual(ex_data, list(data))
class TestQosSet(TestQos):
@@ -449,7 +449,7 @@ class TestQosShow(TestQos):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, tuple(data))
+ self.assertCountEqual(self.data, tuple(data))
class TestQosUnset(TestQos):
diff --git a/openstackclient/tests/unit/volume/v2/test_type.py b/openstackclient/tests/unit/volume/v2/test_type.py
index d1cbda2f..d94dc1e0 100644
--- a/openstackclient/tests/unit/volume/v2/test_type.py
+++ b/openstackclient/tests/unit/volume/v2/test_type.py
@@ -94,7 +94,7 @@ class TestTypeCreate(TestType):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_type_create_private(self):
arglist = [
@@ -120,7 +120,7 @@ class TestTypeCreate(TestType):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_public_type_create_with_project(self):
arglist = [
@@ -198,7 +198,7 @@ class TestTypeCreate(TestType):
body,
)
self.assertEqual(encryption_columns, columns)
- self.assertItemsEqual(encryption_data, data)
+ self.assertCountEqual(encryption_data, data)
class TestTypeDelete(TestType):
@@ -332,7 +332,7 @@ class TestTypeList(TestType):
columns, data = self.cmd.take_action(parsed_args)
self.types_mock.list.assert_called_once_with(is_public=None)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_type_list_with_options(self):
arglist = [
@@ -350,7 +350,7 @@ class TestTypeList(TestType):
columns, data = self.cmd.take_action(parsed_args)
self.types_mock.list.assert_called_once_with(is_public=True)
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, list(data))
+ self.assertCountEqual(self.data_long, list(data))
def test_type_list_with_private_option(self):
arglist = [
@@ -367,7 +367,7 @@ class TestTypeList(TestType):
columns, data = self.cmd.take_action(parsed_args)
self.types_mock.list.assert_called_once_with(is_public=False)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_type_list_with_default_option(self):
arglist = [
@@ -385,7 +385,7 @@ class TestTypeList(TestType):
columns, data = self.cmd.take_action(parsed_args)
self.types_mock.default.assert_called_once_with()
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data_with_default_type, list(data))
+ self.assertCountEqual(self.data_with_default_type, list(data))
def test_type_list_with_encryption(self):
encryption_type = \
@@ -430,7 +430,7 @@ class TestTypeList(TestType):
self.encryption_types_mock.list.assert_called_once_with()
self.types_mock.list.assert_called_once_with(is_public=None)
self.assertEqual(encryption_columns, columns)
- self.assertItemsEqual(encryption_data, list(data))
+ self.assertCountEqual(encryption_data, list(data))
class TestTypeSet(TestType):
@@ -716,7 +716,7 @@ class TestTypeShow(TestType):
self.types_mock.get.assert_called_with(self.volume_type.id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
def test_type_show_with_access(self):
arglist = [
@@ -749,7 +749,7 @@ class TestTypeShow(TestType):
private_type.name,
format_columns.DictColumn(private_type.extra_specs)
)
- self.assertItemsEqual(private_type_data, data)
+ self.assertCountEqual(private_type_data, data)
def test_type_show_with_list_access_exec(self):
arglist = [
@@ -781,7 +781,7 @@ class TestTypeShow(TestType):
private_type.name,
format_columns.DictColumn(private_type.extra_specs)
)
- self.assertItemsEqual(private_type_data, data)
+ self.assertCountEqual(private_type_data, data)
def test_type_show_with_encryption(self):
encryption_type = \
@@ -828,7 +828,7 @@ class TestTypeShow(TestType):
self.types_mock.get.assert_called_with(self.volume_type.id)
self.encryption_types_mock.get.assert_called_with(self.volume_type.id)
self.assertEqual(encryption_columns, columns)
- self.assertItemsEqual(encryption_data, data)
+ self.assertCountEqual(encryption_data, data)
class TestTypeUnset(TestType):
diff --git a/openstackclient/tests/unit/volume/v2/test_volume.py b/openstackclient/tests/unit/volume/v2/test_volume.py
index 377f7ec4..4aa6f906 100644
--- a/openstackclient/tests/unit/volume/v2/test_volume.py
+++ b/openstackclient/tests/unit/volume/v2/test_volume.py
@@ -136,7 +136,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_options(self):
consistency_group = (
@@ -182,7 +182,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_properties(self):
arglist = [
@@ -218,7 +218,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_image_id(self):
image = image_fakes.FakeImage.create_one_image()
@@ -256,7 +256,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_image_name(self):
image = image_fakes.FakeImage.create_one_image()
@@ -294,7 +294,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_with_snapshot(self):
snapshot = volume_fakes.FakeSnapshot.create_one_snapshot()
@@ -331,7 +331,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
def test_volume_create_with_bootable_and_readonly(self):
arglist = [
@@ -369,7 +369,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
self.volumes_mock.set_bootable.assert_called_with(
self.new_volume.id, True)
self.volumes_mock.update_readonly_flag.assert_called_with(
@@ -411,7 +411,7 @@ class TestVolumeCreate(TestVolume):
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
self.volumes_mock.set_bootable.assert_called_with(
self.new_volume.id, False)
self.volumes_mock.update_readonly_flag.assert_called_with(
@@ -463,7 +463,7 @@ class TestVolumeCreate(TestVolume):
self.assertEqual(2, mock_error.call_count)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.datalist, data)
+ self.assertCountEqual(self.datalist, data)
self.volumes_mock.set_bootable.assert_called_with(
self.new_volume.id, True)
self.volumes_mock.update_readonly_flag.assert_called_with(
@@ -680,7 +680,7 @@ class TestVolumeList(TestVolume):
self.mock_volume.size,
volume.AttachmentsColumn(self.mock_volume.attachments),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_volume_list_project(self):
arglist = [
@@ -720,7 +720,7 @@ class TestVolumeList(TestVolume):
self.mock_volume.size,
volume.AttachmentsColumn(self.mock_volume.attachments),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_volume_list_project_domain(self):
arglist = [
@@ -762,7 +762,7 @@ class TestVolumeList(TestVolume):
self.mock_volume.size,
volume.AttachmentsColumn(self.mock_volume.attachments),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_volume_list_user(self):
arglist = [
@@ -801,7 +801,7 @@ class TestVolumeList(TestVolume):
self.mock_volume.size,
volume.AttachmentsColumn(self.mock_volume.attachments),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_volume_list_user_domain(self):
arglist = [
@@ -843,7 +843,7 @@ class TestVolumeList(TestVolume):
self.mock_volume.size,
volume.AttachmentsColumn(self.mock_volume.attachments),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_volume_list_name(self):
arglist = [
@@ -883,7 +883,7 @@ class TestVolumeList(TestVolume):
self.mock_volume.size,
volume.AttachmentsColumn(self.mock_volume.attachments),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_volume_list_status(self):
arglist = [
@@ -923,7 +923,7 @@ class TestVolumeList(TestVolume):
self.mock_volume.size,
volume.AttachmentsColumn(self.mock_volume.attachments),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_volume_list_all_projects(self):
arglist = [
@@ -963,7 +963,7 @@ class TestVolumeList(TestVolume):
self.mock_volume.size,
volume.AttachmentsColumn(self.mock_volume.attachments),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_volume_list_long(self):
arglist = [
@@ -1017,7 +1017,7 @@ class TestVolumeList(TestVolume):
volume.AttachmentsColumn(self.mock_volume.attachments),
format_columns.DictColumn(self.mock_volume.metadata),
), )
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_volume_list_with_marker_and_limit(self):
arglist = [
@@ -1056,7 +1056,7 @@ class TestVolumeList(TestVolume):
'name': None,
'all_tenants': False, }
)
- self.assertItemsEqual(datalist, tuple(data))
+ self.assertCountEqual(datalist, tuple(data))
def test_volume_list_negative_limit(self):
arglist = [
@@ -1450,7 +1450,7 @@ class TestVolumeShow(TestVolume):
volume_fakes.FakeVolume.get_volume_columns(self._volume),
columns)
- self.assertItemsEqual(
+ self.assertCountEqual(
volume_fakes.FakeVolume.get_volume_data(self._volume),
data)
diff --git a/openstackclient/tests/unit/volume/v2/test_volume_backup.py b/openstackclient/tests/unit/volume/v2/test_volume_backup.py
index 5d57bf60..4b9212d0 100644
--- a/openstackclient/tests/unit/volume/v2/test_volume_backup.py
+++ b/openstackclient/tests/unit/volume/v2/test_volume_backup.py
@@ -412,7 +412,7 @@ class TestBackupList(TestBackup):
limit=None,
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_backup_list_with_options(self):
arglist = [
@@ -451,7 +451,7 @@ class TestBackupList(TestBackup):
limit=3,
)
self.assertEqual(self.columns_long, columns)
- self.assertItemsEqual(self.data_long, list(data))
+ self.assertCountEqual(self.data_long, list(data))
class TestBackupRestore(TestBackup):
diff --git a/openstackclient/tests/unit/volume/v2/test_volume_snapshot.py b/openstackclient/tests/unit/volume/v2/test_volume_snapshot.py
index 3830f458..33a5a98a 100644
--- a/openstackclient/tests/unit/volume/v2/test_volume_snapshot.py
+++ b/openstackclient/tests/unit/volume/v2/test_volume_snapshot.py
@@ -707,7 +707,7 @@ class TestVolumeSnapshotShow(TestVolumeSnapshot):
self.snapshots_mock.get.assert_called_with(self.snapshot.id)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, data)
+ self.assertCountEqual(self.data, data)
class TestVolumeSnapshotUnset(TestVolumeSnapshot):
diff --git a/openstackclient/tests/unit/volume/v2/test_transfer_request.py b/openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py
index c9dce3ca..1a1f220f 100644
--- a/openstackclient/tests/unit/volume/v2/test_transfer_request.py
+++ b/openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py
@@ -15,6 +15,7 @@
from unittest import mock
from unittest.mock import call
+from cinderclient import api_versions
from osc_lib import exceptions
from osc_lib import utils
@@ -172,6 +173,51 @@ class TestTransferCreate(TestTransfer):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
+ def test_transfer_create_with_no_snapshots(self):
+ self.app.client_manager.volume.api_version = \
+ api_versions.APIVersion('3.55')
+
+ arglist = [
+ '--no-snapshots',
+ self.volume.id,
+ ]
+ verifylist = [
+ ('name', None),
+ ('snapshots', False),
+ ('volume', self.volume.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.transfer_mock.create.assert_called_once_with(
+ self.volume.id, None, no_snapshots=True)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
+
+ def test_transfer_create_pre_v355(self):
+ self.app.client_manager.volume.api_version = \
+ api_versions.APIVersion('3.54')
+
+ arglist = [
+ '--no-snapshots',
+ self.volume.id,
+ ]
+ verifylist = [
+ ('name', None),
+ ('snapshots', False),
+ ('volume', self.volume.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ exc = self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+ self.assertIn(
+ '--os-volume-api-version 3.55 or greater is required',
+ str(exc))
+
class TestTransferDelete(TestTransfer):
diff --git a/openstackclient/tests/unit/volume/v3/test_volume_message.py b/openstackclient/tests/unit/volume/v3/test_volume_message.py
index 68becf44..8cabc0c3 100644
--- a/openstackclient/tests/unit/volume/v3/test_volume_message.py
+++ b/openstackclient/tests/unit/volume/v3/test_volume_message.py
@@ -198,7 +198,7 @@ class TestVolumeMessageList(TestVolumeMessage):
limit=None,
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_message_list_with_options(self):
self.app.client_manager.volume.api_version = \
@@ -227,7 +227,7 @@ class TestVolumeMessageList(TestVolumeMessage):
limit=3,
)
self.assertEqual(self.columns, columns)
- self.assertItemsEqual(self.data, list(data))
+ self.assertCountEqual(self.data, list(data))
def test_message_list_pre_v33(self):
self.app.client_manager.volume.api_version = \