Merge "bug 1101184 add new test: verify new n/w visible"
diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index 8429cd0..f837e69 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -155,13 +155,6 @@
 # Port that the Image API is running on
 port = 9292
 
-# This should be the username of a user WITHOUT administrative privileges
-username = demo
-# The above non-administrative user's password
-password = pass
-# The above non-administrative user's tenant name
-tenant_name = demo
-
 [compute-admin]
 # This section contains configuration options for an administrative
 # user of the Compute API. These options are used in tests that stress
@@ -210,29 +203,6 @@
 # for each tenant to have their own router.
 public_router_id = {$PUBLIC_ROUTER_ID}
 
-[network-admin]
-# This section contains configuration options for an administrative
-# user of the Network API.
-
-# This should be the username of a user WITH administrative privileges
-username = admin
-# The above administrative user's password
-password = pass
-# The above administrative user's tenant name
-tenant_name = admin
-
-[identity-admin]
-# This section contains configuration options for an administrative
-# user of the Compute API. These options are used in tests that stress
-# the admin-only parts of the Compute API
-
-# This should be the username of a user WITH administrative privileges
-username = admin
-# The above administrative user's password
-password = pass
-# The above administrative user's tenant name
-tenant_name = admin
-
 [volume]
 # This section contains the configuration options used when executing tests
 # against the OpenStack Block Storage API service
diff --git a/tempest/clients.py b/tempest/clients.py
index ac163b6..801bdcf 100644
--- a/tempest/clients.py
+++ b/tempest/clients.py
@@ -51,10 +51,10 @@
     VolumesExtensionsClientXML
 from tempest.services.compute.xml.console_output_client import \
     ConsoleOutputsClientXML
-from tempest.services.identity.json.admin_client import AdminClientJSON
-from tempest.services.identity.json.admin_client import TokenClientJSON
-from tempest.services.identity.xml.admin_client import AdminClientXML
-from tempest.services.identity.xml.admin_client import TokenClientXML
+from tempest.services.identity.json.identity_client import IdentityClientJSON
+from tempest.services.identity.json.identity_client import TokenClientJSON
+from tempest.services.identity.xml.identity_client import IdentityClientXML
+from tempest.services.identity.xml.identity_client import TokenClientXML
 from tempest.services.image import service as image_service
 from tempest.services.network.json.network_client import NetworkClient
 from tempest.services.object_storage.account_client import AccountClient
@@ -114,9 +114,9 @@
     "xml": VolumesClientXML,
 }
 
-ADMIN_CLIENT = {
-    "json": AdminClientJSON,
-    "xml": AdminClientXML,
+IDENTITY_CLIENT = {
+    "json": IdentityClientJSON,
+    "xml": IdentityClientXML,
 }
 
 TOKEN_CLIENT = {
@@ -187,7 +187,7 @@
             self.volumes_extensions_client = vol_ext_cli
             self.floating_ips_client = FLOAT_CLIENTS[interface](*client_args)
             self.volumes_client = VOLUMES_CLIENTS[interface](*client_args)
-            self.admin_client = ADMIN_CLIENT[interface](*client_args)
+            self.identity_client = IDENTITY_CLIENT[interface](*client_args)
             self.token_client = TOKEN_CLIENT[interface](self.config)
             self.security_groups_client = \
                 SECURITY_GROUPS_CLIENT[interface](*client_args)
@@ -208,6 +208,21 @@
             AccountClientCustomizedHeader(*client_args)
 
 
+class NonAdminManager(Manager):
+
+    """
+    Manager object that uses the alt_XXX credentials for its
+    managed client objects
+    """
+
+    def __init__(self, interface='json'):
+        conf = config.TempestConfig()
+        super(NonAdminManager, self).__init__(conf.compute.username,
+                                              conf.compute.password,
+                                              conf.compute.tenant_name,
+                                              interface=interface)
+
+
 class AltManager(Manager):
 
     """
@@ -248,33 +263,3 @@
         self.services = {}
         self.services['image'] = image_service.Service(self.config)
         self.images = self.services['image']
-
-
-class IdentityManager(Manager):
-
-    """
-    Manager object that uses the alt_XXX credentials for its
-    managed client objects
-    """
-
-    def __init__(self, interface='json'):
-        conf = config.TempestConfig()
-        super(IdentityManager, self).__init__(conf.identity_admin.username,
-                                              conf.identity_admin.password,
-                                              conf.identity_admin.tenant_name,
-                                              interface)
-
-
-class IdentityNaManager(Manager):
-
-    """
-    Manager object that uses the alt_XXX credentials for its
-    managed client objects
-    """
-
-    def __init__(self, interface='json'):
-        conf = config.TempestConfig()
-        super(IdentityNaManager, self).__init__(conf.compute.username,
-                                                conf.compute.password,
-                                                conf.compute.tenant_name,
-                                                interface)
diff --git a/tempest/common/utils/data_utils.py b/tempest/common/utils/data_utils.py
index 3a7661c..82982b8 100644
--- a/tempest/common/utils/data_utils.py
+++ b/tempest/common/utils/data_utils.py
@@ -27,6 +27,10 @@
     return name + str(random.randint(1, 999999))
 
 
+def rand_int_id(start=0, end=999999):
+    return random.randint(start, end)
+
+
 def build_url(host, port, api_version=None, path=None,
               params=None, use_ssl=False):
     """Build the request URL from given host, port, path and parameters."""
@@ -60,7 +64,7 @@
 
 def parse_image_id(image_ref):
     """Return the image id from a given image ref."""
-    return  image_ref.rsplit('/')[-1]
+    return image_ref.rsplit('/')[-1]
 
 
 def arbitrary_string(size=4, base_text=None):
diff --git a/tempest/config.py b/tempest/config.py
index 70b1c79..a7b9d27 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -79,29 +79,6 @@
         conf.identity.uri = authurl
 
 
-identity_admin_group = cfg.OptGroup(name='identity-admin',
-                                    title="Identity Admin Options")
-
-IdentityAdminGroup = [
-    cfg.StrOpt('username',
-               default='admin',
-               help="Username to use for Identity Admin API requests"),
-    cfg.StrOpt('tenant_name',
-               default='admin',
-               help="Tenant name to use for Identity Admin API requests"),
-    cfg.StrOpt('password',
-               default='pass',
-               help="API key to use for Identity Admin API requests",
-               secret=True),
-]
-
-
-def register_identity_admin_opts(conf):
-    conf.register_group(identity_admin_group)
-    for opt in IdentityAdminGroup:
-        conf.register_opt(opt, group='identity-admin')
-
-
 compute_group = cfg.OptGroup(name='compute',
                              title='Compute Service Options')
 
@@ -273,18 +250,6 @@
     cfg.StrOpt('api_version',
                default='1',
                help="Version of the API"),
-    cfg.StrOpt('username',
-               default='demo',
-               help="Username to use for Images API requests. Defaults to "
-                    "'demo'."),
-    cfg.StrOpt('password',
-               default='pass',
-               help="Password for user",
-               secret=True),
-    cfg.StrOpt('tenant_name',
-               default="demo",
-               help="Tenant to use for Images API requests. Defaults to "
-                    "'demo'."),
 ]
 
 
@@ -304,16 +269,6 @@
     cfg.StrOpt('api_version',
                default="v1.1",
                help="Version of Quantum API"),
-    cfg.StrOpt('username',
-               default="demo",
-               help="Username to use for Quantum API requests."),
-    cfg.StrOpt('tenant_name',
-               default="demo",
-               help="Tenant name to use for Quantum API requests."),
-    cfg.StrOpt('password',
-               default="pass",
-               help="API key to use when authenticating as admin.",
-               secret=True),
     cfg.StrOpt('tenant_network_cidr',
                default="10.100.0.0/16",
                help="The cidr block to allocate tenant networks from"),
@@ -340,31 +295,6 @@
     for opt in NetworkGroup:
         conf.register_opt(opt, group='network')
 
-network_admin_group = cfg.OptGroup(name='network-admin',
-                                   title="Network Admin Options")
-
-NetworkAdminGroup = [
-    cfg.StrOpt('username',
-               default='admin',
-               help="Administrative Username to use for Quantum API "
-                    "requests."),
-    cfg.StrOpt('tenant_name',
-               default='admin',
-               help="Administrative Tenant name to use for Quantum API "
-                    "requests."),
-    cfg.StrOpt('password',
-               default='pass',
-               help="API key to use when authenticating as admin.",
-               secret=True),
-]
-
-
-def register_network_admin_opts(conf):
-    conf.register_group(network_admin_group)
-    for opt in NetworkAdminGroup:
-        conf.register_opt(opt, group='network-admin')
-
-
 volume_group = cfg.OptGroup(name='volume',
                             title='Block Storage Options')
 
@@ -510,21 +440,17 @@
 
         register_compute_opts(cfg.CONF)
         register_identity_opts(cfg.CONF)
-        register_identity_admin_opts(cfg.CONF)
         register_compute_admin_opts(cfg.CONF)
         register_image_opts(cfg.CONF)
         register_network_opts(cfg.CONF)
-        register_network_admin_opts(cfg.CONF)
         register_volume_opts(cfg.CONF)
         register_object_storage_opts(cfg.CONF)
         register_boto_opts(cfg.CONF)
         self.compute = cfg.CONF.compute
         self.compute_admin = cfg.CONF['compute-admin']
         self.identity = cfg.CONF.identity
-        self.identity_admin = cfg.CONF['identity-admin']
         self.images = cfg.CONF.image
         self.network = cfg.CONF.network
-        self.network_admin = cfg.CONF['network-admin']
         self.volume = cfg.CONF.volume
         self.object_storage = cfg.CONF['object-storage']
         self.boto = cfg.CONF.boto
diff --git a/tempest/manager.py b/tempest/manager.py
index 8e7cbd1..ef9eed4 100644
--- a/tempest/manager.py
+++ b/tempest/manager.py
@@ -153,17 +153,18 @@
         # This identity client is not intended to check the security
         # of the identity service, so use admin credentials by default.
         if not username:
-            username = self.config.identity_admin.username
+            username = self.config.compute_admin.username
         if not password:
-            password = self.config.identity_admin.password
+            password = self.config.compute_admin.password
         if not tenant_name:
-            tenant_name = self.config.identity_admin.tenant_name
+            tenant_name = self.config.compute_admin.tenant_name
 
         if None in (username, password, tenant_name):
             msg = ("Missing required credentials for identity client. "
                    "username: %(username)s, password: %(password)s, "
                    "tenant_name: %(tenant_name)s") % locals()
             raise exceptions.InvalidConfiguration(msg)
+        #TODO(afazekas): Above is a code dpulication, net to be resolved
 
         auth_url = self.config.identity.uri
         dscv = self.config.identity.disable_ssl_certificate_validation
@@ -181,9 +182,9 @@
         # preferable to authenticating as a specific user because
         # working with certain resources (public routers and networks)
         # often requires admin privileges anyway.
-        username = self.config.network_admin.username
-        password = self.config.network_admin.password
-        tenant_name = self.config.network_admin.tenant_name
+        username = self.config.compute_admin.username
+        password = self.config.compute_admin.password
+        tenant_name = self.config.compute_admin.tenant_name
 
         if None in (username, password, tenant_name):
             msg = ("Missing required credentials for network client. "
diff --git a/tempest/services/boto/__init__.py b/tempest/services/boto/__init__.py
index 83bf1f9..f744d9d 100644
--- a/tempest/services/boto/__init__.py
+++ b/tempest/services/boto/__init__.py
@@ -96,4 +96,4 @@
             else:
                 raise InvalidConfiguration(
                                     "Unable to get access and secret keys")
-        return  self.connect_method(**self.connection_data)
+        return self.connect_method(**self.connection_data)
diff --git a/tempest/services/identity/json/admin_client.py b/tempest/services/identity/json/identity_client.py
similarity index 97%
rename from tempest/services/identity/json/admin_client.py
rename to tempest/services/identity/json/identity_client.py
index 7b1cb4b..9cc30d9 100644
--- a/tempest/services/identity/json/admin_client.py
+++ b/tempest/services/identity/json/identity_client.py
@@ -5,11 +5,11 @@
 from tempest import exceptions
 
 
-class AdminClientJSON(RestClient):
+class IdentityClientJSON(RestClient):
 
     def __init__(self, config, username, password, auth_url, tenant_name=None):
-        super(AdminClientJSON, self).__init__(config, username, password,
-                                              auth_url, tenant_name)
+        super(IdentityClientJSON, self).__init__(config, username, password,
+                                                 auth_url, tenant_name)
         self.service = self.config.identity.catalog_type
         self.endpoint_url = 'adminURL'
 
diff --git a/tempest/services/identity/xml/admin_client.py b/tempest/services/identity/xml/identity_client.py
similarity index 98%
rename from tempest/services/identity/xml/admin_client.py
rename to tempest/services/identity/xml/identity_client.py
index 1c71d87..02be91e 100644
--- a/tempest/services/identity/xml/admin_client.py
+++ b/tempest/services/identity/xml/identity_client.py
@@ -33,11 +33,11 @@
 XMLNS = "http://docs.openstack.org/identity/api/v2.0"
 
 
-class AdminClientXML(RestClientXML):
+class IdentityClientXML(RestClientXML):
 
     def __init__(self, config, username, password, auth_url, tenant_name=None):
-        super(AdminClientXML, self).__init__(config, username, password,
-                                             auth_url, tenant_name)
+        super(IdentityClientXML, self).__init__(config, username, password,
+                                                auth_url, tenant_name)
         self.service = self.config.identity.catalog_type
         self.endpoint_url = 'adminURL'
 
diff --git a/tempest/services/image/service.py b/tempest/services/image/service.py
index cf4ff4d..270bf03 100644
--- a/tempest/services/image/service.py
+++ b/tempest/services/image/service.py
@@ -44,9 +44,9 @@
             dscv = self.config.identity.disable_ssl_certificate_validation
             auth_url = self.config.identity.uri
             keystone = keystoneclient.v2_0.client.Client(
-                    username=config.images.username,
-                    password=config.images.password,
-                    tenant_name=config.images.tenant_name,
+                    username=config.compute.username,
+                    password=config.compute.password,
+                    tenant_name=config.compute.tenant_name,
                     auth_url=auth_url,
                     insecure=dscv)
             token = keystone.auth_token
diff --git a/tempest/services/object_storage/object_client.py b/tempest/services/object_storage/object_client.py
index 2256170..edfb234 100644
--- a/tempest/services/object_storage/object_client.py
+++ b/tempest/services/object_storage/object_client.py
@@ -140,6 +140,12 @@
         resp, body = self.get(url)
         return resp, body
 
+    def create_object_segments(self, container, object_name, segment, data):
+        """Creates object segments."""
+        url = "{0}/{1}/{2}".format(container, object_name, segment)
+        resp, body = self.put(url, data, self.headers)
+        return resp, body
+
 
 class ObjectClientCustomizedHeader(RestClient):
 
diff --git a/tempest/tests/boto/__init__.py b/tempest/tests/boto/__init__.py
index 62918c2..ec51b18 100644
--- a/tempest/tests/boto/__init__.py
+++ b/tempest/tests/boto/__init__.py
@@ -85,7 +85,7 @@
         s3client = openstack.s3_client
         try:
             s3client.get_bucket("^INVALID*#()@INVALID.")
-        except  boto.exception.BotoServerError as exc:
+        except boto.exception.BotoServerError as exc:
             if exc.status == 403:
                 _cred_sub_check(s3client.connection_data)
     except Exception as exc:
diff --git a/tempest/tests/compute/admin/test_flavors.py b/tempest/tests/compute/admin/test_flavors.py
index 8172bd4..4859308 100644
--- a/tempest/tests/compute/admin/test_flavors.py
+++ b/tempest/tests/compute/admin/test_flavors.py
@@ -19,6 +19,8 @@
 from nose.plugins.attrib import attr
 import unittest2 as unittest
 
+from tempest.common.utils.data_utils import rand_int_id
+from tempest.common.utils.data_utils import rand_name
 from tempest.tests import compute
 from tempest.tests.compute import base
 
@@ -36,12 +38,11 @@
             raise nose.SkipTest(msg)
 
         cls.client = cls.os.flavors_client
-        cls.flavor_name = 'test_flavor'
+        cls.flavor_name_prefix = 'test_flavor_'
         cls.ram = 512
         cls.vcpus = 1
         cls.disk = 10
         cls.ephemeral = 10
-        cls.new_flavor_id = 1234
         cls.swap = 1024
         cls.rxtx = 2
 
@@ -49,21 +50,24 @@
     def test_create_flavor(self):
         # Create a flavor and ensure it is listed
         # This operation requires the user to have 'admin' role
+        flavor_name = rand_name(self.flavor_name_prefix)
+        new_flavor_id = rand_int_id(start=1000)
+
         try:
             #Create the flavor
-            resp, flavor = self.client.create_flavor(self.flavor_name,
+            resp, flavor = self.client.create_flavor(flavor_name,
                                                      self.ram, self.vcpus,
                                                      self.disk,
-                                                     self.new_flavor_id,
+                                                     new_flavor_id,
                                                      ephemeral=self.ephemeral,
                                                      swap=self.swap,
                                                      rxtx=self.rxtx)
             self.assertEqual(200, resp.status)
-            self.assertEqual(flavor['name'], self.flavor_name)
+            self.assertEqual(flavor['name'], flavor_name)
             self.assertEqual(flavor['vcpus'], self.vcpus)
             self.assertEqual(flavor['disk'], self.disk)
             self.assertEqual(flavor['ram'], self.ram)
-            self.assertEqual(int(flavor['id']), self.new_flavor_id)
+            self.assertEqual(int(flavor['id']), new_flavor_id)
             self.assertEqual(flavor['swap'], self.swap)
             self.assertEqual(flavor['rxtx_factor'], self.rxtx)
             self.assertEqual(flavor['OS-FLV-EXT-DATA:ephemeral'],
@@ -77,26 +81,29 @@
                 self.assertEqual(flavor['os-flavor-access:is_public'], True)
 
             #Verify flavor is retrieved
-            resp, flavor = self.client.get_flavor_details(self.new_flavor_id)
+            resp, flavor = self.client.get_flavor_details(new_flavor_id)
             self.assertEqual(resp.status, 200)
-            self.assertEqual(flavor['name'], self.flavor_name)
+            self.assertEqual(flavor['name'], flavor_name)
 
         finally:
             #Delete the flavor
-            resp, body = self.client.delete_flavor(self.new_flavor_id)
+            resp, body = self.client.delete_flavor(new_flavor_id)
             self.assertEqual(resp.status, 202)
-            self.client.wait_for_resource_deletion(self.new_flavor_id)
+            self.client.wait_for_resource_deletion(new_flavor_id)
 
     @attr(type='positive')
     def test_create_flavor_verify_entry_in_list_details(self):
         # Create a flavor and ensure it's details are listed
         # This operation requires the user to have 'admin' role
+        flavor_name = rand_name(self.flavor_name_prefix)
+        new_flavor_id = rand_int_id(start=1000)
+
         try:
             #Create the flavor
-            resp, flavor = self.client.create_flavor(self.flavor_name,
+            resp, flavor = self.client.create_flavor(flavor_name,
                                                      self.ram, self.vcpus,
                                                      self.disk,
-                                                     self.new_flavor_id,
+                                                     new_flavor_id,
                                                      ephemeral=self.ephemeral,
                                                      swap=self.swap,
                                                      rxtx=self.rxtx)
@@ -105,62 +112,68 @@
             resp, flavors = self.client.list_flavors_with_detail()
             self.assertEqual(resp.status, 200)
             for flavor in flavors:
-                if flavor['name'] == self.flavor_name:
+                if flavor['name'] == flavor_name:
                     flag = True
             self.assertTrue(flag)
 
         finally:
             #Delete the flavor
-            resp, body = self.client.delete_flavor(self.new_flavor_id)
+            resp, body = self.client.delete_flavor(new_flavor_id)
             self.assertEqual(resp.status, 202)
-            self.client.wait_for_resource_deletion(self.new_flavor_id)
+            self.client.wait_for_resource_deletion(new_flavor_id)
 
     @attr(type='negative')
     def test_get_flavor_details_for_deleted_flavor(self):
         # Delete a flavor and ensure it is not listed
         # Create a test flavor
-        resp, flavor = self.client.create_flavor(self.flavor_name,
+        flavor_name = rand_name(self.flavor_name_prefix)
+        new_flavor_id = rand_int_id(start=1000)
+
+        resp, flavor = self.client.create_flavor(flavor_name,
                                                  self.ram,
                                                  self.vcpus, self.disk,
-                                                 self.new_flavor_id,
+                                                 new_flavor_id,
                                                  ephemeral=self.ephemeral,
                                                  swap=self.swap,
                                                  rxtx=self.rxtx)
         self.assertEquals(200, resp.status)
 
         # Delete the flavor
-        resp, _ = self.client.delete_flavor(self.new_flavor_id)
+        resp, _ = self.client.delete_flavor(new_flavor_id)
         self.assertEqual(resp.status, 202)
 
         # Deleted flavors can be seen via detailed GET
-        resp, flavor = self.client.get_flavor_details(self.new_flavor_id)
+        resp, flavor = self.client.get_flavor_details(new_flavor_id)
         self.assertEqual(resp.status, 200)
-        self.assertEqual(flavor['name'], self.flavor_name)
+        self.assertEqual(flavor['name'], flavor_name)
 
         # Deleted flavors should not show up in a list however
         resp, flavors = self.client.list_flavors_with_detail()
         self.assertEqual(resp.status, 200)
         flag = True
         for flavor in flavors:
-            if flavor['name'] == self.flavor_name:
+            if flavor['name'] == flavor_name:
                 flag = False
         self.assertTrue(flag)
 
     def test_create_list_flavor_without_extra_data(self):
         #Create a flavor and ensure it is listed
         #This operation requires the user to have 'admin' role
+        flavor_name = rand_name(self.flavor_name_prefix)
+        new_flavor_id = rand_int_id(start=1000)
+
         try:
             #Create the flavor
-            resp, flavor = self.client.create_flavor(self.flavor_name,
+            resp, flavor = self.client.create_flavor(flavor_name,
                                                      self.ram, self.vcpus,
                                                      self.disk,
-                                                     self.new_flavor_id)
+                                                     new_flavor_id)
             self.assertEqual(200, resp.status)
-            self.assertEqual(flavor['name'], self.flavor_name)
+            self.assertEqual(flavor['name'], flavor_name)
             self.assertEqual(flavor['ram'], self.ram)
             self.assertEqual(flavor['vcpus'], self.vcpus)
             self.assertEqual(flavor['disk'], self.disk)
-            self.assertEqual(int(flavor['id']), self.new_flavor_id)
+            self.assertEqual(int(flavor['id']), new_flavor_id)
             self.assertEqual(flavor['swap'], '')
             self.assertEqual(int(flavor['rxtx_factor']), 1)
             self.assertEqual(int(flavor['OS-FLV-EXT-DATA:ephemeral']), 0)
@@ -173,57 +186,63 @@
                 self.assertEqual(flavor['os-flavor-access:is_public'], True)
 
             #Verify flavor is retrieved
-            resp, flavor = self.client.get_flavor_details(self.new_flavor_id)
+            resp, flavor = self.client.get_flavor_details(new_flavor_id)
             self.assertEqual(resp.status, 200)
-            self.assertEqual(flavor['name'], self.flavor_name)
+            self.assertEqual(flavor['name'], flavor_name)
             #Check if flavor is present in list
             resp, flavors = self.client.list_flavors_with_detail()
             self.assertEqual(resp.status, 200)
             for flavor in flavors:
-                if flavor['name'] == self.flavor_name:
+                if flavor['name'] == flavor_name:
                     flag = True
             self.assertTrue(flag)
 
         finally:
             #Delete the flavor
-            resp, body = self.client.delete_flavor(self.new_flavor_id)
+            resp, body = self.client.delete_flavor(new_flavor_id)
             self.assertEqual(resp.status, 202)
-            self.client.wait_for_resource_deletion(self.new_flavor_id)
+            self.client.wait_for_resource_deletion(new_flavor_id)
 
     @attr(type='positive')
     def test_flavor_not_public_verify_entry_not_in_list_details(self):
         #Create a flavor with os-flavor-access:is_public false should not
         #be present in list_details.
         #This operation requires the user to have 'admin' role
+        flavor_name = rand_name(self.flavor_name_prefix)
+        new_flavor_id = rand_int_id(start=1000)
+
         try:
             #Create the flavor
-            resp, flavor = self.client.create_flavor(self.flavor_name,
+            resp, flavor = self.client.create_flavor(flavor_name,
                                                      self.ram, self.vcpus,
                                                      self.disk,
-                                                     self.new_flavor_id,
+                                                     new_flavor_id,
                                                      is_public="False")
             flag = False
             #Verify flavor is retrieved
             resp, flavors = self.client.list_flavors_with_detail()
             self.assertEqual(resp.status, 200)
             for flavor in flavors:
-                if flavor['name'] == self.flavor_name:
+                if flavor['name'] == flavor_name:
                     flag = True
             self.assertFalse(flag)
         finally:
             #Delete the flavor
-            resp, body = self.client.delete_flavor(self.new_flavor_id)
+            resp, body = self.client.delete_flavor(new_flavor_id)
             self.assertEqual(resp.status, 202)
 
     def test_list_public_flavor_with_other_user(self):
         #Create a Flavor with public access.
         #Try to List/Get flavor with another user
+        flavor_name = rand_name(self.flavor_name_prefix)
+        new_flavor_id = rand_int_id(start=1000)
+
         try:
             #Create the flavor
-            resp, flavor = self.client.create_flavor(self.flavor_name,
+            resp, flavor = self.client.create_flavor(flavor_name,
                                                      self.ram, self.vcpus,
                                                      self.disk,
-                                                     self.new_flavor_id,
+                                                     new_flavor_id,
                                                      is_public="True")
             flag = False
             self.new_client = self.flavors_client
@@ -231,14 +250,14 @@
             resp, flavors = self.new_client.list_flavors_with_detail()
             self.assertEqual(resp.status, 200)
             for flavor in flavors:
-                if flavor['name'] == self.flavor_name:
+                if flavor['name'] == flavor_name:
                     flag = True
             self.assertTrue(flag)
         finally:
             #Delete the flavor
-            resp, body = self.client.delete_flavor(self.new_flavor_id)
+            resp, body = self.client.delete_flavor(new_flavor_id)
             self.assertEqual(resp.status, 202)
-            self.client.wait_for_resource_deletion(self.new_flavor_id)
+            self.client.wait_for_resource_deletion(new_flavor_id)
 
 
 class FlavorsAdminTestXML(base.BaseComputeAdminTestXML,
diff --git a/tempest/tests/compute/base.py b/tempest/tests/compute/base.py
index c44a2f1..ae7c5ab 100644
--- a/tempest/tests/compute/base.py
+++ b/tempest/tests/compute/base.py
@@ -78,8 +78,8 @@
         """
         Returns an instance of the Identity Admin API client
         """
-        os = clients.IdentityManager(interface=cls._interface)
-        admin_client = os.admin_client
+        os = clients.AdminManager(interface=cls._interface)
+        admin_client = os.identity_client
         return admin_client
 
     @classmethod
@@ -87,8 +87,8 @@
 
         return (
             cls.config,
-            cls.config.identity_admin.username,
-            cls.config.identity_admin.password,
+            cls.config.compute_admin.username,
+            cls.config.compute_admin.password,
             cls.config.identity.uri
         )
 
diff --git a/tempest/tests/compute/flavors/test_flavors.py b/tempest/tests/compute/flavors/test_flavors.py
index 53cad65..298984f 100644
--- a/tempest/tests/compute/flavors/test_flavors.py
+++ b/tempest/tests/compute/flavors/test_flavors.py
@@ -104,7 +104,7 @@
         flavors = sorted(flavors, key=lambda k: k['ram'])
         flavor_id = flavors[0]['id']
 
-        params = {'minRam': flavors[1]['ram']}
+        params = {'minRam': flavors[0]['ram'] + 1}
         resp, flavors = self.client.list_flavors_with_detail(params)
         self.assertFalse(any([i for i in flavors if i['id'] == flavor_id]))
 
@@ -126,7 +126,7 @@
         flavors = sorted(flavors, key=lambda k: k['ram'])
         flavor_id = flavors[0]['id']
 
-        params = {'minRam': flavors[1]['ram']}
+        params = {'minRam': flavors[0]['ram'] + 1}
         resp, flavors = self.client.list_flavors(params)
         self.assertFalse(any([i for i in flavors if i['id'] == flavor_id]))
 
diff --git a/tempest/tests/compute/servers/test_servers.py b/tempest/tests/compute/servers/test_servers.py
index 3566ef4..8054c1f 100644
--- a/tempest/tests/compute/servers/test_servers.py
+++ b/tempest/tests/compute/servers/test_servers.py
@@ -132,14 +132,14 @@
             #Update the IPv4 and IPv6 access addresses
             resp, body = self.client.update_server(server['id'],
                                                    accessIPv4='1.1.1.1',
-                                                   accessIPv6='::babe:2.2.2.2')
+                                                   accessIPv6='::babe:202:202')
             self.assertEqual(200, resp.status)
             self.client.wait_for_server_status(server['id'], 'ACTIVE')
 
             #Verify the access addresses have been updated
             resp, server = self.client.get_server(server['id'])
             self.assertEqual('1.1.1.1', server['accessIPv4'])
-            self.assertEqual('::babe:2.2.2.2', server['accessIPv6'])
+            self.assertEqual('::babe:202:202', server['accessIPv6'])
 
         #Teardown
         finally:
diff --git a/tempest/tests/compute/servers/test_servers_negative.py b/tempest/tests/compute/servers/test_servers_negative.py
index dfe5944..f7624b3 100644
--- a/tempest/tests/compute/servers/test_servers_negative.py
+++ b/tempest/tests/compute/servers/test_servers_negative.py
@@ -176,7 +176,7 @@
         # Pass invalid network uuid while creating a server
 
         server_name = rand_name('server')
-        networks = [{'fixed_ip': '10.0.1.1', 'uuid':'a-b-c-d-e-f-g-h-i-j'}]
+        networks = [{'fixed_ip': '10.0.1.1', 'uuid': 'a-b-c-d-e-f-g-h-i-j'}]
 
         self.assertRaises(exceptions.BadRequest,
                           self.create_server_with_extras,
diff --git a/tempest/tests/compute/test_live_block_migration.py b/tempest/tests/compute/test_live_block_migration.py
index 915868c..eceaaba 100644
--- a/tempest/tests/compute/test_live_block_migration.py
+++ b/tempest/tests/compute/test_live_block_migration.py
@@ -43,7 +43,7 @@
     def setUpClass(cls):
         super(LiveBlockMigrationTest, cls).setUpClass()
 
-        tenant_name = cls.config.identity_admin.tenant_name
+        tenant_name = cls.config.compute_admin.tenant_name
         cls.admin_hosts_client = HostsClientJSON(
             *cls._get_client_args(), tenant_name=tenant_name)
 
diff --git a/tempest/tests/identity/base.py b/tempest/tests/identity/base.py
index 8fee7ef..125e46c 100644
--- a/tempest/tests/identity/base.py
+++ b/tempest/tests/identity/base.py
@@ -26,8 +26,8 @@
 
     @classmethod
     def setUpClass(cls):
-        os = clients.IdentityManager(interface=cls._interface)
-        cls.client = os.admin_client
+        os = clients.AdminManager(interface=cls._interface)
+        cls.client = os.identity_client
         cls.token_client = os.token_client
 
         if not cls.client.has_admin_extensions():
@@ -35,8 +35,8 @@
 
         cls.data = DataGenerator(cls.client)
 
-        os = clients.IdentityNaManager(interface=cls._interface)
-        cls.non_admin_client = os.admin_client
+        os = clients.NonAdminManager(interface=cls._interface)
+        cls.non_admin_client = os.identity_client
 
     @classmethod
     def tearDownClass(cls):
diff --git a/tempest/tests/object_storage/base.py b/tempest/tests/object_storage/base.py
index 10e2269..5e3d0bc 100644
--- a/tempest/tests/object_storage/base.py
+++ b/tempest/tests/object_storage/base.py
@@ -34,16 +34,16 @@
         cls.account_client = cls.os.account_client
         cls.config = cls.os.config
         cls.custom_object_client = cls.os.custom_object_client
-        cls.os_admin = clients.IdentityManager()
+        cls.os_admin = clients.AdminManager()
         cls.token_client = cls.os_admin.token_client
-        cls.admin_client = cls.os_admin.admin_client
+        cls.identity_admin_client = cls.os_admin.identity_client
         cls.custom_account_client = cls.os.custom_account_client
         cls.os_alt = clients.AltManager()
         cls.object_client_alt = cls.os_alt.object_client
         cls.container_client_alt = cls.os_alt.container_client
-        cls.admin_client_alt = cls.os_alt.admin_client
+        cls.identity_client_alt = cls.os_alt.identity_client
 
-        cls.data = DataGenerator(cls.admin_client)
+        cls.data = DataGenerator(cls.identity_admin_client)
 
         try:
             cls.account_client.list_account_containers()
diff --git a/tempest/tests/object_storage/test_object_services.py b/tempest/tests/object_storage/test_object_services.py
index fc3f45f..2733c38 100644
--- a/tempest/tests/object_storage/test_object_services.py
+++ b/tempest/tests/object_storage/test_object_services.py
@@ -366,7 +366,7 @@
             self.assertEqual(resp['x-container-read'], '.r:*,.rlistings')
 
             # Trying to GET Auth Token of Alternate user
-            token = self.admin_client_alt.get_auth()
+            token = self.identity_client_alt.get_auth()
             headers = {'X-Auth-Token': token}
 
             # Trying to create object with Alternate user creds
@@ -475,7 +475,7 @@
             self.assertEqual(resp['x-container-write'], '-*')
 
             #Trying to GET auth token of Alternate user
-            token = self.admin_client_alt.get_auth()
+            token = self.identity_client_alt.get_auth()
 
             headers = {'Content-Type': 'application/json',
                        'Accept': 'application/json',
@@ -656,3 +656,40 @@
                         metadata=metadata)
                 resp, _ = self.account_client.list_account_metadata()
                 self.assertNotIn('x-account-meta-temp-url-key', resp)
+
+    @attr(type='positive')
+    def test_object_upload_in_segments(self):
+        #Attempt to upload object in segments
+
+        #Create Object
+        object_name = rand_name(name='LObject')
+        data = arbitrary_string(size=len(object_name),
+                                base_text=object_name)
+        segments = 10
+        self.object_client.create_object(self.container_name,
+                                         object_name, data)
+        #Uploading 10 segments
+        for i in range(segments):
+            resp, _ = \
+                self.object_client.create_object_segments(self.container_name,
+                                                          object_name, i, data)
+        # Creating a Manifest File (Metadata Update)
+
+        metadata = {'X-Object-Manifest': '%s/%s/'
+                    % (self.container_name, object_name)}
+        resp, _ = \
+            self.object_client.update_object_metadata(self.container_name,
+                                                      object_name, metadata,
+                                                      metadata_prefix='')
+        resp, _ = \
+            self.object_client.list_object_metadata(self.container_name,
+                                                    object_name)
+        self.assertIn('x-object-manifest', resp)
+        self.assertEqual(resp['x-object-manifest'],
+                         '%s/%s/' % (self.container_name, object_name))
+
+        #Downloading the object
+        resp, body = \
+            self.object_client.get_object(self.container_name, object_name)
+
+        self.assertEqual(data * segments, body)
diff --git a/tempest/tests/volume/base.py b/tempest/tests/volume/base.py
index 8657db8..1b35170 100644
--- a/tempest/tests/volume/base.py
+++ b/tempest/tests/volume/base.py
@@ -73,8 +73,8 @@
         """
         Returns an instance of the Identity Admin API client
         """
-        os = clients.IdentityManager()
-        return os.admin_client
+        os = clients.AdminManager()
+        return os.identity_client
 
     @classmethod
     def _get_isolated_creds(cls):