Add admin credential config for network client.

 * Supports bug 1043980

Change-Id: I5ffc2d57a19e9f3a8112308998f0b957b7d93b1f
diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index cc91716..d537396 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -185,6 +185,17 @@
 # Catalog type of the Quantum Service
 catalog_type = network
 
+[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
diff --git a/tempest/config.py b/tempest/config.py
index 25fbbb9..60baa47 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -379,6 +379,26 @@
         return self.get("api_version", "v1.1")
 
 
+class NetworkAdminConfig(BaseConfig):
+
+    SECTION_NAME = "network-admin"
+
+    @property
+    def username(self):
+        """Administrative Username to use for Quantum  API requests."""
+        return self.get("username", "admin")
+
+    @property
+    def tenant_name(self):
+        """Administrative Tenant name to use for Quantum API requests."""
+        return self.get("tenant_name", "admin")
+
+    @property
+    def password(self):
+        """API key to use when authenticating as admin."""
+        return self.get("password", "pass")
+
+
 class VolumeConfig(BaseConfig):
     """Provides configuration information for connecting to an OpenStack Block
     Storage Service.
@@ -544,6 +564,7 @@
         self.identity_admin = IdentityAdminConfig(self._conf)
         self.images = ImagesConfig(self._conf)
         self.network = NetworkConfig(self._conf)
+        self.network_admin = NetworkAdminConfig(self._conf)
         self.volume = VolumeConfig(self._conf)
         self.object_storage = ObjectStorageConfig(self._conf)
         self.boto = BotoConfig(self._conf)
diff --git a/tempest/manager.py b/tempest/manager.py
index a17aa21..8f8c0f8 100644
--- a/tempest/manager.py
+++ b/tempest/manager.py
@@ -166,10 +166,15 @@
                                                  auth_url=auth_url)
 
     def _get_network_client(self):
-        # TODO(mnewby) add network-specific auth configuration
-        username = self.config.compute.username
-        password = self.config.compute.password
-        tenant_name = self.config.compute.tenant_name
+        # The intended configuration is for the network client to have
+        # admin privileges and indicate for whom resources are being
+        # created via a 'tenant_id' parameter.  This will often be
+        # 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
 
         if None in (username, password, tenant_name):
             msg = ("Missing required credentials for network client. "