Merge "Refactor the subnetpools API tests"
diff --git a/neutron/tests/tempest/auth.py b/neutron/tests/tempest/auth.py
index fc43597..a9fdb03 100644
--- a/neutron/tests/tempest/auth.py
+++ b/neutron/tests/tempest/auth.py
@@ -20,14 +20,11 @@
 import re
 import urlparse
 
-from oslo_log import log as logging
 import six
 
 from tempest_lib.services.identity.v2 import token_client as json_v2id
 from tempest_lib.services.identity.v3 import token_client as json_v3id
 
-LOG = logging.getLogger(__name__)
-
 
 @six.add_metaclass(abc.ABCMeta)
 class AuthProvider(object):
diff --git a/neutron/tests/tempest/common/cred_provider.py b/neutron/tests/tempest/common/cred_provider.py
index 07fa89f..b90d09d 100644
--- a/neutron/tests/tempest/common/cred_provider.py
+++ b/neutron/tests/tempest/common/cred_provider.py
@@ -14,7 +14,6 @@
 
 import abc
 
-from oslo_log import log as logging
 import six
 
 from neutron.tests.tempest import auth
@@ -22,7 +21,6 @@
 from neutron.tests.tempest import exceptions
 
 CONF = config.CONF
-LOG = logging.getLogger(__name__)
 
 # Type of credentials available from configuration
 CREDENTIAL_TYPES = {
diff --git a/neutron/tests/tempest/common/generator/base_generator.py b/neutron/tests/tempest/common/generator/base_generator.py
index 6db3f24..41ed48c 100644
--- a/neutron/tests/tempest/common/generator/base_generator.py
+++ b/neutron/tests/tempest/common/generator/base_generator.py
@@ -19,10 +19,6 @@
 import jsonschema
 import six
 
-from oslo_log import log as logging
-
-LOG = logging.getLogger(__name__)
-
 
 def _check_for_expected_result(name, schema):
     expected_result = None
diff --git a/neutron/tests/tempest/common/generator/negative_generator.py b/neutron/tests/tempest/common/generator/negative_generator.py
index ba8884f..44cd305 100644
--- a/neutron/tests/tempest/common/generator/negative_generator.py
+++ b/neutron/tests/tempest/common/generator/negative_generator.py
@@ -15,13 +15,9 @@
 
 import copy
 
-from oslo_log import log as logging
-
 import neutron.tests.tempest.common.generator.base_generator as base
 import neutron.tests.tempest.common.generator.valid_generator as valid
 
-LOG = logging.getLogger(__name__)
-
 
 class NegativeTestGenerator(base.BasicGeneratorSet):
     @base.generator_type("string")
diff --git a/neutron/tests/tempest/common/generator/valid_generator.py b/neutron/tests/tempest/common/generator/valid_generator.py
index 2698200..bc7014c 100644
--- a/neutron/tests/tempest/common/generator/valid_generator.py
+++ b/neutron/tests/tempest/common/generator/valid_generator.py
@@ -13,15 +13,11 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from oslo_log import log as logging
 import six
 
 import neutron.tests.tempest.common.generator.base_generator as base
 
 
-LOG = logging.getLogger(__name__)
-
-
 class ValidTestGenerator(base.BasicGeneratorSet):
     @base.generator_type("string")
     @base.simple_generator
diff --git a/neutron/tests/tempest/config.py b/neutron/tests/tempest/config.py
index 256d687..06fd541 100644
--- a/neutron/tests/tempest/config.py
+++ b/neutron/tests/tempest/config.py
@@ -59,7 +59,19 @@
                      "number of concurrent test processes."),
     cfg.ListOpt('tempest_roles',
                 help="Roles to assign to all users created by tempest",
-                default=[])
+                default=[]),
+    cfg.StrOpt('admin_username',
+               help="Administrative Username to use for "
+                    "Keystone API requests."),
+    cfg.StrOpt('admin_tenant_name',
+               help="Administrative Tenant name to use for Keystone API "
+                    "requests."),
+    cfg.StrOpt('admin_password',
+               help="API key to use when authenticating as admin.",
+               secret=True),
+    cfg.StrOpt('admin_domain_name',
+               help="Admin domain name for authentication (Keystone V3)."
+                    "The same domain applies to user and project"),
 ]
 
 identity_group = cfg.OptGroup(name='identity',
@@ -119,18 +131,6 @@
     cfg.StrOpt('alt_domain_name',
                help="Alternate domain name for authentication (Keystone V3)."
                     "The same domain applies to user and project"),
-    cfg.StrOpt('admin_username',
-               help="Administrative Username to use for "
-                    "Keystone API requests."),
-    cfg.StrOpt('admin_tenant_name',
-               help="Administrative Tenant name to use for Keystone API "
-                    "requests."),
-    cfg.StrOpt('admin_password',
-               help="API key to use when authenticating as admin.",
-               secret=True),
-    cfg.StrOpt('admin_domain_name',
-               help="Admin domain name for authentication (Keystone V3)."
-                    "The same domain applies to user and project"),
 ]
 
 identity_feature_group = cfg.OptGroup(name='identity-feature-enabled',
@@ -479,6 +479,10 @@
                      "the extended IPv6 attributes ipv6_ra_mode "
                      "and ipv6_address_mode"
                 ),
+    cfg.BoolOpt('specify_floating_ip_address_available',
+                default=True,
+                help='Allow passing an IP Address of the floating ip when '
+                     'creating the floating ip'),
 ]
 
 messaging_group = cfg.OptGroup(name='messaging',
@@ -1148,6 +1152,18 @@
         self.input_scenario = cfg.CONF['input-scenario']
         self.cli = cfg.CONF.cli
         self.negative = cfg.CONF.negative
+
+        self.identity.admin_username = self.auth.admin_username
+        self.identity.admin_password = self.auth.admin_password
+        self.identity.admin_tenant_name = self.auth.admin_tenant_name
+        self.identity.admin_domain_name = self.auth.admin_domain_name
+        self.identity.password = self.auth.admin_password
+        self.identity.tenant_name = 'demo'
+        self.identity.username = 'demo'
+        self.identity.alt_username = 'alt_demo'
+        self.identity.alt_tenant_name = 'alt_demo'
+        self.identity.alt_password = self.auth.admin_password
+
         cfg.CONF.set_default('domain_name', self.identity.admin_domain_name,
                              group='identity')
         cfg.CONF.set_default('alt_domain_name',
diff --git a/neutron/tests/tempest/services/network/json/network_client.py b/neutron/tests/tempest/services/network/json/network_client.py
index 862afbe..afcb1fd 100644
--- a/neutron/tests/tempest/services/network/json/network_client.py
+++ b/neutron/tests/tempest/services/network/json/network_client.py
@@ -11,11 +11,9 @@
 #    under the License.
 
 import time
-import urllib
-
 
 from oslo_serialization import jsonutils as json
-from six.moves.urllib import parse
+from six.moves.urllib import parse as urlparse
 from tempest_lib.common.utils import misc
 from tempest_lib import exceptions as lib_exc
 
@@ -106,7 +104,7 @@
         def _list(**filters):
             uri = self.get_uri(plural_name)
             if filters:
-                uri += '?' + parse.urlencode(filters, doseq=1)
+                uri += '?' + urlparse.urlencode(filters, doseq=1)
             resp, body = self.get(uri)
             result = {plural_name: self.deserialize_list(body)}
             self.expected_success(200, resp.status)
@@ -132,7 +130,7 @@
             plural = self.pluralize(resource_name)
             uri = '%s/%s' % (self.get_uri(plural), resource_id)
             if fields:
-                uri += '?' + parse.urlencode(fields, doseq=1)
+                uri += '?' + urlparse.urlencode(fields, doseq=1)
             resp, body = self.get(uri)
             body = self.deserialize_single(body)
             self.expected_success(200, resp.status)
@@ -592,7 +590,7 @@
     def list_qos_policies(self, **filters):
         if filters:
             uri = '%s/qos/policies?%s' % (self.uri_prefix,
-                                          urllib.urlencode(filters))
+                                          urlparse.urlencode(filters))
         else:
             uri = '%s/qos/policies' % self.uri_prefix
         resp, body = self.get(uri)