Moved part of test cases to another class

Some of the test cases were modifying the shared container and then cleaning up
in a 'finally' block, causing a lot of extra code. I put them into a separate
class that creates a new container after each test case run and removed the
manual cleanup code.

Change-Id: I8ad3768bef584fc29e2abeed9d21988cf710107a
diff --git a/tempest/tests/object_storage/test_object_services.py b/tempest/tests/object_storage/test_object_services.py
index 7cd9ff1..2c196cf 100644
--- a/tempest/tests/object_storage/test_object_services.py
+++ b/tempest/tests/object_storage/test_object_services.py
@@ -243,206 +243,6 @@
             resp, _ = self.container_client.delete_container(
                 dst_container_name)
 
-    @attr(type='smoke')
-    def test_access_public_container_object_without_using_creds(self):
-        # make container public-readable and access an object in it object
-        # anonymously, without using credentials
-        try:
-            resp_meta = None
-            # update container metadata to make it publicly readable
-            cont_headers = {'X-Container-Read': '.r:*,.rlistings'}
-            resp_meta, body = self.container_client.update_container_metadata(
-                self.container_name, metadata=cont_headers, metadata_prefix='')
-            self.assertEqual(resp_meta['status'], '204')
-            # create object
-            object_name = rand_name(name='Object')
-            data = arbitrary_string(size=len(object_name),
-                                    base_text=object_name)
-            resp, _ = self.object_client.create_object(self.container_name,
-                                                       object_name, data)
-            self.assertEqual(resp['status'], '201')
-
-            # list container metadata
-            resp_meta, _ = self.container_client.list_container_metadata(
-                self.container_name)
-            self.assertEqual(resp_meta['status'], '204')
-            self.assertIn('x-container-read', resp_meta)
-            self.assertEqual(resp_meta['x-container-read'], '.r:*,.rlistings')
-
-            # trying to get object with empty headers as it is public readable
-            resp, body = self.custom_object_client.get_object(
-                self.container_name, object_name, metadata={})
-            self.assertEqual(body, data)
-        finally:
-            if resp_meta['status'] == '204':
-                # delete updated container metadata, to revert back.
-                resp, body = self.container_client.delete_container_metadata(
-                    self.container_name, metadata=cont_headers,
-                    metadata_prefix='')
-                resp, _ = self.container_client.list_container_metadata(
-                    self.container_name)
-                self.assertEqual(resp['status'], '204')
-                self.assertIn('x-container-read', resp)
-                self.assertEqual(resp['x-container-read'], 'x')
-
-    @attr(type='smoke')
-    def test_access_public_object_with_another_user_creds(self):
-        # make container public-readable and access an object in it using
-        # another user's credentials
-        try:
-            resp_meta = None
-            cont_headers = {'X-Container-Read': '.r:*,.rlistings'}
-            resp_meta, body = self.container_client.update_container_metadata(
-                self.container_name, metadata=cont_headers,
-                metadata_prefix='')
-            self.assertEqual(resp_meta['status'], '204')
-            # create object
-            object_name = rand_name(name='Object')
-            data = arbitrary_string(size=len(object_name) * 1,
-                                    base_text=object_name)
-            resp, _ = self.object_client.create_object(self.container_name,
-                                                       object_name, data)
-            self.assertEqual(resp['status'], '201')
-
-            # list container metadata
-            resp, _ = self.container_client.list_container_metadata(
-                self.container_name)
-            self.assertEqual(resp['status'], '204')
-            self.assertIn('x-container-read', resp)
-            self.assertEqual(resp['x-container-read'], '.r:*,.rlistings')
-
-            # get auth token of alternative user
-            token = self.identity_client_alt.get_auth()
-            headers = {'X-Auth-Token': token}
-            # access object using alternate user creds
-            resp, body = self.custom_object_client.get_object(
-                self.container_name, object_name,
-                metadata=headers)
-            self.assertEqual(body, data)
-
-        except Exception as e:
-            self.fail("Failed to get public readable object with another"
-                      " user creds raised exception is %s" % e)
-
-        finally:
-            if resp_meta['status'] == '204':
-                # delete updated container metadata, to revert back.
-                resp, body = self.container_client.delete_container_metadata(
-                    self.container_name, metadata=cont_headers,
-                    metadata_prefix='')
-                resp, _ = self.container_client.list_container_metadata(
-                    self.container_name)
-                self.assertEqual(resp['status'], '204')
-                self.assertIn('x-container-read', resp)
-                self.assertEqual(resp['x-container-read'], 'x')
-
-    @testtools.skip('Until Bug #1020722 is resolved.')
-    @attr(type='smoke')
-    def test_write_public_object_without_using_creds(self):
-        # make container public-writable, and create object anonymously, e.g.
-        # without using credentials
-        try:
-            resp_meta = None
-            # update container metadata to make publily writable
-            cont_headers = {'X-Container-Write': '-*'}
-            resp_meta, body = self.container_client.update_container_metadata(
-                self.container_name, metadata=cont_headers, metadata_prefix='')
-            self.assertEqual(resp_meta['status'], '204')
-            # list container metadata
-            resp, _ = self.container_client.list_container_metadata(
-                self.container_name)
-            self.assertEqual(resp['status'], '204')
-            self.assertIn('x-container-write', resp)
-            self.assertEqual(resp['x-container-write'], '-*')
-
-            object_name = rand_name(name='Object')
-            data = arbitrary_string(size=len(object_name),
-                                    base_text=object_name)
-            headers = {'Content-Type': 'application/json',
-                       'Accept': 'application/json'}
-            # create object as anonymous user
-            resp, body = self.custom_object_client.create_object(
-                self.container_name, object_name, data, metadata=headers)
-            self.assertEqual(resp['status'], '201')
-
-        except Exception as e:
-            self.fail("Failed to create public writable object without using"
-                      " creds raised exception is %s" % e)
-
-        finally:
-            if resp_meta['status'] == '204':
-                # delete updated container metadata, to revert back.
-                resp, body = self.container_client.delete_container_metadata(
-                    self.container_name, metadata=cont_headers,
-                    metadata_prefix='')
-                resp, _ = self.container_client.list_container_metadata(
-                    self.container_name)
-                self.assertEqual(resp['status'], '204')
-                self.assertIn('x-container-write', resp)
-                self.assertEqual(resp['x-container-write'], 'x')
-
-    @testtools.skip('Until Bug #1020722 is resolved.')
-    @attr(type='smoke')
-    def test_write_public_with_another_user_creds(self):
-        # make container public-writable, and create object with another user's
-        # credentials
-        try:
-            resp_meta = None
-            # update container metadata to make it publicly writable
-            cont_headers = {'X-Container-Write': '-*'}
-            resp_meta, body = self.container_client.update_container_metadata(
-                self.container_name, metadata=cont_headers,
-                metadata_prefix='')
-            self.assertEqual(resp_meta['status'], '204')
-            # list container metadata
-            resp, _ = self.container_client.list_container_metadata(
-                self.container_name)
-            self.assertEqual(resp['status'], '204')
-            self.assertIn('x-container-write', resp)
-            self.assertEqual(resp['x-container-write'], '-*')
-
-            # trying to get auth token of alternative user
-            token = self.identity_client_alt.get_auth()
-            headers = {'Content-Type': 'application/json',
-                       'Accept': 'application/json',
-                       'X-Auth-Token': token}
-
-            # trying to create an object with another user's creds
-            object_name = rand_name(name='Object')
-            data = arbitrary_string(size=len(object_name),
-                                    base_text=object_name)
-            resp, body = self.custom_object_client.create_object(
-                self.container_name, object_name, data, metadata=headers)
-            self.assertEqual(resp['status'], '201')
-        except Exception as e:
-            self.fail("Failed to create public writable object with another"
-                      " user creds raised exception is %s" % e)
-        finally:
-            if resp_meta['status'] == '204':
-                # delete updated container metadata, to revert back.
-                resp, body = self.container_client.delete_container_metadata(
-                    self.container_name, metadata=cont_headers,
-                    metadata_prefix='')
-                resp, _ = self.container_client.list_container_metadata(
-                    self.container_name)
-                self.assertEqual(resp['status'], '204')
-                self.assertIn('x-container-write', resp)
-                self.assertEqual(resp['x-container-write'], 'x')
-
-    @attr(type='negative')
-    def test_access_object_without_using_creds(self):
-        # create object
-        object_name = rand_name(name='Object')
-        data = arbitrary_string(size=len(object_name),
-                                base_text=object_name)
-        resp, _ = self.object_client.create_object(self.container_name,
-                                                   object_name, data)
-        self.assertEqual(resp['status'], '201')
-        # trying to get object with empty headers
-        self.assertRaises(exceptions.Unauthorized,
-                          self.custom_object_client.get_object,
-                          self.container_name, object_name, metadata={})
-
     @attr(type='negative')
     def test_write_object_without_using_creds(self):
         # trying to create object with empty headers
@@ -578,3 +378,157 @@
         resp, body = self.object_client.get_object(
             self.container_name, object_name)
         self.assertEqual(data * segments, body)
+
+
+class PublicObjectTest(base.BaseObjectTest):
+    def setUp(self):
+        super(PublicObjectTest, self).setUp()
+        self.container_name = rand_name(name='TestContainer')
+        self.container_client.create_container(self.container_name)
+
+    def tearDown(self):
+        objlist = self.container_client.list_all_container_objects(
+            self.container_name)
+        # delete every object in the container
+        for obj in objlist:
+            resp, _ = self.object_client.delete_object(
+                self.container_name, obj['name'])
+        # delete the container
+        resp, _ = self.container_client.delete_container(self.container_name)
+        super(PublicObjectTest, self).tearDown()
+
+    @attr(type='smoke')
+    def test_access_public_container_object_without_using_creds(self):
+        # make container public-readable and access an object in it object
+        # anonymously, without using credentials
+
+        # update container metadata to make it publicly readable
+        cont_headers = {'X-Container-Read': '.r:*,.rlistings'}
+        resp_meta, body = self.container_client.update_container_metadata(
+            self.container_name, metadata=cont_headers, metadata_prefix='')
+        self.assertEqual(resp_meta['status'], '204')
+        # create object
+        object_name = rand_name(name='Object')
+        data = arbitrary_string(size=len(object_name),
+                                base_text=object_name)
+        resp, _ = self.object_client.create_object(self.container_name,
+                                                   object_name, data)
+        self.assertEqual(resp['status'], '201')
+
+        # list container metadata
+        resp_meta, _ = self.container_client.list_container_metadata(
+            self.container_name)
+        self.assertEqual(resp_meta['status'], '204')
+        self.assertIn('x-container-read', resp_meta)
+        self.assertEqual(resp_meta['x-container-read'], '.r:*,.rlistings')
+
+        # trying to get object with empty headers as it is public readable
+        resp, body = self.custom_object_client.get_object(
+            self.container_name, object_name, metadata={})
+        self.assertEqual(body, data)
+
+    @attr(type='smoke')
+    def test_access_public_object_with_another_user_creds(self):
+        # make container public-readable and access an object in it using
+        # another user's credentials
+        try:
+            cont_headers = {'X-Container-Read': '.r:*,.rlistings'}
+            resp_meta, body = self.container_client.update_container_metadata(
+                self.container_name, metadata=cont_headers,
+                metadata_prefix='')
+            self.assertEqual(resp_meta['status'], '204')
+            # create object
+            object_name = rand_name(name='Object')
+            data = arbitrary_string(size=len(object_name) * 1,
+                                    base_text=object_name)
+            resp, _ = self.object_client.create_object(self.container_name,
+                                                       object_name, data)
+            self.assertEqual(resp['status'], '201')
+
+            # list container metadata
+            resp, _ = self.container_client.list_container_metadata(
+                self.container_name)
+            self.assertEqual(resp['status'], '204')
+            self.assertIn('x-container-read', resp)
+            self.assertEqual(resp['x-container-read'], '.r:*,.rlistings')
+
+            # get auth token of alternative user
+            token = self.identity_client_alt.get_auth()
+            headers = {'X-Auth-Token': token}
+            # access object using alternate user creds
+            resp, body = self.custom_object_client.get_object(
+                self.container_name, object_name,
+                metadata=headers)
+            self.assertEqual(body, data)
+
+        except Exception as e:
+            self.fail("Failed to get public readable object with another"
+                      " user creds raised exception is %s" % e)
+
+    @testtools.skip('Until Bug #1020722 is resolved.')
+    @attr(type='smoke')
+    def test_write_public_object_without_using_creds(self):
+        # make container public-writable, and create object anonymously, e.g.
+        # without using credentials
+        try:
+            # update container metadata to make publicly writable
+            cont_headers = {'X-Container-Write': '-*'}
+            resp_meta, body = self.container_client.update_container_metadata(
+                self.container_name, metadata=cont_headers, metadata_prefix='')
+            self.assertEqual(resp_meta['status'], '204')
+            # list container metadata
+            resp, _ = self.container_client.list_container_metadata(
+                self.container_name)
+            self.assertEqual(resp['status'], '204')
+            self.assertIn('x-container-write', resp)
+            self.assertEqual(resp['x-container-write'], '-*')
+
+            object_name = rand_name(name='Object')
+            data = arbitrary_string(size=len(object_name),
+                                    base_text=object_name)
+            headers = {'Content-Type': 'application/json',
+                       'Accept': 'application/json'}
+            # create object as anonymous user
+            resp, body = self.custom_object_client.create_object(
+                self.container_name, object_name, data, metadata=headers)
+            self.assertEqual(resp['status'], '201')
+
+        except Exception as e:
+            self.fail("Failed to create public writable object without using"
+                      " creds raised exception is %s" % e)
+
+    @testtools.skip('Until Bug #1020722 is resolved.')
+    @attr(type='smoke')
+    def test_write_public_with_another_user_creds(self):
+        # make container public-writable, and create object with another user's
+        # credentials
+        try:
+            # update container metadata to make it publicly writable
+            cont_headers = {'X-Container-Write': '-*'}
+            resp_meta, body = self.container_client.update_container_metadata(
+                self.container_name, metadata=cont_headers,
+                metadata_prefix='')
+            self.assertEqual(resp_meta['status'], '204')
+            # list container metadata
+            resp, _ = self.container_client.list_container_metadata(
+                self.container_name)
+            self.assertEqual(resp['status'], '204')
+            self.assertIn('x-container-write', resp)
+            self.assertEqual(resp['x-container-write'], '-*')
+
+            # trying to get auth token of alternative user
+            token = self.identity_client_alt.get_auth()
+            headers = {'Content-Type': 'application/json',
+                       'Accept': 'application/json',
+                       'X-Auth-Token': token}
+
+            # trying to create an object with another user's creds
+            object_name = rand_name(name='Object')
+            data = arbitrary_string(size=len(object_name),
+                                    base_text=object_name)
+            resp, body = self.custom_object_client.create_object(
+                self.container_name, object_name, data, metadata=headers)
+            self.assertEqual(resp['status'], '201')
+        except Exception as e:
+            self.fail("Failed to create public writable object with another"
+                      " user creds raised exception is %s" % e)