From dc03ce98de3d812b6e62eca233469644689357e0 Mon Sep 17 00:00:00 2001
From: Stephen Finucane <sfinucan@redhat.com>
Date: Tue, 29 Nov 2022 16:20:03 +0000
Subject: [PATCH] tests: Convert image tests to use 'parse_output'

Change-Id: I5f256d466d503d70d1f380016f9c8f5a0d9e395f
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
---
 .../tests/functional/image/v1/test_image.py   |  63 +++---
 .../tests/functional/image/v2/test_image.py   | 182 +++++++++---------
 2 files changed, 120 insertions(+), 125 deletions(-)

diff --git a/openstackclient/tests/functional/image/v1/test_image.py b/openstackclient/tests/functional/image/v1/test_image.py
index b9774ab53d..2b4d8f41fc 100644
--- a/openstackclient/tests/functional/image/v1/test_image.py
+++ b/openstackclient/tests/functional/image/v1/test_image.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 import fixtures
@@ -22,41 +21,37 @@ class ImageTests(base.BaseImageTests):
     """Functional tests for Image commands"""
 
     def setUp(self):
-        super(ImageTests, self).setUp()
+        super().setUp()
+
         if not self.haz_v1_api:
             self.skipTest('No Image v1 API present')
 
-        self.name = uuid.uuid4().hex
-        json_output = json.loads(self.openstack(
-            '--os-image-api-version 1 '
-            'image create -f json ' +
-            self.name
-        ))
-        self.image_id = json_output["id"]
-        self.assertOutput(self.name, json_output['name'])
-
         ver_fixture = fixtures.EnvironmentVariable(
             'OS_IMAGE_API_VERSION', '1'
         )
         self.useFixture(ver_fixture)
 
+        self.name = uuid.uuid4().hex
+        output = self.openstack(
+            'image create ' + self.name,
+            parse_output=True,
+        )
+        self.image_id = output["id"]
+        self.assertOutput(self.name, output['name'])
+
     def tearDown(self):
         try:
-            self.openstack(
-                '--os-image-api-version 1 '
-                'image delete ' +
-                self.image_id
-            )
+            self.openstack('image delete ' + self.image_id)
         finally:
-            super(ImageTests, self).tearDown()
+            super().tearDown()
 
     def test_image_list(self):
-        json_output = json.loads(self.openstack(
-            'image list -f json '
-        ))
+        output = self.openstack(
+            'image list'
+        )
         self.assertIn(
             self.name,
-            [img['Name'] for img in json_output]
+            [img['Name'] for img in output]
         )
 
     def test_image_attributes(self):
@@ -71,24 +66,24 @@ class ImageTests(base.BaseImageTests):
             '--public ' +
             self.name
         )
-        json_output = json.loads(self.openstack(
-            'image show -f json ' +
-            self.name
-        ))
+        output = self.openstack(
+            'image show ' + self.name,
+            parse_output=True,
+        )
         self.assertEqual(
             4,
-            json_output["min_disk"],
+            output["min_disk"],
         )
         self.assertEqual(
             5,
-            json_output["min_ram"],
+            output["min_ram"],
         )
         self.assertEqual(
             'qcow2',
-            json_output['disk_format'],
+            output['disk_format'],
         )
         self.assertTrue(
-            json_output["is_public"],
+            output["is_public"],
         )
 
         # Test properties
@@ -99,11 +94,11 @@ class ImageTests(base.BaseImageTests):
             '--public ' +
             self.name
         )
-        json_output = json.loads(self.openstack(
-            'image show -f json ' +
-            self.name
-        ))
+        output = self.openstack(
+            'image show ' + self.name,
+            parse_output=True,
+        )
         self.assertEqual(
             {'a': 'b', 'c': 'd'},
-            json_output["properties"],
+            output["properties"],
         )
diff --git a/openstackclient/tests/functional/image/v2/test_image.py b/openstackclient/tests/functional/image/v2/test_image.py
index 5b07470091..3535bd7eee 100644
--- a/openstackclient/tests/functional/image/v2/test_image.py
+++ b/openstackclient/tests/functional/image/v2/test_image.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 import fixtures
@@ -24,65 +23,62 @@ class ImageTests(base.BaseImageTests):
     def setUp(self):
         super(ImageTests, self).setUp()
 
-        self.name = uuid.uuid4().hex
-        self.image_tag = 'my_tag'
-        self.image_tag1 = 'random'
-        json_output = json.loads(self.openstack(
-            '--os-image-api-version 2 '
-            'image create -f json --tag {tag} {name}'.format(
-                tag=self.image_tag, name=self.name)
-        ))
-        self.image_id = json_output["id"]
-        self.assertOutput(self.name, json_output['name'])
-
         ver_fixture = fixtures.EnvironmentVariable(
             'OS_IMAGE_API_VERSION', '2'
         )
         self.useFixture(ver_fixture)
 
+        self.name = uuid.uuid4().hex
+        self.image_tag = 'my_tag'
+        self.image_tag1 = 'random'
+        output = self.openstack(
+            'image create --tag {tag} {name}'.format(
+                tag=self.image_tag, name=self.name),
+            parse_output=True,
+        )
+        self.image_id = output["id"]
+        self.assertOutput(self.name, output['name'])
+
     def tearDown(self):
         try:
-            self.openstack(
-                '--os-image-api-version 2 '
-                'image delete ' +
-                self.image_id
-            )
+            self.openstack('image delete ' + self.image_id)
         finally:
-            super(ImageTests, self).tearDown()
+            super().tearDown()
 
     def test_image_list(self):
-        json_output = json.loads(self.openstack(
-            'image list -f json '
-        ))
+        output = self.openstack('image list', parse_output=True)
         self.assertIn(
             self.name,
-            [img['Name'] for img in json_output]
+            [img['Name'] for img in output]
         )
 
     def test_image_list_with_name_filter(self):
-        json_output = json.loads(self.openstack(
-            'image list --name ' + self.name + ' -f json'
-        ))
+        output = self.openstack(
+            'image list --name ' + self.name,
+            parse_output=True,
+        )
         self.assertIn(
             self.name,
-            [img['Name'] for img in json_output]
+            [img['Name'] for img in output]
         )
 
     def test_image_list_with_status_filter(self):
-        json_output = json.loads(self.openstack(
-            'image list ' + ' --status active -f json'
-        ))
+        output = self.openstack(
+            'image list --status active',
+            parse_output=True,
+        )
         self.assertIn(
             'active',
-            [img['Status'] for img in json_output]
+            [img['Status'] for img in output]
         )
 
     def test_image_list_with_tag_filter(self):
-        json_output = json.loads(self.openstack(
+        output = self.openstack(
             'image list --tag ' + self.image_tag + ' --tag ' +
-            self.image_tag1 + ' --long -f json'
-        ))
-        for taglist in [img['Tags'] for img in json_output]:
+            self.image_tag1 + ' --long',
+            parse_output=True,
+        )
+        for taglist in [img['Tags'] for img in output]:
             self.assertIn(
                 self.image_tag,
                 taglist
@@ -103,21 +99,21 @@ class ImageTests(base.BaseImageTests):
             '--public ' +
             self.name
         )
-        json_output = json.loads(self.openstack(
-            'image show -f json ' +
-            self.name
-        ))
+        output = self.openstack(
+            'image show ' + self.name,
+            parse_output=True,
+        )
         self.assertEqual(
             4,
-            json_output["min_disk"],
+            output["min_disk"],
         )
         self.assertEqual(
             5,
-            json_output["min_ram"],
+            output["min_ram"],
         )
         self.assertEqual(
             'public',
-            json_output["visibility"],
+            output["visibility"],
         )
 
         # Test properties
@@ -129,12 +125,12 @@ class ImageTests(base.BaseImageTests):
             '--public ' +
             self.name
         )
-        json_output = json.loads(self.openstack(
-            'image show -f json ' +
-            self.name
-        ))
-        self.assertIn("a", json_output["properties"])
-        self.assertIn("c", json_output["properties"])
+        output = self.openstack(
+            'image show ' + self.name,
+            parse_output=True,
+        )
+        self.assertIn("a", output["properties"])
+        self.assertIn("c", output["properties"])
 
         self.openstack(
             'image unset ' +
@@ -143,30 +139,30 @@ class ImageTests(base.BaseImageTests):
             '--property hw_rng_model ' +
             self.name
         )
-        json_output = json.loads(self.openstack(
-            'image show -f json ' +
-            self.name
-        ))
-        self.assertNotIn("a", json_output["properties"])
-        self.assertNotIn("c", json_output["properties"])
+        output = self.openstack(
+            'image show ' + self.name,
+            parse_output=True,
+        )
+        self.assertNotIn("a", output["properties"])
+        self.assertNotIn("c", output["properties"])
 
         # Test tags
         self.assertNotIn(
             '01',
-            json_output["tags"]
+            output["tags"]
         )
         self.openstack(
             'image set ' +
             '--tag 01 ' +
             self.name
         )
-        json_output = json.loads(self.openstack(
-            'image show -f json ' +
-            self.name
-        ))
+        output = self.openstack(
+            'image show ' + self.name,
+            parse_output=True,
+        )
         self.assertIn(
             '01',
-            json_output["tags"]
+            output["tags"]
         )
 
         self.openstack(
@@ -174,38 +170,38 @@ class ImageTests(base.BaseImageTests):
             '--tag 01 ' +
             self.name
         )
-        json_output = json.loads(self.openstack(
-            'image show -f json ' +
-            self.name
-        ))
+        output = self.openstack(
+            'image show ' + self.name,
+            parse_output=True,
+        )
         self.assertNotIn(
             '01',
-            json_output["tags"]
+            output["tags"]
         )
 
     def test_image_set_rename(self):
         name = uuid.uuid4().hex
-        json_output = json.loads(self.openstack(
-            'image create -f json ' +
-            name
-        ))
-        image_id = json_output["id"]
+        output = self.openstack(
+            'image create ' + name,
+            parse_output=True,
+        )
+        image_id = output["id"]
         self.assertEqual(
             name,
-            json_output["name"],
+            output["name"],
         )
         self.openstack(
             'image set ' +
             '--name ' + name + 'xx ' +
             image_id
         )
-        json_output = json.loads(self.openstack(
-            'image show -f json ' +
-            name + 'xx'
-        ))
+        output = self.openstack(
+            'image show ' + name + 'xx',
+            parse_output=True,
+        )
         self.assertEqual(
             name + 'xx',
-            json_output["name"],
+            output["name"],
         )
 
     # TODO(dtroyer): This test is incomplete and doesn't properly test
@@ -213,19 +209,21 @@ class ImageTests(base.BaseImageTests):
     #                properly added.
     def test_image_members(self):
         """Test member add, remove, accept"""
-        json_output = json.loads(self.openstack(
-            'token issue -f json'
-        ))
-        my_project_id = json_output['project_id']
+        output = self.openstack(
+            'token issue',
+            parse_output=True,
+        )
+        my_project_id = output['project_id']
 
-        json_output = json.loads(self.openstack(
+        output = self.openstack(
             'image show -f json ' +
-            self.name
-        ))
+            self.name,
+            parse_output=True,
+        )
         # NOTE(dtroyer): Until OSC supports --shared flags in create and set
         #                we can not properly test membership.  Sometimes the
         #                images are shared and sometimes they are not.
-        if json_output["visibility"] == 'shared':
+        if output["visibility"] == 'shared':
             self.openstack(
                 'image add project ' +
                 self.name + ' ' +
@@ -243,13 +241,14 @@ class ImageTests(base.BaseImageTests):
                 '--accept ' +
                 self.name
             )
-            json_output = json.loads(self.openstack(
+            output = self.openstack(
                 'image list -f json ' +
-                '--shared'
-            ))
+                '--shared',
+                parse_output=True,
+            )
             self.assertIn(
                 self.name,
-                [img['Name'] for img in json_output]
+                [img['Name'] for img in output]
             )
 
             self.openstack(
@@ -257,13 +256,14 @@ class ImageTests(base.BaseImageTests):
                 '--reject ' +
                 self.name
             )
-            json_output = json.loads(self.openstack(
+            output = self.openstack(
                 'image list -f json ' +
-                '--shared'
-            ))
+                '--shared',
+                parse_output=True,
+            )
             # self.assertNotIn(
             #     self.name,
-            #     [img['Name'] for img in json_output]
+            #     [img['Name'] for img in output]
             # )
 
             self.openstack(