From 15a079faa6a6cbae465bc96a6069c892af9c0e04 Mon Sep 17 00:00:00 2001
From: Dean Troyer <dtroyer@gmail.com>
Date: Thu, 14 Jun 2018 09:31:01 -0500
Subject: [PATCH] Fix volume type functional tests

Convert functional VolumeTypeTests to not use class methods for setup.

Depends-On: https://review.openstack.org/577147
Change-Id: I855583ad1a50bf5f5046acdb85e977ab9e3c45d2
---
 .../functional/volume/v1/test_volume_type.py  | 119 ++++++++++-----
 .../tests/functional/volume/v2/test_qos.py    |   5 +-
 .../functional/volume/v2/test_volume_type.py  | 138 ++++++++++++------
 3 files changed, 180 insertions(+), 82 deletions(-)

diff --git a/openstackclient/tests/functional/volume/v1/test_volume_type.py b/openstackclient/tests/functional/volume/v1/test_volume_type.py
index c5886a696a..eb9d7f64ae 100644
--- a/openstackclient/tests/functional/volume/v1/test_volume_type.py
+++ b/openstackclient/tests/functional/volume/v1/test_volume_type.py
@@ -20,62 +20,92 @@ from openstackclient.tests.functional.volume.v1 import common
 class VolumeTypeTests(common.BaseVolumeTests):
     """Functional tests for volume type. """
 
-    NAME = uuid.uuid4().hex
+    def test_volume_type_create_list(self):
+        name = uuid.uuid4().hex
+        cmd_output = json.loads(self.openstack(
+            'volume type create -f json --private ' +
+            name,
+        ))
+        self.addCleanup(
+            self.openstack,
+            'volume type delete ' +
+            name,
+        )
+        self.assertEqual(name, cmd_output['name'])
 
-    @classmethod
-    def setUpClass(cls):
-        super(VolumeTypeTests, cls).setUpClass()
-        cmd_output = json.loads(cls.openstack(
-            'volume type create -f json %s' % cls.NAME))
-        cls.assertOutput(cls.NAME, cmd_output['name'])
+        cmd_output = json.loads(self.openstack(
+            'volume type show -f json %s' % name
+        ))
+        self.assertEqual(self.NAME, cmd_output['name'])
 
-    @classmethod
-    def tearDownClass(cls):
-        try:
-            raw_output = cls.openstack('volume type delete %s' % cls.NAME)
-            cls.assertOutput('', raw_output)
-        finally:
-            super(VolumeTypeTests, cls).tearDownClass()
-
-    def test_volume_type_list(self):
         cmd_output = json.loads(self.openstack('volume type list -f json'))
         self.assertIn(self.NAME, [t['Name'] for t in cmd_output])
 
-    def test_volume_type_show(self):
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % self.NAME))
-        self.assertEqual(self.NAME, cmd_output['name'])
+            'volume type list -f json --default'
+        ))
+        self.assertEqual(1, len(cmd_output))
+        self.assertEqual('lvmdriver-1', cmd_output[0]['Name'])
 
     def test_volume_type_set_unset_properties(self):
-        raw_output = self.openstack(
-            'volume type set --property a=b --property c=d %s' % self.NAME)
-        self.assertEqual("", raw_output)
-
+        name = uuid.uuid4().hex
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json ' + self.NAME))
+            'volume type create -f json --private ' +
+            name,
+        ))
+        self.addCleanup(
+            self.openstack,
+            'volume type delete ' + name
+        )
+        self.assertEqual(name, cmd_output['name'])
+
+        raw_output = self.openstack(
+            'volume type set --property a=b --property c=d %s' % name
+        )
+        self.assertEqual("", raw_output)
+        cmd_output = json.loads(self.openstack(
+            'volume type show -f json %s' % name
+        ))
+        # TODO(amotoki): properties output should be machine-readable
         self.assertEqual("a='b', c='d'", cmd_output['properties'])
 
-        raw_output = self.openstack('volume type unset --property a %s' %
-                                    self.NAME)
+        raw_output = self.openstack(
+            'volume type unset --property a %s' % name
+        )
         self.assertEqual("", raw_output)
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % self.NAME))
+            'volume type show -f json %s' % name
+        ))
         self.assertEqual("c='d'", cmd_output['properties'])
 
     def test_volume_type_set_unset_multiple_properties(self):
-        raw_output = self.openstack(
-            'volume type set --property a=b --property c=d %s' % self.NAME)
-        self.assertEqual("", raw_output)
-
+        name = uuid.uuid4().hex
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % self.NAME))
+            'volume type create -f json --private ' +
+            name,
+        ))
+        self.addCleanup(
+            self.openstack,
+            'volume type delete ' + name
+        )
+        self.assertEqual(name, cmd_output['name'])
+
+        raw_output = self.openstack(
+            'volume type set --property a=b --property c=d %s' % name
+        )
+        self.assertEqual("", raw_output)
+        cmd_output = json.loads(self.openstack(
+            'volume type show -f json %s' % name
+        ))
         self.assertEqual("a='b', c='d'", cmd_output['properties'])
 
         raw_output = self.openstack(
-            'volume type unset --property a --property c %s' % self.NAME)
+            'volume type unset --property a --property c %s' % name
+        )
         self.assertEqual("", raw_output)
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % self.NAME))
+            'volume type show -f json %s' % name
+        ))
         self.assertEqual("", cmd_output['properties'])
 
     def test_multi_delete(self):
@@ -140,8 +170,21 @@ class VolumeTypeTests(common.BaseVolumeTests):
             '--encryption-control-location front-end ' +
             self.NAME)
         self.assertEqual('', raw_output)
+
+        name = uuid.uuid4().hex
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + self.NAME))
+            'volume type create -f json --private ' +
+            name,
+        ))
+        self.addCleanup(
+            self.openstack,
+            'volume type delete ' + name,
+        )
+        self.assertEqual(name, cmd_output['name'])
+
+        cmd_output = json.loads(self.openstack(
+            'volume type show -f json --encryption-type ' + name
+        ))
         expected = ["provider='LuksEncryptor'",
                     "cipher='aes-xts-plain64'",
                     "key_size='128'",
@@ -150,10 +193,12 @@ class VolumeTypeTests(common.BaseVolumeTests):
             self.assertIn(attr, cmd_output['encryption'])
         # test unset encryption type
         raw_output = self.openstack(
-            'volume type unset --encryption-type ' + self.NAME)
+            'volume type unset --encryption-type ' + name
+        )
         self.assertEqual('', raw_output)
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + self.NAME))
+            'volume type show -f json --encryption-type ' + name
+        ))
         self.assertEqual('', cmd_output['encryption'])
         # test delete encryption type
         raw_output = self.openstack('volume type delete ' + encryption_type)
diff --git a/openstackclient/tests/functional/volume/v2/test_qos.py b/openstackclient/tests/functional/volume/v2/test_qos.py
index 888f12b1e2..646becc1a7 100644
--- a/openstackclient/tests/functional/volume/v2/test_qos.py
+++ b/openstackclient/tests/functional/volume/v2/test_qos.py
@@ -125,7 +125,6 @@ class QosTests(common.BaseVolumeTests):
     def test_volume_qos_asso_disasso(self):
         """Tests associate and disassociate qos with volume type"""
         vol_type1 = uuid.uuid4().hex
-        vol_type2 = uuid.uuid4().hex
         cmd_output = json.loads(self.openstack(
             'volume type create -f json ' +
             vol_type1
@@ -134,6 +133,9 @@ class QosTests(common.BaseVolumeTests):
             vol_type1,
             cmd_output['name']
         )
+        self.addCleanup(self.openstack, 'volume type delete ' + vol_type1)
+
+        vol_type2 = uuid.uuid4().hex
         cmd_output = json.loads(self.openstack(
             'volume type create -f json ' +
             vol_type2
@@ -142,7 +144,6 @@ class QosTests(common.BaseVolumeTests):
             vol_type2,
             cmd_output['name']
         )
-        self.addCleanup(self.openstack, 'volume type delete ' + vol_type1)
         self.addCleanup(self.openstack, 'volume type delete ' + vol_type2)
 
         name = uuid.uuid4().hex
diff --git a/openstackclient/tests/functional/volume/v2/test_volume_type.py b/openstackclient/tests/functional/volume/v2/test_volume_type.py
index 5c551ca945..d8dd5bd626 100644
--- a/openstackclient/tests/functional/volume/v2/test_volume_type.py
+++ b/openstackclient/tests/functional/volume/v2/test_volume_type.py
@@ -20,76 +20,113 @@ from openstackclient.tests.functional.volume.v2 import common
 class VolumeTypeTests(common.BaseVolumeTests):
     """Functional tests for volume type. """
 
-    NAME = uuid.uuid4().hex
-
-    @classmethod
-    def setUpClass(cls):
-        super(VolumeTypeTests, cls).setUpClass()
-        cmd_output = json.loads(cls.openstack(
-            'volume type create -f json --private %s' % cls.NAME))
-        cls.assertOutput(cls.NAME, cmd_output['name'])
-
-    @classmethod
-    def tearDownClass(cls):
-        try:
-            raw_output = cls.openstack('volume type delete %s' % cls.NAME)
-            cls.assertOutput('', raw_output)
-        finally:
-            super(VolumeTypeTests, cls).tearDownClass()
-
-    def test_volume_type_list(self):
-        cmd_output = json.loads(self.openstack('volume type list -f json'))
-        self.assertIn(self.NAME, [t['Name'] for t in cmd_output])
-
-    def test_volume_type_list_default(self):
+    def test_volume_type_create_list(self):
+        name = uuid.uuid4().hex
         cmd_output = json.loads(self.openstack(
-            'volume type list -f json --default'))
+            'volume type create -f json --private ' +
+            name,
+        ))
+        self.addCleanup(
+            self.openstack,
+            'volume type delete ' + name,
+        )
+        self.assertEqual(name, cmd_output['name'])
+
+        cmd_output = json.loads(self.openstack(
+            'volume type show -f json %s' % name
+        ))
+        self.assertEqual(name, cmd_output['name'])
+
+        cmd_output = json.loads(self.openstack('volume type list -f json'))
+        self.assertIn(name, [t['Name'] for t in cmd_output])
+
+        cmd_output = json.loads(self.openstack(
+            'volume type list -f json --default'
+        ))
         self.assertEqual(1, len(cmd_output))
         self.assertEqual('lvmdriver-1', cmd_output[0]['Name'])
 
-    def test_volume_type_show(self):
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % self.NAME))
-        self.assertEqual(self.NAME, cmd_output['name'])
-
     def test_volume_type_set_unset_properties(self):
+        name = uuid.uuid4().hex
+        cmd_output = json.loads(self.openstack(
+            'volume type create -f json --private ' +
+            name,
+        ))
+        self.addCleanup(
+            self.openstack,
+            'volume type delete ' + name
+        )
+        self.assertEqual(name, cmd_output['name'])
+
         raw_output = self.openstack(
-            'volume type set --property a=b --property c=d %s' % self.NAME)
+            'volume type set --property a=b --property c=d %s' % name
+        )
         self.assertEqual("", raw_output)
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % self.NAME))
+            'volume type show -f json %s' % name
+        ))
         # TODO(amotoki): properties output should be machine-readable
         self.assertEqual("a='b', c='d'", cmd_output['properties'])
 
-        raw_output = self.openstack('volume type unset --property a %s' %
-                                    self.NAME)
+        raw_output = self.openstack(
+            'volume type unset --property a %s' % name
+        )
         self.assertEqual("", raw_output)
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % self.NAME))
+            'volume type show -f json %s' % name
+        ))
         self.assertEqual("c='d'", cmd_output['properties'])
 
     def test_volume_type_set_unset_multiple_properties(self):
+        name = uuid.uuid4().hex
+        cmd_output = json.loads(self.openstack(
+            'volume type create -f json --private ' +
+            name,
+        ))
+        self.addCleanup(
+            self.openstack,
+            'volume type delete ' + name
+        )
+        self.assertEqual(name, cmd_output['name'])
+
         raw_output = self.openstack(
-            'volume type set --property a=b --property c=d %s' % self.NAME)
+            'volume type set --property a=b --property c=d %s' % name
+        )
         self.assertEqual("", raw_output)
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % self.NAME))
+            'volume type show -f json %s' % name
+        ))
         self.assertEqual("a='b', c='d'", cmd_output['properties'])
 
         raw_output = self.openstack(
-            'volume type unset --property a --property c %s' % self.NAME)
+            'volume type unset --property a --property c %s' % name
+        )
         self.assertEqual("", raw_output)
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % self.NAME))
+            'volume type show -f json %s' % name
+        ))
         self.assertEqual("", cmd_output['properties'])
 
     def test_volume_type_set_unset_project(self):
+        name = uuid.uuid4().hex
+        cmd_output = json.loads(self.openstack(
+            'volume type create -f json --private ' +
+            name,
+        ))
+        self.addCleanup(
+            self.openstack,
+            'volume type delete ' + name
+        )
+        self.assertEqual(name, cmd_output['name'])
+
         raw_output = self.openstack(
-            'volume type set --project admin %s' % self.NAME)
+            'volume type set --project admin %s' % name
+        )
         self.assertEqual("", raw_output)
 
         raw_output = self.openstack(
-            'volume type unset --project admin %s' % self.NAME)
+            'volume type unset --project admin %s' % name
+        )
         self.assertEqual("", raw_output)
 
     def test_multi_delete(self):
@@ -108,6 +145,7 @@ class VolumeTypeTests(common.BaseVolumeTests):
     #       these to new test format when beef up all tests for
     #       volume tye commands.
     def test_encryption_type(self):
+        name = uuid.uuid4().hex
         encryption_type = uuid.uuid4().hex
         # test create new encryption type
         cmd_output = json.loads(self.openstack(
@@ -162,16 +200,28 @@ class VolumeTypeTests(common.BaseVolumeTests):
         for attr in expected:
             self.assertIn(attr, cmd_output['encryption'])
         # test set new encryption type
+        cmd_output = json.loads(self.openstack(
+            'volume type create -f json --private ' +
+            name,
+        ))
+        self.addCleanup(
+            self.openstack,
+            'volume type delete ' + name,
+        )
+        self.assertEqual(name, cmd_output['name'])
+
         raw_output = self.openstack(
             'volume type set '
             '--encryption-provider LuksEncryptor '
             '--encryption-cipher aes-xts-plain64 '
             '--encryption-key-size 128 '
             '--encryption-control-location front-end ' +
-            self.NAME)
+            name)
         self.assertEqual('', raw_output)
+
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + self.NAME))
+            'volume type show -f json --encryption-type ' + name
+        ))
         expected = ["provider='LuksEncryptor'",
                     "cipher='aes-xts-plain64'",
                     "key_size='128'",
@@ -180,10 +230,12 @@ class VolumeTypeTests(common.BaseVolumeTests):
             self.assertIn(attr, cmd_output['encryption'])
         # test unset encryption type
         raw_output = self.openstack(
-            'volume type unset --encryption-type ' + self.NAME)
+            'volume type unset --encryption-type ' + name
+        )
         self.assertEqual('', raw_output)
         cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + self.NAME))
+            'volume type show -f json --encryption-type ' + name
+        ))
         self.assertEqual('', cmd_output['encryption'])
         # test delete encryption type
         raw_output = self.openstack('volume type delete ' + encryption_type)