From 874519e980b75aa7a659cef7757a154ddd10e3fb Mon Sep 17 00:00:00 2001 From: Stephen Finucane <sfinucan@redhat.com> Date: Tue, 8 Nov 2022 10:56:26 +0000 Subject: [PATCH] tests: Convert compute tests to use 'parse_output' Change-Id: Ib5b2f46639f14877a9ec295b26cae01a05395d4d Signed-off-by: Stephen Finucane <sfinucan@redhat.com> --- .../tests/functional/compute/v2/common.py | 43 +- .../functional/compute/v2/test_aggregate.py | 88 +-- .../functional/compute/v2/test_flavor.py | 114 ++-- .../functional/compute/v2/test_keypair.py | 8 +- .../functional/compute/v2/test_server.py | 554 ++++++++++-------- .../compute/v2/test_server_event.py | 44 +- .../compute/v2/test_server_group.py | 55 +- 7 files changed, 503 insertions(+), 403 deletions(-) diff --git a/openstackclient/tests/functional/compute/v2/common.py b/openstackclient/tests/functional/compute/v2/common.py index 851664c842..7eca4603b4 100644 --- a/openstackclient/tests/functional/compute/v2/common.py +++ b/openstackclient/tests/functional/compute/v2/common.py @@ -11,7 +11,6 @@ # under the License. # -import json import time import uuid @@ -38,9 +37,7 @@ class ComputeTestCase(base.TestCase): def get_flavor(cls): # NOTE(rtheis): Get cirros256 or m1.tiny flavors since functional # tests may create other flavors. - flavors = json.loads(cls.openstack( - "flavor list -f json " - )) + flavors = cls.openstack("flavor list", parse_output=True) server_flavor = None for flavor in flavors: if flavor['Name'] in ['m1.tiny', 'cirros256']: @@ -53,9 +50,7 @@ class ComputeTestCase(base.TestCase): # NOTE(rtheis): Get first Cirros image since functional tests may # create other images. Image may be named '-uec' or # '-disk'. - images = json.loads(cls.openstack( - "image list -f json " - )) + images = cls.openstack("image list", parse_output=True) server_image = None for image in images: if (image['Name'].startswith('cirros-') and @@ -70,9 +65,10 @@ class ComputeTestCase(base.TestCase): try: # NOTE(rtheis): Get private network since functional tests may # create other networks. - cmd_output = json.loads(cls.openstack( - 'network show private -f json' - )) + cmd_output = cls.openstack( + 'network show private', + parse_output=True, + ) except exceptions.CommandFailed: return '' return '--nic net-id=' + cmd_output['id'] @@ -86,14 +82,15 @@ class ComputeTestCase(base.TestCase): if not self.network_arg: self.network_arg = self.get_network() name = name or uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'server create -f json ' + + cmd_output = self.openstack( + 'server create ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + self.network_arg + ' ' + '--wait ' + - name - )) + name, + parse_output=True, + ) self.assertIsNotNone(cmd_output["id"]) self.assertEqual( name, @@ -120,10 +117,11 @@ class ComputeTestCase(base.TestCase): failures = ['ERROR'] total_sleep = 0 while total_sleep < wait: - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - name - )) + cmd_output = self.openstack( + 'server show ' + + name, + parse_output=True, + ) status = cmd_output['status'] if status == expected_status: print('Server {} now has status {}'.format( @@ -135,10 +133,11 @@ class ComputeTestCase(base.TestCase): time.sleep(interval) total_sleep += interval - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - name - )) + cmd_output = self.openstack( + 'server show ' + + name, + parse_output=True, + ) status = cmd_output['status'] self.assertEqual(status, expected_status) # give it a little bit more time diff --git a/openstackclient/tests/functional/compute/v2/test_aggregate.py b/openstackclient/tests/functional/compute/v2/test_aggregate.py index 1de5309921..80750faf58 100644 --- a/openstackclient/tests/functional/compute/v2/test_aggregate.py +++ b/openstackclient/tests/functional/compute/v2/test_aggregate.py @@ -10,7 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -import json import uuid from openstackclient.tests.functional import base @@ -27,12 +26,13 @@ class AggregateTests(base.TestCase): 'aggregate delete ' + name1, fail_ok=True, ) - cmd_output = json.loads(self.openstack( - 'aggregate create -f json ' + + cmd_output = self.openstack( + 'aggregate create ' + '--zone nova ' + '--property a=b ' + - name1 - )) + name1, + parse_output=True, + ) self.assertEqual( name1, cmd_output['name'] @@ -45,8 +45,10 @@ class AggregateTests(base.TestCase): 'a', cmd_output['properties'] ) - cmd_output = json.loads(self.openstack( - 'aggregate show -f json ' + name1)) + cmd_output = self.openstack( + 'aggregate show ' + name1, + parse_output=True, + ) self.assertEqual(name1, cmd_output['name']) name2 = uuid.uuid4().hex @@ -55,11 +57,12 @@ class AggregateTests(base.TestCase): 'aggregate delete ' + name2, fail_ok=True, ) - cmd_output = json.loads(self.openstack( - 'aggregate create -f json ' + + cmd_output = self.openstack( + 'aggregate create ' + '--zone external ' + - name2 - )) + name2, + parse_output=True, + ) self.assertEqual( name2, cmd_output['name'] @@ -68,8 +71,10 @@ class AggregateTests(base.TestCase): 'external', cmd_output['availability_zone'] ) - cmd_output = json.loads(self.openstack( - 'aggregate show -f json ' + name2)) + cmd_output = self.openstack( + 'aggregate show ' + name2, + parse_output=True, + ) self.assertEqual(name2, cmd_output['name']) # Test aggregate set @@ -89,10 +94,11 @@ class AggregateTests(base.TestCase): ) self.assertOutput('', raw_output) - cmd_output = json.loads(self.openstack( - 'aggregate show -f json ' + - name3 - )) + cmd_output = self.openstack( + 'aggregate show ' + + name3, + parse_output=True, + ) self.assertEqual( name3, cmd_output['name'] @@ -111,9 +117,10 @@ class AggregateTests(base.TestCase): ) # Test aggregate list - cmd_output = json.loads(self.openstack( - 'aggregate list -f json' - )) + cmd_output = self.openstack( + 'aggregate list', + parse_output=True, + ) names = [x['Name'] for x in cmd_output] self.assertIn(name3, names) self.assertIn(name2, names) @@ -122,9 +129,10 @@ class AggregateTests(base.TestCase): self.assertIn('internal', zones) # Test aggregate list --long - cmd_output = json.loads(self.openstack( - 'aggregate list --long -f json' - )) + cmd_output = self.openstack( + 'aggregate list --long', + parse_output=True, + ) names = [x['Name'] for x in cmd_output] self.assertIn(name3, names) self.assertIn(name2, names) @@ -143,10 +151,11 @@ class AggregateTests(base.TestCase): ) self.assertOutput('', raw_output) - cmd_output = json.loads(self.openstack( - 'aggregate show -f json ' + - name3 - )) + cmd_output = self.openstack( + 'aggregate show ' + + name3, + parse_output=True, + ) self.assertNotIn( "c='d'", cmd_output['properties'] @@ -163,9 +172,10 @@ class AggregateTests(base.TestCase): def test_aggregate_add_and_remove_host(self): """Test aggregate add and remove host""" # Get a host - cmd_output = json.loads(self.openstack( - 'host list -f json' - )) + cmd_output = self.openstack( + 'host list', + parse_output=True, + ) host_name = cmd_output[0]['Host Name'] # NOTE(dtroyer): Cells v1 is not operable with aggregates. Hostnames @@ -181,22 +191,24 @@ class AggregateTests(base.TestCase): ) # Test add host - cmd_output = json.loads(self.openstack( - 'aggregate add host -f json ' + + cmd_output = self.openstack( + 'aggregate add host ' + name + ' ' + - host_name - )) + host_name, + parse_output=True, + ) self.assertIn( host_name, cmd_output['hosts'] ) # Test remove host - cmd_output = json.loads(self.openstack( - 'aggregate remove host -f json ' + + cmd_output = self.openstack( + 'aggregate remove host ' + name + ' ' + - host_name - )) + host_name, + parse_output=True, + ) self.assertNotIn( host_name, cmd_output['hosts'] diff --git a/openstackclient/tests/functional/compute/v2/test_flavor.py b/openstackclient/tests/functional/compute/v2/test_flavor.py index 162d428789..98bf1ca5ed 100644 --- a/openstackclient/tests/functional/compute/v2/test_flavor.py +++ b/openstackclient/tests/functional/compute/v2/test_flavor.py @@ -10,7 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -import json import uuid from openstackclient.tests.functional import base @@ -25,9 +24,10 @@ class FlavorTests(base.TestCase): def setUpClass(cls): super(FlavorTests, cls).setUpClass() # Make a project - cmd_output = json.loads(cls.openstack( - "project create -f json --enable " + cls.PROJECT_NAME - )) + cmd_output = cls.openstack( + "project create --enable " + cls.PROJECT_NAME, + parse_output=True, + ) cls.project_id = cmd_output["id"] @classmethod @@ -41,22 +41,24 @@ class FlavorTests(base.TestCase): def test_flavor_delete(self): """Test create w/project, delete multiple""" name1 = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - "flavor create -f json " + + cmd_output = self.openstack( + "flavor create " + "--project " + self.PROJECT_NAME + " " + "--private " + - name1 - )) + name1, + parse_output=True, + ) self.assertIsNotNone(cmd_output["id"]) name2 = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - "flavor create -f json " + + cmd_output = self.openstack( + "flavor create " + "--id qaz " + "--project " + self.PROJECT_NAME + " " + "--private " + - name2 - )) + name2, + parse_output=True, + ) self.assertIsNotNone(cmd_output["id"]) self.assertEqual( "qaz", @@ -71,12 +73,13 @@ class FlavorTests(base.TestCase): def test_flavor_list(self): """Test create defaults, list filters, delete""" name1 = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - "flavor create -f json " + + cmd_output = self.openstack( + "flavor create " + "--property a=b " + "--property c=d " + - name1 - )) + name1, + parse_output=True, + ) self.addCleanup(self.openstack, "flavor delete " + name1) self.assertIsNotNone(cmd_output["id"]) self.assertEqual( @@ -85,15 +88,16 @@ class FlavorTests(base.TestCase): ) name2 = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - "flavor create -f json " + + cmd_output = self.openstack( + "flavor create " + "--id qaz " + "--ram 123 " + "--private " + "--property a=b2 " + "--property b=d2 " + - name2 - )) + name2, + parse_output=True, + ) self.addCleanup(self.openstack, "flavor delete " + name2) self.assertIsNotNone(cmd_output["id"]) self.assertEqual( @@ -121,18 +125,20 @@ class FlavorTests(base.TestCase): ) # Test list - cmd_output = json.loads(self.openstack( - "flavor list -f json" - )) + cmd_output = self.openstack( + "flavor list", + parse_output=True, + ) col_name = [x["Name"] for x in cmd_output] self.assertIn(name1, col_name) self.assertNotIn(name2, col_name) # Test list --long - cmd_output = json.loads(self.openstack( - "flavor list -f json " + - "--long" - )) + cmd_output = self.openstack( + "flavor list " + + "--long", + parse_output=True, + ) # We have list of complex json objects # Iterate through the list setting flags found_expected = False @@ -147,28 +153,31 @@ class FlavorTests(base.TestCase): self.assertTrue(found_expected) # Test list --public - cmd_output = json.loads(self.openstack( - "flavor list -f json " + - "--public" - )) + cmd_output = self.openstack( + "flavor list " + + "--public", + parse_output=True, + ) col_name = [x["Name"] for x in cmd_output] self.assertIn(name1, col_name) self.assertNotIn(name2, col_name) # Test list --private - cmd_output = json.loads(self.openstack( - "flavor list -f json " + - "--private" - )) + cmd_output = self.openstack( + "flavor list " + + "--private", + parse_output=True, + ) col_name = [x["Name"] for x in cmd_output] self.assertNotIn(name1, col_name) self.assertIn(name2, col_name) # Test list --all - cmd_output = json.loads(self.openstack( - "flavor list -f json " + - "--all" - )) + cmd_output = self.openstack( + "flavor list " + + "--all", + parse_output=True, + ) col_name = [x["Name"] for x in cmd_output] self.assertIn(name1, col_name) self.assertIn(name2, col_name) @@ -176,16 +185,17 @@ class FlavorTests(base.TestCase): def test_flavor_properties(self): """Test create defaults, list filters, delete""" name1 = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - "flavor create -f json " + + cmd_output = self.openstack( + "flavor create " + "--id qaz " + "--ram 123 " + "--disk 20 " + "--private " + "--property a=first " + "--property b=second " + - name1 - )) + name1, + parse_output=True, + ) self.addCleanup(self.openstack, "flavor delete " + name1) self.assertIsNotNone(cmd_output["id"]) self.assertEqual( @@ -220,10 +230,11 @@ class FlavorTests(base.TestCase): ) self.assertEqual('', raw_output) - cmd_output = json.loads(self.openstack( - "flavor show -f json " + - name1 - )) + cmd_output = self.openstack( + "flavor show " + + name1, + parse_output=True, + ) self.assertEqual( "qaz", cmd_output["id"], @@ -245,9 +256,10 @@ class FlavorTests(base.TestCase): ) self.assertEqual('', raw_output) - cmd_output = json.loads(self.openstack( - "flavor show -f json " + - name1 - )) + cmd_output = self.openstack( + "flavor show " + + name1, + parse_output=True, + ) self.assertNotIn('b', cmd_output['properties']) diff --git a/openstackclient/tests/functional/compute/v2/test_keypair.py b/openstackclient/tests/functional/compute/v2/test_keypair.py index 42f334a46a..828d5dad18 100644 --- a/openstackclient/tests/functional/compute/v2/test_keypair.py +++ b/openstackclient/tests/functional/compute/v2/test_keypair.py @@ -10,7 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -import json import tempfile from tempest.lib.common.utils import data_utils @@ -109,9 +108,10 @@ class KeypairTests(KeypairBase): 2) Delete keypair """ with tempfile.NamedTemporaryFile(mode='w+') as f: - cmd_output = json.loads(self.openstack( - 'keypair create -f json --private-key %s tmpkey' % f.name, - )) + cmd_output = self.openstack( + 'keypair create --private-key %s tmpkey' % f.name, + parse_output=True, + ) self.addCleanup(self.openstack, 'keypair delete tmpkey') self.assertEqual('tmpkey', cmd_output.get('name')) self.assertIsNotNone(cmd_output.get('user_id')) diff --git a/openstackclient/tests/functional/compute/v2/test_server.py b/openstackclient/tests/functional/compute/v2/test_server.py index 0558ef6213..9c21dada68 100644 --- a/openstackclient/tests/functional/compute/v2/test_server.py +++ b/openstackclient/tests/functional/compute/v2/test_server.py @@ -11,7 +11,6 @@ # under the License. import itertools -import json import time import uuid @@ -39,9 +38,10 @@ class ServerTests(common.ComputeTestCase): self.wait_for_status(name1, "ACTIVE") self.wait_for_status(name2, "ACTIVE") - cmd_output = json.loads(self.openstack( - 'server list -f json' - )) + cmd_output = self.openstack( + 'server list', + parse_output=True, + ) col_name = [x["Name"] for x in cmd_output] self.assertIn(name1, col_name) self.assertIn(name2, col_name) @@ -50,17 +50,19 @@ class ServerTests(common.ComputeTestCase): raw_output = self.openstack('server pause ' + name2) self.assertEqual("", raw_output) self.wait_for_status(name2, "PAUSED") - cmd_output = json.loads(self.openstack( - 'server list -f json ' + - '--status ACTIVE' - )) + cmd_output = self.openstack( + 'server list ' + + '--status ACTIVE', + parse_output=True, + ) col_name = [x["Name"] for x in cmd_output] self.assertIn(name1, col_name) self.assertNotIn(name2, col_name) - cmd_output = json.loads(self.openstack( - 'server list -f json ' + - '--status PAUSED' - )) + cmd_output = self.openstack( + 'server list ' + + '--status PAUSED', + parse_output=True, + ) col_name = [x["Name"] for x in cmd_output] self.assertNotIn(name1, col_name) self.assertIn(name2, col_name) @@ -76,16 +78,18 @@ class ServerTests(common.ComputeTestCase): self.wait_for_status(name2, "ACTIVE") # Test list --marker with ID - cmd_output = json.loads(self.openstack( - 'server list -f json --marker ' + id2 - )) + cmd_output = self.openstack( + 'server list --marker ' + id2, + parse_output=True, + ) col_name = [x["Name"] for x in cmd_output] self.assertIn(name1, col_name) # Test list --marker with Name - cmd_output = json.loads(self.openstack( - 'server list -f json --marker ' + name2 - )) + cmd_output = self.openstack( + 'server list --marker ' + name2, + parse_output=True, + ) col_name = [x["Name"] for x in cmd_output] self.assertIn(name1, col_name) @@ -93,17 +97,19 @@ class ServerTests(common.ComputeTestCase): self.openstack('server delete --wait ' + name2) # Test list --deleted --marker with ID - cmd_output = json.loads(self.openstack( - 'server list -f json --deleted --marker ' + id2 - )) + cmd_output = self.openstack( + 'server list --deleted --marker ' + id2, + parse_output=True, + ) col_name = [x["Name"] for x in cmd_output] self.assertIn(name1, col_name) # Test list --deleted --marker with Name try: - cmd_output = json.loads(self.openstack( - 'server list -f json --deleted --marker ' + name2 - )) + cmd_output = self.openstack( + 'server list --deleted --marker ' + name2, + parse_output=True, + ) except exceptions.CommandFailed as e: self.assertIn('marker [%s] not found (HTTP 400)' % (name2), e.stderr.decode('utf-8')) @@ -124,11 +130,12 @@ class ServerTests(common.ComputeTestCase): cmd_output = self.server_create() server_name3 = cmd_output['name'] - cmd_output = json.loads(self.openstack( + cmd_output = self.openstack( '--os-compute-api-version 2.66 ' + - 'server list -f json ' - '--changes-before ' + updated_at2 - )) + 'server list ' + '--changes-before ' + updated_at2, + parse_output=True, + ) col_updated = [server["Name"] for server in cmd_output] self.assertIn(server_name1, col_updated) @@ -149,10 +156,11 @@ class ServerTests(common.ComputeTestCase): cmd_output = self.server_create() server_name3 = cmd_output['name'] - cmd_output = json.loads(self.openstack( - 'server list -f json ' - '--changes-since ' + updated_at2 - )) + cmd_output = self.openstack( + 'server list ' + '--changes-since ' + updated_at2, + parse_output=True, + ) col_updated = [server["Name"] for server in cmd_output] self.assertNotIn(server_name1, col_updated) @@ -174,12 +182,13 @@ class ServerTests(common.ComputeTestCase): server_name3 = cmd_output['name'] updated_at3 = cmd_output['updated'] - cmd_output = json.loads(self.openstack( + cmd_output = self.openstack( '--os-compute-api-version 2.66 ' + - 'server list -f json ' + + 'server list ' + '--changes-since ' + updated_at2 + - ' --changes-before ' + updated_at3 - )) + ' --changes-before ' + updated_at3, + parse_output=True, + ) col_updated = [server["Name"] for server in cmd_output] self.assertNotIn(server_name1, col_updated) @@ -193,10 +202,11 @@ class ServerTests(common.ComputeTestCase): # self.wait_for_status(name, "ACTIVE") # Have a look at some other fields - flavor = json.loads(self.openstack( - 'flavor show -f json ' + - self.flavor_name - )) + flavor = self.openstack( + 'flavor show ' + + self.flavor_name, + parse_output=True, + ) self.assertEqual( self.flavor_name, flavor['name'], @@ -205,10 +215,11 @@ class ServerTests(common.ComputeTestCase): '%s (%s)' % (flavor['name'], flavor['id']), cmd_output["flavor"], ) - image = json.loads(self.openstack( - 'image show -f json ' + - self.image_name - )) + image = self.openstack( + 'image show ' + + self.image_name, + parse_output=True, + ) self.assertEqual( self.image_name, image['name'], @@ -226,10 +237,11 @@ class ServerTests(common.ComputeTestCase): ) self.assertOutput('', raw_output) - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - name - )) + cmd_output = self.openstack( + 'server show ' + + name, + parse_output=True, + ) # Really, shouldn't this be a list? self.assertEqual( {'a': 'b', 'c': 'd'}, @@ -241,10 +253,11 @@ class ServerTests(common.ComputeTestCase): '--property a ' + name ) - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - name - )) + cmd_output = self.openstack( + 'server show ' + + name, + parse_output=True, + ) self.assertEqual( {'c': 'd'}, cmd_output['properties'], @@ -258,10 +271,11 @@ class ServerTests(common.ComputeTestCase): name ) self.assertOutput("", raw_output) - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - new_name - )) + cmd_output = self.openstack( + 'server show ' + + new_name, + parse_output=True, + ) self.assertEqual( new_name, cmd_output["name"], @@ -360,10 +374,11 @@ class ServerTests(common.ComputeTestCase): self.wait_for_status(name, "ACTIVE") # attach ip - cmd_output = json.loads(self.openstack( - 'floating ip create -f json ' + - 'public' - )) + cmd_output = self.openstack( + 'floating ip create ' + + 'public', + parse_output=True, + ) # Look for Neutron value first, then nova-net floating_ip = cmd_output.get( @@ -392,10 +407,11 @@ class ServerTests(common.ComputeTestCase): # racy we shouldn't have to wait too long, a minute seems reasonable wait_time = 0 while wait_time < 60: - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - name - )) + cmd_output = self.openstack( + 'server show ' + + name, + parse_output=True, + ) if floating_ip not in _chain_addresses(cmd_output['addresses']): # Hang out for a bit and try again print('retrying floating IP check') @@ -422,10 +438,11 @@ class ServerTests(common.ComputeTestCase): # racy we shouldn't have to wait too long, a minute seems reasonable wait_time = 0 while wait_time < 60: - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - name - )) + cmd_output = self.openstack( + 'server show ' + + name, + parse_output=True, + ) if floating_ip in _chain_addresses(cmd_output['addresses']): # Hang out for a bit and try again print('retrying floating IP check') @@ -434,10 +451,11 @@ class ServerTests(common.ComputeTestCase): else: break - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - name - )) + cmd_output = self.openstack( + 'server show ' + + name, + parse_output=True, + ) self.assertNotIn( floating_ip, _chain_addresses(cmd_output['addresses']), @@ -459,10 +477,11 @@ class ServerTests(common.ComputeTestCase): volume_wait_for = volume_common.BaseVolumeTests.wait_for_status # get image size - cmd_output = json.loads(self.openstack( - 'image show -f json ' + - self.image_name - )) + cmd_output = self.openstack( + 'image show ' + + self.image_name, + parse_output=True, + ) try: image_size = cmd_output['min_disk'] if image_size < 1: @@ -472,12 +491,13 @@ class ServerTests(common.ComputeTestCase): # create volume from image volume_name = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'volume create -f json ' + + cmd_output = self.openstack( + 'volume create ' + '--image ' + self.image_name + ' ' + '--size ' + str(image_size) + ' ' + - volume_name - )) + volume_name, + parse_output=True, + ) self.assertIsNotNone(cmd_output["id"]) self.addCleanup(self.openstack, 'volume delete ' + volume_name) self.assertEqual( @@ -488,11 +508,12 @@ class ServerTests(common.ComputeTestCase): # create empty volume empty_volume_name = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'volume create -f json ' + + cmd_output = self.openstack( + 'volume create ' + '--size ' + str(image_size) + ' ' + - empty_volume_name - )) + empty_volume_name, + parse_output=True, + ) self.assertIsNotNone(cmd_output["id"]) self.addCleanup(self.openstack, 'volume delete ' + empty_volume_name) self.assertEqual( @@ -503,15 +524,16 @@ class ServerTests(common.ComputeTestCase): # create server server_name = uuid.uuid4().hex - server = json.loads(self.openstack( - 'server create -f json ' + + server = self.openstack( + 'server create ' + '--flavor ' + self.flavor_name + ' ' + '--volume ' + volume_name + ' ' + '--block-device-mapping vdb=' + empty_volume_name + ' ' + self.network_arg + ' ' + '--wait ' + - server_name - )) + server_name, + parse_output=True, + ) self.assertIsNotNone(server["id"]) self.addCleanup(self.openstack, 'server delete --wait ' + server_name) self.assertEqual( @@ -525,19 +547,21 @@ class ServerTests(common.ComputeTestCase): server['image'], ) # check server list too - servers = json.loads(self.openstack( - 'server list -f json' - )) + servers = self.openstack( + 'server list', + parse_output=True, + ) self.assertEqual( v2_server.IMAGE_STRING_FOR_BFV, servers[0]['Image'] ) # check volumes - cmd_output = json.loads(self.openstack( - 'volume show -f json ' + - volume_name - )) + cmd_output = self.openstack( + 'volume show ' + + volume_name, + parse_output=True, + ) attachments = cmd_output['attachments'] self.assertEqual( 1, @@ -556,10 +580,11 @@ class ServerTests(common.ComputeTestCase): # --block-device-mapping was ignored if --volume # present on the command line. Now we should see the # attachment. - cmd_output = json.loads(self.openstack( - 'volume show -f json ' + - empty_volume_name - )) + cmd_output = self.openstack( + 'volume show ' + + empty_volume_name, + parse_output=True, + ) attachments = cmd_output['attachments'] self.assertEqual( 1, @@ -581,11 +606,12 @@ class ServerTests(common.ComputeTestCase): # create source empty volume volume_name = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'volume create -f json ' + + cmd_output = self.openstack( + 'volume create ' + '--size 1 ' + - volume_name - )) + volume_name, + parse_output=True, + ) volume_id = cmd_output["id"] self.assertIsNotNone(volume_id) self.addCleanup(self.openstack, 'volume delete ' + volume_name) @@ -603,15 +629,16 @@ class ServerTests(common.ComputeTestCase): # create server server_name = uuid.uuid4().hex - server = json.loads(self.openstack( - 'server create -f json ' + + server = self.openstack( + 'server create ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + bdm_arg + ' ' + self.network_arg + ' ' + '--wait ' + - server_name - )) + server_name, + parse_output=True, + ) self.assertIsNotNone(server["id"]) self.addCleanup(self.openstack, 'server delete --wait ' + server_name) self.assertEqual( @@ -621,18 +648,20 @@ class ServerTests(common.ComputeTestCase): # check server volumes_attached, format is # {"volumes_attached": "id='2518bc76-bf0b-476e-ad6b-571973745bb5'",} - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - server_name - )) + cmd_output = self.openstack( + 'server show ' + + server_name, + parse_output=True, + ) volumes_attached = cmd_output['volumes_attached'] self.assertIsNotNone(volumes_attached) # check volumes - cmd_output = json.loads(self.openstack( - 'volume show -f json ' + - volume_name - )) + cmd_output = self.openstack( + 'volume show ' + + volume_name, + parse_output=True, + ) attachments = cmd_output['attachments'] self.assertEqual( 1, @@ -665,11 +694,12 @@ class ServerTests(common.ComputeTestCase): # create source empty volume empty_volume_name = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'volume create -f json ' + + cmd_output = self.openstack( + 'volume create ' + '--size 1 ' + - empty_volume_name - )) + empty_volume_name, + parse_output=True, + ) self.assertIsNotNone(cmd_output["id"]) self.addCleanup(self.openstack, 'volume delete ' + empty_volume_name) self.assertEqual(empty_volume_name, cmd_output['name']) @@ -677,11 +707,12 @@ class ServerTests(common.ComputeTestCase): # create snapshot of source empty volume empty_snapshot_name = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'volume snapshot create -f json ' + + cmd_output = self.openstack( + 'volume snapshot create ' + '--volume ' + empty_volume_name + ' ' + - empty_snapshot_name - )) + empty_snapshot_name, + parse_output=True, + ) empty_snapshot_id = cmd_output["id"] self.assertIsNotNone(empty_snapshot_id) # Deleting volume snapshot take time, so we need to wait until the @@ -712,15 +743,16 @@ class ServerTests(common.ComputeTestCase): # create server with bdm snapshot server_name = uuid.uuid4().hex - server = json.loads(self.openstack( - 'server create -f json ' + + server = self.openstack( + 'server create ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + bdm_arg + ' ' + self.network_arg + ' ' + '--wait ' + - server_name - )) + server_name, + parse_output=True, + ) self.assertIsNotNone(server["id"]) self.assertEqual( server_name, @@ -730,19 +762,21 @@ class ServerTests(common.ComputeTestCase): # check server volumes_attached, format is # {"volumes_attached": "id='2518bc76-bf0b-476e-ad6b-571973745bb5'",} - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - server_name - )) + cmd_output = self.openstack( + 'server show ' + + server_name, + parse_output=True, + ) volumes_attached = cmd_output['volumes_attached'] self.assertIsNotNone(volumes_attached) attached_volume_id = volumes_attached[0]["id"] # check the volume that attached on server - cmd_output = json.loads(self.openstack( - 'volume show -f json ' + - attached_volume_id - )) + cmd_output = self.openstack( + 'volume show ' + + attached_volume_id, + parse_output=True, + ) attachments = cmd_output['attachments'] self.assertEqual( 1, @@ -760,9 +794,10 @@ class ServerTests(common.ComputeTestCase): # delete server, then check the attached volume had been deleted, # <delete-on-terminate>=true self.openstack('server delete --wait ' + server_name) - cmd_output = json.loads(self.openstack( - 'volume list -f json' - )) + cmd_output = self.openstack( + 'volume list', + parse_output=True, + ) target_volume = [each_volume for each_volume in cmd_output if each_volume['ID'] == attached_volume_id] @@ -801,10 +836,11 @@ class ServerTests(common.ComputeTestCase): ) else: # get image ID - cmd_output = json.loads(self.openstack( - 'image show -f json ' + - self.image_name - )) + cmd_output = self.openstack( + 'image show ' + + self.image_name, + parse_output=True, + ) image_id = cmd_output['id'] # This means create a 1GB volume from the specified image, attach @@ -824,15 +860,16 @@ class ServerTests(common.ComputeTestCase): # as expected where nova creates a volume from the image and attaches # that volume to the server. server_name = uuid.uuid4().hex - server = json.loads(self.openstack( - 'server create -f json ' + + server = self.openstack( + 'server create ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + bdm_arg + ' ' + self.network_arg + ' ' + '--wait ' + - server_name - )) + server_name, + parse_output=True, + ) self.assertIsNotNone(server["id"]) self.assertEqual( server_name, @@ -842,19 +879,21 @@ class ServerTests(common.ComputeTestCase): # check server volumes_attached, format is # {"volumes_attached": "id='2518bc76-bf0b-476e-ad6b-571973745bb5'",} - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - server_name - )) + cmd_output = self.openstack( + 'server show ' + + server_name, + parse_output=True, + ) volumes_attached = cmd_output['volumes_attached'] self.assertIsNotNone(volumes_attached) attached_volume_id = volumes_attached[0]["id"] # check the volume that attached on server - cmd_output = json.loads(self.openstack( - 'volume show -f json ' + - attached_volume_id - )) + cmd_output = self.openstack( + 'volume show ' + + attached_volume_id, + parse_output=True, + ) attachments = cmd_output['attachments'] self.assertEqual( 1, @@ -879,9 +918,10 @@ class ServerTests(common.ComputeTestCase): # delete server, then check the attached volume has been deleted self.openstack('server delete --wait ' + server_name) - cmd_output = json.loads(self.openstack( - 'volume list -f json' - )) + cmd_output = self.openstack( + 'volume list', + parse_output=True, + ) target_volume = [each_volume for each_volume in cmd_output if each_volume['ID'] == attached_volume_id] @@ -906,15 +946,16 @@ class ServerTests(common.ComputeTestCase): # using the provided image, attach it as the root disk for the server # and not delete the volume when the server is deleted. server_name = uuid.uuid4().hex - server = json.loads(self.openstack( - 'server create -f json ' + + server = self.openstack( + 'server create ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + '--boot-from-volume 1 ' + # create a 1GB volume from the image self.network_arg + ' ' + '--wait ' + - server_name - )) + server_name, + parse_output=True, + ) self.assertIsNotNone(server["id"]) self.assertEqual( server_name, @@ -924,10 +965,11 @@ class ServerTests(common.ComputeTestCase): # check server volumes_attached, format is # {"volumes_attached": "id='2518bc76-bf0b-476e-ad6b-571973745bb5'",} - cmd_output = json.loads(self.openstack( - 'server show -f json ' + - server_name - )) + cmd_output = self.openstack( + 'server show ' + + server_name, + parse_output=True, + ) volumes_attached = cmd_output['volumes_attached'] self.assertIsNotNone(volumes_attached) attached_volume_id = volumes_attached[0]["id"] @@ -941,10 +983,11 @@ class ServerTests(common.ComputeTestCase): self.assertEqual(v2_server.IMAGE_STRING_FOR_BFV, cmd_output['image']) # check the volume that attached on server - cmd_output = json.loads(self.openstack( - 'volume show -f json ' + - volumes_attached[0]["id"] - )) + cmd_output = self.openstack( + 'volume show ' + + volumes_attached[0]["id"], + parse_output=True, + ) # The volume size should be what we specified on the command line. self.assertEqual(1, int(cmd_output['size'])) attachments = cmd_output['attachments'] @@ -971,32 +1014,35 @@ class ServerTests(common.ComputeTestCase): # delete server, then check the attached volume was not deleted self.openstack('server delete --wait ' + server_name) - cmd_output = json.loads(self.openstack( - 'volume show -f json ' + - attached_volume_id - )) + cmd_output = self.openstack( + 'volume show ' + + attached_volume_id, + parse_output=True, + ) # check the volume is in 'available' status self.assertEqual('available', cmd_output['status']) def test_server_create_with_none_network(self): """Test server create with none network option.""" server_name = uuid.uuid4().hex - server = json.loads(self.openstack( + server = self.openstack( # auto/none enable in nova micro version (v2.37+) '--os-compute-api-version 2.37 ' + - 'server create -f json ' + + 'server create ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + '--nic none ' + - server_name - )) + server_name, + parse_output=True, + ) self.assertIsNotNone(server["id"]) self.addCleanup(self.openstack, 'server delete --wait ' + server_name) self.assertEqual(server_name, server['name']) self.wait_for_status(server_name, "ACTIVE") - server = json.loads(self.openstack( - 'server show -f json ' + server_name - )) + server = self.openstack( + 'server show ' + server_name, + parse_output=True, + ) self.assertEqual({}, server['addresses']) def test_server_create_with_security_group(self): @@ -1011,27 +1057,30 @@ class ServerTests(common.ComputeTestCase): self.skipTest("No Network service present") # Create two security group, use name and ID to create server sg_name1 = uuid.uuid4().hex - security_group1 = json.loads(self.openstack( - 'security group create -f json ' + sg_name1 - )) + security_group1 = self.openstack( + 'security group create ' + sg_name1, + parse_output=True, + ) self.addCleanup(self.openstack, 'security group delete ' + sg_name1) sg_name2 = uuid.uuid4().hex - security_group2 = json.loads(self.openstack( - 'security group create -f json ' + sg_name2 - )) + security_group2 = self.openstack( + 'security group create ' + sg_name2, + parse_output=True, + ) self.addCleanup(self.openstack, 'security group delete ' + sg_name2) server_name = uuid.uuid4().hex - server = json.loads(self.openstack( - 'server create -f json ' + + server = self.openstack( + 'server create ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + # Security group id is integer in nova-network, convert to string '--security-group ' + str(security_group1['id']) + ' ' + '--security-group ' + security_group2['name'] + ' ' + self.network_arg + ' ' + - server_name - )) + server_name, + parse_output=True, + ) self.addCleanup(self.openstack, 'server delete --wait ' + server_name) self.assertIsNotNone(server['id']) @@ -1042,9 +1091,10 @@ class ServerTests(common.ComputeTestCase): self.assertIn(str(security_group1['id']), sec_grp) self.assertIn(str(security_group2['id']), sec_grp) self.wait_for_status(server_name, 'ACTIVE') - server = json.loads(self.openstack( - 'server show -f json ' + server_name - )) + server = self.openstack( + 'server show ' + server_name, + parse_output=True, + ) # check if security group exists in list sec_grp = "" for sec in server['security_groups']: @@ -1059,7 +1109,7 @@ class ServerTests(common.ComputeTestCase): self.openstack( # auto/none enable in nova micro version (v2.37+) '--os-compute-api-version 2.37 ' + - 'server create -f json ' + + 'server create ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + server_name @@ -1074,14 +1124,15 @@ class ServerTests(common.ComputeTestCase): def test_server_add_remove_network(self): name = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'server create -f json ' + + cmd_output = self.openstack( + 'server create ' + '--network private ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + '--wait ' + - name - )) + name, + parse_output=True, + ) self.assertIsNotNone(cmd_output['id']) self.assertEqual(name, cmd_output['name']) @@ -1093,9 +1144,10 @@ class ServerTests(common.ComputeTestCase): wait_time = 0 while wait_time < 60: - cmd_output = json.loads(self.openstack( - 'server show -f json ' + name - )) + cmd_output = self.openstack( + 'server show ' + name, + parse_output=True, + ) if 'public' not in cmd_output['addresses']: # Hang out for a bit and try again print('retrying add network check') @@ -1111,9 +1163,10 @@ class ServerTests(common.ComputeTestCase): wait_time = 0 while wait_time < 60: - cmd_output = json.loads(self.openstack( - 'server show -f json ' + name - )) + cmd_output = self.openstack( + 'server show ' + name, + parse_output=True, + ) if 'public' in cmd_output['addresses']: # Hang out for a bit and try again print('retrying remove network check') @@ -1127,14 +1180,15 @@ class ServerTests(common.ComputeTestCase): def test_server_add_remove_port(self): name = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'server create -f json ' + + cmd_output = self.openstack( + 'server create ' + '--network private ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + '--wait ' + - name - )) + name, + parse_output=True, + ) self.assertIsNotNone(cmd_output['id']) self.assertEqual(name, cmd_output['name']) @@ -1143,15 +1197,17 @@ class ServerTests(common.ComputeTestCase): # create port, record one of its ip address port_name = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'port list -f json' - )) + cmd_output = self.openstack( + 'port list', + parse_output=True, + ) self.assertNotIn(port_name, cmd_output) - cmd_output = json.loads(self.openstack( - 'port create -f json ' + - '--network private ' + port_name - )) + cmd_output = self.openstack( + 'port create ' + + '--network private ' + port_name, + parse_output=True, + ) self.assertIsNotNone(cmd_output['id']) ip_address = cmd_output['fixed_ips'][0]['ip_address'] self.addCleanup(self.openstack, 'port delete ' + port_name) @@ -1161,9 +1217,10 @@ class ServerTests(common.ComputeTestCase): wait_time = 0 while wait_time < 60: - cmd_output = json.loads(self.openstack( - 'server show -f json ' + name - )) + cmd_output = self.openstack( + 'server show ' + name, + parse_output=True, + ) if ip_address not in cmd_output['addresses']['private']: # Hang out for a bit and try again print('retrying add port check') @@ -1179,9 +1236,10 @@ class ServerTests(common.ComputeTestCase): wait_time = 0 while wait_time < 60: - cmd_output = json.loads(self.openstack( - 'server show -f json ' + name - )) + cmd_output = self.openstack( + 'server show ' + name, + parse_output=True, + ) if ip_address in cmd_output['addresses']['private']: # Hang out for a bit and try again print('retrying add port check') @@ -1196,14 +1254,15 @@ class ServerTests(common.ComputeTestCase): volume_wait_for = volume_common.BaseVolumeTests.wait_for_status server_name = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'server create -f json ' + + cmd_output = self.openstack( + 'server create ' + '--network private ' + '--flavor ' + self.flavor_name + ' ' + '--image ' + self.image_name + ' ' + '--wait ' + - server_name - )) + server_name, + parse_output=True, + ) self.assertIsNotNone(cmd_output['id']) self.assertEqual(server_name, cmd_output['name']) @@ -1211,11 +1270,12 @@ class ServerTests(common.ComputeTestCase): server_id = cmd_output['id'] volume_name = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'volume create -f json ' + + cmd_output = self.openstack( + 'volume create ' + '--size 1 ' + - volume_name - )) + volume_name, + parse_output=True, + ) self.assertIsNotNone(cmd_output['id']) self.assertEqual(volume_name, cmd_output['name']) @@ -1223,22 +1283,24 @@ class ServerTests(common.ComputeTestCase): self.addCleanup(self.openstack, 'volume delete ' + volume_name) volume_id = cmd_output['id'] - cmd_output = json.loads(self.openstack( - 'server add volume -f json ' + + cmd_output = self.openstack( + 'server add volume ' + server_name + ' ' + volume_name + ' ' + - '--tag bar' - )) + '--tag bar', + parse_output=True, + ) 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 ' + - server_name - )) + cmd_output = self.openstack( + 'server volume list ' + + server_name, + parse_output=True, + ) self.assertEqual(volume_attachment_id, cmd_output[0]['ID']) self.assertEqual(server_id, cmd_output[0]['Server ID']) @@ -1246,10 +1308,11 @@ class ServerTests(common.ComputeTestCase): volume_wait_for('volume', volume_name, 'in-use') - cmd_output = json.loads(self.openstack( - 'server event list -f json ' + - server_name - )) + cmd_output = self.openstack( + 'server event list ' + + server_name, + parse_output=True, + ) self.assertEqual(2, len(cmd_output)) self.assertIn('attach_volume', {x['Action'] for x in cmd_output}) @@ -1258,10 +1321,11 @@ class ServerTests(common.ComputeTestCase): ) volume_wait_for('volume', volume_name, 'available') - cmd_output = json.loads(self.openstack( - 'server event list -f json ' + - server_name - )) + cmd_output = self.openstack( + 'server event list ' + + server_name, + parse_output=True, + ) self.assertEqual(3, len(cmd_output)) self.assertIn('detach_volume', {x['Action'] for x in cmd_output}) diff --git a/openstackclient/tests/functional/compute/v2/test_server_event.py b/openstackclient/tests/functional/compute/v2/test_server_event.py index b4725fe631..48147507d3 100644 --- a/openstackclient/tests/functional/compute/v2/test_server_event.py +++ b/openstackclient/tests/functional/compute/v2/test_server_event.py @@ -13,8 +13,6 @@ # under the License. # -import json - from openstackclient.tests.functional.compute.v2 import common @@ -33,9 +31,10 @@ class ServerEventTests(common.ComputeTestCase): def test_server_event_list_and_show(self): """Test list, show server event""" # Test 'server event list' for creating - cmd_output = json.loads(self.openstack( - 'server event list -f json ' + self.server_name - )) + cmd_output = self.openstack( + 'server event list ' + self.server_name, + parse_output=True, + ) request_id = None for each_event in cmd_output: self.assertNotIn('Message', each_event) @@ -47,9 +46,10 @@ class ServerEventTests(common.ComputeTestCase): break self.assertIsNotNone(request_id) # Test 'server event show' for creating - cmd_output = json.loads(self.openstack( - 'server event show -f json ' + self.server_name + ' ' + request_id - )) + cmd_output = self.openstack( + 'server event show ' + self.server_name + ' ' + request_id, + parse_output=True, + ) self.assertEqual(self.server_id, cmd_output.get('instance_uuid')) self.assertEqual(request_id, cmd_output.get('request_id')) self.assertEqual('create', cmd_output.get('action')) @@ -59,9 +59,10 @@ class ServerEventTests(common.ComputeTestCase): # Reboot server, trigger reboot event self.openstack('server reboot --wait ' + self.server_name) # Test 'server event list --long' for rebooting - cmd_output = json.loads(self.openstack( - 'server event list --long -f json ' + self.server_name - )) + cmd_output = self.openstack( + 'server event list --long ' + self.server_name, + parse_output=True, + ) request_id = None for each_event in cmd_output: self.assertIn('Message', each_event) @@ -73,9 +74,10 @@ class ServerEventTests(common.ComputeTestCase): break self.assertIsNotNone(request_id) # Test 'server event show' for rebooting - cmd_output = json.loads(self.openstack( - 'server event show -f json ' + self.server_name + ' ' + request_id - )) + cmd_output = self.openstack( + 'server event show ' + self.server_name + ' ' + request_id, + parse_output=True, + ) self.assertEqual(self.server_id, cmd_output.get('instance_uuid')) self.assertEqual(request_id, cmd_output.get('request_id')) @@ -93,10 +95,11 @@ class ServerEventTests(common.ComputeTestCase): self.openstack('server delete --wait ' + server_id) # And verify we can get the event list after it's deleted # Test 'server event list' for deleting - cmd_output = json.loads(self.openstack( + cmd_output = self.openstack( '--os-compute-api-version 2.21 ' - 'server event list -f json ' + server_id - )) + 'server event list ' + server_id, + parse_output=True, + ) request_id = None for each_event in cmd_output: self.assertNotIn('Message', each_event) @@ -108,10 +111,11 @@ class ServerEventTests(common.ComputeTestCase): break self.assertIsNotNone(request_id) # Test 'server event show' for deleting - cmd_output = json.loads(self.openstack( + cmd_output = self.openstack( '--os-compute-api-version 2.21 ' - 'server event show -f json ' + server_id + ' ' + request_id - )) + 'server event show ' + server_id + ' ' + request_id, + parse_output=True, + ) self.assertEqual(server_id, cmd_output.get('instance_uuid')) self.assertEqual(request_id, cmd_output.get('request_id')) self.assertEqual('delete', cmd_output.get('action')) diff --git a/openstackclient/tests/functional/compute/v2/test_server_group.py b/openstackclient/tests/functional/compute/v2/test_server_group.py index daeecd2d5a..a599951c3e 100644 --- a/openstackclient/tests/functional/compute/v2/test_server_group.py +++ b/openstackclient/tests/functional/compute/v2/test_server_group.py @@ -10,7 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -import json import uuid from openstackclient.tests.functional import base @@ -23,11 +22,12 @@ class ServerGroupTests(base.TestCase): """Test create, delete multiple""" name1 = uuid.uuid4().hex name2 = uuid.uuid4().hex - cmd_output = json.loads(self.openstack( - 'server group create -f json ' + + cmd_output = self.openstack( + 'server group create ' + '--policy affinity ' + - name1 - )) + name1, + parse_output=True, + ) self.assertEqual( name1, cmd_output['name'] @@ -37,11 +37,12 @@ class ServerGroupTests(base.TestCase): cmd_output['policy'] ) - cmd_output = json.loads(self.openstack( - 'server group create -f json ' + + cmd_output = self.openstack( + 'server group create ' + '--policy anti-affinity ' + - name2 - )) + name2, + parse_output=True, + ) self.assertEqual( name2, cmd_output['name'] @@ -61,14 +62,17 @@ class ServerGroupTests(base.TestCase): name2 = uuid.uuid4().hex # test server group show - cmd_output = json.loads(self.openstack( - 'server group create -f json ' + + cmd_output = self.openstack( + 'server group create ' + '--policy affinity ' + - name1 - )) + name1, + parse_output=True, + ) self.addCleanup(self.openstack, 'server group delete ' + name1) - cmd_output = json.loads(self.openstack( - 'server group show -f json ' + name1)) + cmd_output = self.openstack( + 'server group show ' + name1, + parse_output=True, + ) self.assertEqual( name1, cmd_output['name'] @@ -78,14 +82,17 @@ class ServerGroupTests(base.TestCase): cmd_output['policy'] ) - cmd_output = json.loads(self.openstack( - 'server group create -f json ' + + cmd_output = self.openstack( + 'server group create ' + '--policy anti-affinity ' + - name2 - )) + name2, + parse_output=True, + ) self.addCleanup(self.openstack, 'server group delete ' + name2) - cmd_output = json.loads(self.openstack( - 'server group show -f json ' + name2)) + cmd_output = self.openstack( + 'server group show ' + name2, + parse_output=True, + ) self.assertEqual( name2, cmd_output['name'] @@ -96,8 +103,10 @@ class ServerGroupTests(base.TestCase): ) # test server group list - cmd_output = json.loads(self.openstack( - 'server group list -f json')) + cmd_output = self.openstack( + 'server group list', + parse_output=True, + ) names = [x["Name"] for x in cmd_output] self.assertIn(name1, names) self.assertIn(name2, names)