Merge "Removes vim headers 4th round"
diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index 21c8506..48ca905 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -155,7 +155,7 @@
[cli]
#
-# Options defined in tempest.cli
+# Options defined in tempest.config
#
# enable cli tests (boolean value)
@@ -494,7 +494,7 @@
# Matching flavors become parameters for scenario tests
# (string value)
-#flavor_regex=^m1.(micro|nano|tiny)$
+#flavor_regex=^m1.nano$
# SSH verification in tests is skippedfor matching images
# (string value)
diff --git a/requirements.txt b/requirements.txt
index 3b3e1fa..8c0f872 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,22 +1,22 @@
pbr>=0.5.21,<1.0
anyjson>=0.3.3
nose
-httplib2
-jsonschema>=1.3.0,!=1.4.0
-testtools>=0.9.32
+httplib2>=0.7.5
+jsonschema>=2.0.0,<3.0.0
+testtools>=0.9.34
lxml>=2.3
boto>=2.12.0,!=2.13.0
-paramiko>=1.8.0
+paramiko>=1.9.0
netaddr>=0.7.6
python-glanceclient>=0.9.0
-python-keystoneclient>=0.4.1
+python-keystoneclient>=0.4.2
python-novaclient>=2.15.0
-python-neutronclient>=2.3.0,<3
+python-neutronclient>=2.3.3,<3
python-cinderclient>=1.0.6
python-heatclient>=0.2.3
python-swiftclient>=1.5
testresources>=0.2.4
-keyring>=1.6.1,<2.0
+keyring>=1.6.1,<2.0,>=2.1
testrepository>=0.0.17
oslo.config>=1.2.0
six>=1.4.1
diff --git a/tempest/api/baremetal/base.py b/tempest/api/baremetal/base.py
index ec87321..2e745f8 100644
--- a/tempest/api/baremetal/base.py
+++ b/tempest/api/baremetal/base.py
@@ -14,9 +14,12 @@
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions as exc
from tempest import test
+CONF = config.CONF
+
def creates(resource):
"""Decorator that adds resources to the appropriate cleanup list."""
@@ -42,7 +45,7 @@
def setUpClass(cls):
super(BaseBaremetalTest, cls).setUpClass()
- if not cls.config.service_available.ironic:
+ if not CONF.service_available.ironic:
skip_msg = ('%s skipped as Ironic is not available' % cls.__name__)
raise cls.skipException(skip_msg)
diff --git a/tempest/api/compute/admin/test_aggregates.py b/tempest/api/compute/admin/test_aggregates.py
index 362cf2d..98d2550 100644
--- a/tempest/api/compute/admin/test_aggregates.py
+++ b/tempest/api/compute/admin/test_aggregates.py
@@ -108,7 +108,6 @@
@attr(type='gate')
def test_aggregate_create_update_with_az(self):
# Update an aggregate and ensure properties are updated correctly
- self.useFixture(fixtures.LockFixture('availability_zone'))
aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
az_name = data_utils.rand_name(self.az_name_prefix)
resp, aggregate = self.client.create_aggregate(aggregate_name, az_name)
diff --git a/tempest/api/compute/admin/test_fixed_ips.py b/tempest/api/compute/admin/test_fixed_ips.py
index 0c36837..cfb2f0e 100644
--- a/tempest/api/compute/admin/test_fixed_ips.py
+++ b/tempest/api/compute/admin/test_fixed_ips.py
@@ -14,8 +14,11 @@
# under the License.
from tempest.api.compute import base
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
+
class FixedIPsTestJson(base.BaseV2ComputeAdminTest):
_interface = 'json'
@@ -23,7 +26,7 @@
@classmethod
def setUpClass(cls):
super(FixedIPsTestJson, cls).setUpClass()
- if cls.config.service_available.neutron:
+ if CONF.service_available.neutron:
msg = ("%s skipped as neutron is available" % cls.__name__)
raise cls.skipException(msg)
cls.client = cls.os_adm.fixed_ips_client
diff --git a/tempest/api/compute/admin/test_fixed_ips_negative.py b/tempest/api/compute/admin/test_fixed_ips_negative.py
index bf7fd51..def9810 100644
--- a/tempest/api/compute/admin/test_fixed_ips_negative.py
+++ b/tempest/api/compute/admin/test_fixed_ips_negative.py
@@ -13,9 +13,12 @@
# under the License.
from tempest.api.compute import base
+from tempest import config
from tempest import exceptions
from tempest.test import attr
+CONF = config.CONF
+
class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
_interface = 'json'
@@ -23,7 +26,7 @@
@classmethod
def setUpClass(cls):
super(FixedIPsNegativeTestJson, cls).setUpClass()
- if cls.config.service_available.neutron:
+ if CONF.service_available.neutron:
msg = ("%s skipped as neutron is available" % cls.__name__)
raise cls.skipException(msg)
cls.client = cls.os_adm.fixed_ips_client
diff --git a/tempest/api/compute/base.py b/tempest/api/compute/base.py
index 5539894..f8b0051 100644
--- a/tempest/api/compute/base.py
+++ b/tempest/api/compute/base.py
@@ -17,10 +17,12 @@
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
import tempest.test
+CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -37,15 +39,15 @@
os = cls.get_client_manager()
cls.os = os
- cls.build_interval = cls.config.compute.build_interval
- cls.build_timeout = cls.config.compute.build_timeout
- cls.ssh_user = cls.config.compute.ssh_user
- cls.image_ref = cls.config.compute.image_ref
- cls.image_ref_alt = cls.config.compute.image_ref_alt
- cls.flavor_ref = cls.config.compute.flavor_ref
- cls.flavor_ref_alt = cls.config.compute.flavor_ref_alt
- cls.image_ssh_user = cls.config.compute.image_ssh_user
- cls.image_ssh_password = cls.config.compute.image_ssh_password
+ cls.build_interval = CONF.compute.build_interval
+ cls.build_timeout = CONF.compute.build_timeout
+ cls.ssh_user = CONF.compute.ssh_user
+ cls.image_ref = CONF.compute.image_ref
+ cls.image_ref_alt = CONF.compute.image_ref_alt
+ cls.flavor_ref = CONF.compute.flavor_ref
+ cls.flavor_ref_alt = CONF.compute.flavor_ref_alt
+ cls.image_ssh_user = CONF.compute.image_ssh_user
+ cls.image_ssh_password = CONF.compute.image_ssh_password
cls.servers = []
cls.images = []
cls.multi_user = cls.get_multi_user()
@@ -57,14 +59,14 @@
# used in testing. If the test cases are allowed to create
# users (config.compute.allow_tenant_isolation is true,
# then we allow multi-user.
- if not cls.config.compute.allow_tenant_isolation:
- user1 = cls.config.identity.username
- user2 = cls.config.identity.alt_username
+ if not CONF.compute.allow_tenant_isolation:
+ user1 = CONF.identity.username
+ user2 = CONF.identity.alt_username
if not user2 or user1 == user2:
multi_user = False
else:
- user2_password = cls.config.identity.alt_password
- user2_tenant_name = cls.config.identity.alt_tenant_name
+ user2_password = CONF.identity.alt_password
+ user2_tenant_name = CONF.identity.alt_tenant_name
if not user2_password or not user2_tenant_name:
msg = ("Alternate user specified but not alternate "
"tenant or password: alt_tenant_name=%s "
@@ -227,6 +229,18 @@
cls.password = server['adminPass']
return server['id']
+ @classmethod
+ def delete_volume(cls, volume_id):
+ """Deletes the given volume and waits for it to be gone."""
+ try:
+ resp, _ = cls.volumes_extensions_client.delete_volume(volume_id)
+ # TODO(mriedem): We should move the wait_for_resource_deletion
+ # into the delete_volume method as a convenience to the caller.
+ cls.volumes_extensions_client.wait_for_resource_deletion(volume_id)
+ except exceptions.NotFound:
+ LOG.warn("Unable to delete volume '%s' since it was not found. "
+ "Maybe it was already deleted?" % volume_id)
+
class BaseV2ComputeAdminTest(BaseV2ComputeTest):
"""Base test case class for Compute Admin V2 API tests."""
@@ -234,14 +248,14 @@
@classmethod
def setUpClass(cls):
super(BaseV2ComputeAdminTest, cls).setUpClass()
- admin_username = cls.config.compute_admin.username
- admin_password = cls.config.compute_admin.password
- admin_tenant = cls.config.compute_admin.tenant_name
+ admin_username = CONF.compute_admin.username
+ admin_password = CONF.compute_admin.password
+ admin_tenant = CONF.compute_admin.tenant_name
if not (admin_username and admin_password and admin_tenant):
msg = ("Missing Compute Admin API credentials "
"in configuration.")
raise cls.skipException(msg)
- if (cls.config.compute.allow_tenant_isolation or
+ if (CONF.compute.allow_tenant_isolation or
cls.force_tenant_isolation is True):
creds = cls.isolated_creds.get_admin_creds()
admin_username, admin_tenant_name, admin_password = creds
@@ -265,7 +279,7 @@
cls.set_network_resources()
super(BaseV3ComputeTest, cls).setUpClass()
- if not cls.config.compute_feature_enabled.api_v3:
+ if not CONF.compute_feature_enabled.api_v3:
cls.tearDownClass()
skip_msg = ("%s skipped as nova v3 api is not available" %
cls.__name__)
@@ -330,14 +344,14 @@
@classmethod
def setUpClass(cls):
super(BaseV3ComputeAdminTest, cls).setUpClass()
- admin_username = cls.config.compute_admin.username
- admin_password = cls.config.compute_admin.password
- admin_tenant = cls.config.compute_admin.tenant_name
+ admin_username = CONF.compute_admin.username
+ admin_password = CONF.compute_admin.password
+ admin_tenant = CONF.compute_admin.tenant_name
if not (admin_username and admin_password and admin_tenant):
msg = ("Missing Compute Admin API credentials "
"in configuration.")
raise cls.skipException(msg)
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_admin_creds()
admin_username, admin_tenant_name, admin_password = creds
os_adm = clients.Manager(username=admin_username,
diff --git a/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py b/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py
index e4d83c5..f24343b 100644
--- a/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py
+++ b/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py
@@ -17,9 +17,12 @@
from tempest.api.compute.floating_ips import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.test import attr
+CONF = config.CONF
+
class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
_interface = 'json'
@@ -40,7 +43,7 @@
cls.floating_ip_ids.append(body[i]['id'])
while True:
cls.non_exist_id = data_utils.rand_int_id(start=999)
- if cls.config.service_available.neutron:
+ if CONF.service_available.neutron:
cls.non_exist_id = str(uuid.uuid4())
if cls.non_exist_id not in cls.floating_ip_ids:
break
diff --git a/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py b/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py
index bb1c828..8d60e7d 100644
--- a/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py
+++ b/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py
@@ -17,9 +17,12 @@
from tempest.api.compute import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.test import attr
+CONF = config.CONF
+
class FloatingIPDetailsNegativeTestJSON(base.BaseV2ComputeTest):
_interface = 'json'
@@ -34,7 +37,7 @@
# Negative test:Should not be able to GET the details
# of non-existent floating IP
# Creating a non-existent floatingIP id
- if self.config.service_available.neutron:
+ if CONF.service_available.neutron:
non_exist_id = str(uuid.uuid4())
else:
non_exist_id = data_utils.rand_int_id(start=999)
diff --git a/tempest/api/compute/images/test_image_metadata.py b/tempest/api/compute/images/test_image_metadata.py
index 89a2f75..4115d65 100644
--- a/tempest/api/compute/images/test_image_metadata.py
+++ b/tempest/api/compute/images/test_image_metadata.py
@@ -15,8 +15,11 @@
from tempest.api.compute import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
+
class ImagesMetadataTestJSON(base.BaseV2ComputeTest):
_interface = 'json'
@@ -24,7 +27,7 @@
@classmethod
def setUpClass(cls):
super(ImagesMetadataTestJSON, cls).setUpClass()
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
diff --git a/tempest/api/compute/images/test_images.py b/tempest/api/compute/images/test_images.py
index fc09741..4cc36c9 100644
--- a/tempest/api/compute/images/test_images.py
+++ b/tempest/api/compute/images/test_images.py
@@ -15,9 +15,12 @@
from tempest.api.compute import base
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.test import attr
+CONF = config.CONF
+
class ImagesTestJSON(base.BaseV2ComputeTest):
_interface = 'json'
@@ -25,7 +28,7 @@
@classmethod
def setUpClass(cls):
super(ImagesTestJSON, cls).setUpClass()
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
cls.client = cls.images_client
@@ -34,7 +37,7 @@
cls.image_ids = []
if cls.multi_user:
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_alt_creds()
username, tenant_name, password = creds
cls.alt_manager = clients.Manager(username=username,
diff --git a/tempest/api/compute/images/test_images_oneserver.py b/tempest/api/compute/images/test_images_oneserver.py
index 0cb748b..8d60623 100644
--- a/tempest/api/compute/images/test_images_oneserver.py
+++ b/tempest/api/compute/images/test_images_oneserver.py
@@ -55,7 +55,7 @@
def setUpClass(cls):
super(ImagesOneServerTestJSON, cls).setUpClass()
cls.client = cls.images_client
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
@@ -69,7 +69,7 @@
cls.image_ids = []
if cls.multi_user:
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_alt_creds()
username, tenant_name, password = creds
cls.alt_manager = clients.Manager(username=username,
diff --git a/tempest/api/compute/images/test_images_oneserver_negative.py b/tempest/api/compute/images/test_images_oneserver_negative.py
index 3f93fbe..c96c4a4 100644
--- a/tempest/api/compute/images/test_images_oneserver_negative.py
+++ b/tempest/api/compute/images/test_images_oneserver_negative.py
@@ -17,11 +17,14 @@
from tempest.api.compute import base
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.test import attr
from tempest.test import skip_because
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -57,7 +60,7 @@
def setUpClass(cls):
super(ImagesOneServerNegativeTestJSON, cls).setUpClass()
cls.client = cls.images_client
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
@@ -71,7 +74,7 @@
cls.image_ids = []
if cls.multi_user:
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_alt_creds()
username, tenant_name, password = creds
cls.alt_manager = clients.Manager(username=username,
diff --git a/tempest/api/compute/images/test_list_image_filters.py b/tempest/api/compute/images/test_list_image_filters.py
index c04729c..f82143e 100644
--- a/tempest/api/compute/images/test_list_image_filters.py
+++ b/tempest/api/compute/images/test_list_image_filters.py
@@ -14,10 +14,12 @@
# under the License.
from tempest.api.compute import base
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.test import attr
+CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -28,7 +30,7 @@
@classmethod
def setUpClass(cls):
super(ListImageFiltersTestJSON, cls).setUpClass()
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
cls.client = cls.images_client
diff --git a/tempest/api/compute/images/test_list_images.py b/tempest/api/compute/images/test_list_images.py
index ae1e8d0..ed38442 100644
--- a/tempest/api/compute/images/test_list_images.py
+++ b/tempest/api/compute/images/test_list_images.py
@@ -14,8 +14,11 @@
# under the License.
from tempest.api.compute import base
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
+
class ListImagesTestJSON(base.BaseV2ComputeTest):
_interface = 'json'
@@ -23,7 +26,7 @@
@classmethod
def setUpClass(cls):
super(ListImagesTestJSON, cls).setUpClass()
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
cls.client = cls.images_client
diff --git a/tempest/api/compute/security_groups/test_security_group_rules.py b/tempest/api/compute/security_groups/test_security_group_rules.py
index 6aa5cb5..375105e 100644
--- a/tempest/api/compute/security_groups/test_security_group_rules.py
+++ b/tempest/api/compute/security_groups/test_security_group_rules.py
@@ -15,8 +15,11 @@
from tempest.api.compute.security_groups import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
+
class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
_interface = 'json'
@@ -25,7 +28,7 @@
def setUpClass(cls):
super(SecurityGroupRulesTestJSON, cls).setUpClass()
cls.client = cls.security_groups_client
- cls.neutron_available = cls.config.service_available.neutron
+ cls.neutron_available = CONF.service_available.neutron
@attr(type='smoke')
def test_security_group_rules_create(self):
diff --git a/tempest/api/compute/security_groups/test_security_groups_negative.py b/tempest/api/compute/security_groups/test_security_groups_negative.py
index 98ed8e8..ce1eada 100644
--- a/tempest/api/compute/security_groups/test_security_groups_negative.py
+++ b/tempest/api/compute/security_groups/test_security_groups_negative.py
@@ -31,7 +31,7 @@
def setUpClass(cls):
super(SecurityGroupsNegativeTestJSON, cls).setUpClass()
cls.client = cls.security_groups_client
- cls.neutron_available = cls.config.service_available.neutron
+ cls.neutron_available = CONF.service_available.neutron
def _delete_security_group(self, securitygroup_id):
resp, _ = self.client.delete_security_group(securitygroup_id)
diff --git a/tempest/api/compute/servers/test_attach_interfaces.py b/tempest/api/compute/servers/test_attach_interfaces.py
index 4dacb48..9cdac55 100644
--- a/tempest/api/compute/servers/test_attach_interfaces.py
+++ b/tempest/api/compute/servers/test_attach_interfaces.py
@@ -14,18 +14,21 @@
# under the License.
from tempest.api.compute import base
+from tempest import config
from tempest import exceptions
from tempest.test import attr
import time
+CONF = config.CONF
+
class AttachInterfacesTestJSON(base.BaseV2ComputeTest):
_interface = 'json'
@classmethod
def setUpClass(cls):
- if not cls.config.service_available.neutron:
+ if not CONF.service_available.neutron:
raise cls.skipException("Neutron is required")
# This test class requires network and subnet
cls.set_network_resources(network=True, subnet=True)
diff --git a/tempest/api/compute/servers/test_list_server_filters.py b/tempest/api/compute/servers/test_list_server_filters.py
index 1dc0a39..15b7b9e 100644
--- a/tempest/api/compute/servers/test_list_server_filters.py
+++ b/tempest/api/compute/servers/test_list_server_filters.py
@@ -71,7 +71,7 @@
flavor=cls.flavor_ref_alt,
wait_until='ACTIVE')
- cls.fixed_network_name = cls.config.compute.fixed_network_name
+ cls.fixed_network_name = CONF.compute.fixed_network_name
@utils.skip_unless_attr('multiple_images', 'Only one image found')
@attr(type='gate')
@@ -143,6 +143,22 @@
# when _interface='xml', one element for servers_links in servers
self.assertEqual(1, len([x for x in servers['servers'] if 'id' in x]))
+ @attr(type='gate')
+ def test_list_servers_filter_by_zero_limit(self):
+ # Verify only the expected number of servers are returned
+ params = {'limit': 0}
+ resp, servers = self.client.list_servers(params)
+ self.assertEqual(0, len(servers['servers']))
+
+ @attr(type='gate')
+ def test_list_servers_filter_by_exceed_limit(self):
+ # Verify only the expected number of servers are returned
+ params = {'limit': 100000}
+ resp, servers = self.client.list_servers(params)
+ resp, all_servers = self.client.list_servers()
+ self.assertEqual(len([x for x in all_servers['servers'] if 'id' in x]),
+ len([x for x in servers['servers'] if 'id' in x]))
+
@utils.skip_unless_attr('multiple_images', 'Only one image found')
@attr(type='gate')
def test_list_servers_detailed_filter_by_image(self):
diff --git a/tempest/api/compute/servers/test_server_actions.py b/tempest/api/compute/servers/test_server_actions.py
index fea8dd5..f113047 100644
--- a/tempest/api/compute/servers/test_server_actions.py
+++ b/tempest/api/compute/servers/test_server_actions.py
@@ -369,7 +369,7 @@
resp, server = self.client.shelve_server(self.server_id)
self.assertEqual(202, resp.status)
- offload_time = self.config.compute.shelved_offload_time
+ offload_time = CONF.compute.shelved_offload_time
if offload_time >= 0:
self.client.wait_for_server_status(self.server_id,
'SHELVED_OFFLOADED',
diff --git a/tempest/api/compute/servers/test_server_rescue.py b/tempest/api/compute/servers/test_server_rescue.py
index 45fe5ac..20c5d7f 100644
--- a/tempest/api/compute/servers/test_server_rescue.py
+++ b/tempest/api/compute/servers/test_server_rescue.py
@@ -212,6 +212,7 @@
self.servers_client.rescue_server(
self.server_id, adminPass=self.password)
self.servers_client.wait_for_server_status(self.server_id, 'RESCUE')
+ self.addCleanup(self._unrescue, self.server_id)
# Add Security group
resp, body = self.servers_client.add_security_group(self.server_id,
@@ -223,11 +224,6 @@
self.sg_name)
self.assertEqual(202, resp.status)
- # Unrescue the server
- resp, body = self.servers_client.unrescue_server(self.server_id)
- self.assertEqual(202, resp.status)
- self.servers_client.wait_for_server_status(self.server_id, 'ACTIVE')
-
class ServerRescueTestXML(ServerRescueTestJSON):
_interface = 'xml'
diff --git a/tempest/api/compute/servers/test_servers_negative.py b/tempest/api/compute/servers/test_servers_negative.py
index 8f49aec..e0181b9 100644
--- a/tempest/api/compute/servers/test_servers_negative.py
+++ b/tempest/api/compute/servers/test_servers_negative.py
@@ -19,9 +19,12 @@
from tempest.api.compute import base
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest import test
+CONF = config.CONF
+
class ServersNegativeTestJSON(base.BaseV2ComputeTest):
_interface = 'json'
@@ -408,7 +411,7 @@
self.assertEqual(202, resp.status)
self.addCleanup(self.client.unshelve_server, self.server_id)
- offload_time = self.config.compute.shelved_offload_time
+ offload_time = CONF.compute.shelved_offload_time
if offload_time >= 0:
self.client.wait_for_server_status(self.server_id,
'SHELVED_OFFLOADED',
diff --git a/tempest/api/compute/servers/test_virtual_interfaces.py b/tempest/api/compute/servers/test_virtual_interfaces.py
index 32376eb..95703d4 100644
--- a/tempest/api/compute/servers/test_virtual_interfaces.py
+++ b/tempest/api/compute/servers/test_virtual_interfaces.py
@@ -19,12 +19,12 @@
from tempest import config
from tempest import test
+CONF = config.CONF
+
class VirtualInterfacesTestJSON(base.BaseV2ComputeTest):
_interface = 'json'
- CONF = config.CONF
-
@classmethod
def setUpClass(cls):
# This test needs a network and a subnet
diff --git a/tempest/api/compute/test_authorization.py b/tempest/api/compute/test_authorization.py
index 13b75cf..4774fec 100644
--- a/tempest/api/compute/test_authorization.py
+++ b/tempest/api/compute/test_authorization.py
@@ -16,10 +16,13 @@
from tempest.api.compute import base
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.test import attr
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -39,7 +42,7 @@
cls.keypairs_client = cls.os.keypairs_client
cls.security_client = cls.os.security_groups_client
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_alt_creds()
username, tenant_name, password = creds
cls.alt_manager = clients.Manager(username=username,
diff --git a/tempest/api/compute/test_extensions.py b/tempest/api/compute/test_extensions.py
index aac635c..55146e5 100644
--- a/tempest/api/compute/test_extensions.py
+++ b/tempest/api/compute/test_extensions.py
@@ -15,9 +15,12 @@
from tempest.api.compute import base
+from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -28,11 +31,11 @@
@test.attr(type='gate')
def test_list_extensions(self):
# List of all extensions
- if len(self.config.compute_feature_enabled.api_extensions) == 0:
+ if len(CONF.compute_feature_enabled.api_extensions) == 0:
raise self.skipException('There are not any extensions configured')
resp, extensions = self.extensions_client.list_extensions()
self.assertEqual(200, resp.status)
- ext = self.config.compute_feature_enabled.api_extensions[0]
+ ext = CONF.compute_feature_enabled.api_extensions[0]
if ext == 'all':
self.assertIn('Hosts', map(lambda x: x['name'], extensions))
elif ext:
diff --git a/tempest/api/compute/test_live_block_migration.py b/tempest/api/compute/test_live_block_migration.py
index 85d314b..fcd055b 100644
--- a/tempest/api/compute/test_live_block_migration.py
+++ b/tempest/api/compute/test_live_block_migration.py
@@ -23,13 +23,13 @@
from tempest import exceptions
from tempest.test import attr
+CONF = config.CONF
+
class LiveBlockMigrationTestJSON(base.BaseV2ComputeAdminTest):
_host_key = 'OS-EXT-SRV-ATTR:host'
_interface = 'json'
- CONF = config.CONF
-
@classmethod
def setUpClass(cls):
super(LiveBlockMigrationTestJSON, cls).setUpClass()
@@ -57,8 +57,7 @@
def _migrate_server_to(self, server_id, dest_host):
_resp, body = self.admin_servers_client.live_migrate_server(
server_id, dest_host,
- self.config.compute_feature_enabled.
- block_migration_for_live_migration)
+ CONF.compute_feature_enabled.block_migration_for_live_migration)
return body
def _get_host_other_than(self, host):
diff --git a/tempest/api/compute/v3/admin/test_quotas.py b/tempest/api/compute/v3/admin/test_quotas.py
index e116734..ad3519d 100644
--- a/tempest/api/compute/v3/admin/test_quotas.py
+++ b/tempest/api/compute/v3/admin/test_quotas.py
@@ -15,9 +15,12 @@
from tempest.api.compute import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest import test
+CONF = config.CONF
+
class QuotasAdminV3TestJSON(base.BaseV3ComputeAdminTest):
_interface = 'json'
@@ -26,7 +29,7 @@
@classmethod
def setUpClass(cls):
super(QuotasAdminV3TestJSON, cls).setUpClass()
- cls.auth_url = cls.config.identity.uri
+ cls.auth_url = CONF.identity.uri
cls.client = cls.quotas_client
cls.adm_client = cls.quotas_admin_client
cls.identity_admin_client = cls._get_identity_admin_client()
diff --git a/tempest/api/compute/v3/images/test_image_metadata.py b/tempest/api/compute/v3/images/test_image_metadata.py
index d0d2daf..e9ca04a 100644
--- a/tempest/api/compute/v3/images/test_image_metadata.py
+++ b/tempest/api/compute/v3/images/test_image_metadata.py
@@ -15,8 +15,11 @@
from tempest.api.compute import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
+
class ImagesMetadataTestJSON(base.BaseV2ComputeTest):
_interface = 'json'
@@ -24,7 +27,7 @@
@classmethod
def setUpClass(cls):
super(ImagesMetadataTestJSON, cls).setUpClass()
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
diff --git a/tempest/api/compute/v3/images/test_images.py b/tempest/api/compute/v3/images/test_images.py
index 52772e0..4ef6f25 100644
--- a/tempest/api/compute/v3/images/test_images.py
+++ b/tempest/api/compute/v3/images/test_images.py
@@ -15,9 +15,12 @@
from tempest.api.compute import base
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.test import attr
+CONF = config.CONF
+
class ImagesV3TestJSON(base.BaseV3ComputeTest):
_interface = 'json'
@@ -25,14 +28,14 @@
@classmethod
def setUpClass(cls):
super(ImagesV3TestJSON, cls).setUpClass()
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
cls.client = cls.images_client
cls.servers_client = cls.servers_client
if cls.multi_user:
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_alt_creds()
username, tenant_name, password = creds
cls.alt_manager = clients.Manager(username=username,
diff --git a/tempest/api/compute/v3/images/test_images_oneserver.py b/tempest/api/compute/v3/images/test_images_oneserver.py
index fb54942..992d158 100644
--- a/tempest/api/compute/v3/images/test_images_oneserver.py
+++ b/tempest/api/compute/v3/images/test_images_oneserver.py
@@ -55,7 +55,7 @@
def setUpClass(cls):
super(ImagesOneServerTestJSON, cls).setUpClass()
cls.client = cls.images_client
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
@@ -69,7 +69,7 @@
cls.image_ids = []
if cls.multi_user:
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_alt_creds()
username, tenant_name, password = creds
cls.alt_manager = clients.Manager(username=username,
diff --git a/tempest/api/compute/v3/images/test_images_oneserver_negative.py b/tempest/api/compute/v3/images/test_images_oneserver_negative.py
index d9e7882..3404823 100644
--- a/tempest/api/compute/v3/images/test_images_oneserver_negative.py
+++ b/tempest/api/compute/v3/images/test_images_oneserver_negative.py
@@ -17,11 +17,14 @@
from tempest.api.compute import base
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.test import attr
from tempest.test import skip_because
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -57,7 +60,7 @@
def setUpClass(cls):
super(ImagesOneServerNegativeTestJSON, cls).setUpClass()
cls.client = cls.images_client
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
@@ -71,7 +74,7 @@
cls.image_ids = []
if cls.multi_user:
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_alt_creds()
username, tenant_name, password = creds
cls.alt_manager = clients.Manager(username=username,
diff --git a/tempest/api/compute/v3/images/test_list_image_filters.py b/tempest/api/compute/v3/images/test_list_image_filters.py
index f654920..82b9625 100644
--- a/tempest/api/compute/v3/images/test_list_image_filters.py
+++ b/tempest/api/compute/v3/images/test_list_image_filters.py
@@ -14,10 +14,12 @@
# under the License.
from tempest.api.compute import base
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.test import attr
+CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -28,7 +30,7 @@
@classmethod
def setUpClass(cls):
super(ListImageFiltersTestJSON, cls).setUpClass()
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
cls.client = cls.images_client
diff --git a/tempest/api/compute/v3/servers/test_attach_interfaces.py b/tempest/api/compute/v3/servers/test_attach_interfaces.py
index aa85424..634d06f 100644
--- a/tempest/api/compute/v3/servers/test_attach_interfaces.py
+++ b/tempest/api/compute/v3/servers/test_attach_interfaces.py
@@ -14,18 +14,21 @@
# under the License.
from tempest.api.compute import base
+from tempest import config
from tempest import exceptions
from tempest.test import attr
import time
+CONF = config.CONF
+
class AttachInterfacesV3TestJSON(base.BaseV3ComputeTest):
_interface = 'json'
@classmethod
def setUpClass(cls):
- if not cls.config.service_available.neutron:
+ if not CONF.service_available.neutron:
raise cls.skipException("Neutron is required")
# This test class requires network and subnet
cls.set_network_resources(network=True, subnet=True)
diff --git a/tempest/api/compute/v3/servers/test_attach_volume.py b/tempest/api/compute/v3/servers/test_attach_volume.py
index 2529af9..6ae74ff 100644
--- a/tempest/api/compute/v3/servers/test_attach_volume.py
+++ b/tempest/api/compute/v3/servers/test_attach_volume.py
@@ -36,8 +36,8 @@
@classmethod
def setUpClass(cls):
super(AttachVolumeV3TestJSON, cls).setUpClass()
- cls.device = cls.config.compute.volume_device_name
- if not cls.config.service_available.cinder:
+ cls.device = CONF.compute.volume_device_name
+ if not CONF.service_available.cinder:
skip_msg = ("%s skipped as Cinder is not available" % cls.__name__)
raise cls.skipException(skip_msg)
diff --git a/tempest/api/compute/v3/servers/test_list_server_filters.py b/tempest/api/compute/v3/servers/test_list_server_filters.py
index 8698d97..86ac497 100644
--- a/tempest/api/compute/v3/servers/test_list_server_filters.py
+++ b/tempest/api/compute/v3/servers/test_list_server_filters.py
@@ -71,7 +71,7 @@
flavor=cls.flavor_ref_alt,
wait_until='ACTIVE')
- cls.fixed_network_name = cls.config.compute.fixed_network_name
+ cls.fixed_network_name = CONF.compute.fixed_network_name
@utils.skip_unless_attr('multiple_images', 'Only one image found')
@attr(type='gate')
@@ -125,6 +125,22 @@
resp, servers = self.client.list_servers(params)
self.assertEqual(1, len([x for x in servers['servers'] if 'id' in x]))
+ @attr(type='gate')
+ def test_list_servers_filter_by_zero_limit(self):
+ # Verify only the expected number of servers are returned
+ params = {'limit': 0}
+ resp, servers = self.client.list_servers(params)
+ self.assertEqual(0, len(servers['servers']))
+
+ @attr(type='gate')
+ def test_list_servers_filter_by_exceed_limit(self):
+ # Verify only the expected number of servers are returned
+ params = {'limit': 100000}
+ resp, servers = self.client.list_servers(params)
+ resp, all_servers = self.client.list_servers()
+ self.assertEqual(len([x for x in all_servers['servers'] if 'id' in x]),
+ len([x for x in servers['servers'] if 'id' in x]))
+
@utils.skip_unless_attr('multiple_images', 'Only one image found')
@attr(type='gate')
def test_list_servers_detailed_filter_by_image(self):
diff --git a/tempest/api/compute/v3/servers/test_server_actions.py b/tempest/api/compute/v3/servers/test_server_actions.py
index fdf23f8..b8dc85b 100644
--- a/tempest/api/compute/v3/servers/test_server_actions.py
+++ b/tempest/api/compute/v3/servers/test_server_actions.py
@@ -359,7 +359,7 @@
resp, server = self.client.shelve_server(self.server_id)
self.assertEqual(202, resp.status)
- offload_time = self.config.compute.shelved_offload_time
+ offload_time = CONF.compute.shelved_offload_time
if offload_time >= 0:
self.client.wait_for_server_status(self.server_id,
'SHELVED_OFFLOADED',
diff --git a/tempest/api/compute/v3/servers/test_server_metadata.py b/tempest/api/compute/v3/servers/test_server_metadata.py
index 1758b0b..00549eb 100644
--- a/tempest/api/compute/v3/servers/test_server_metadata.py
+++ b/tempest/api/compute/v3/servers/test_server_metadata.py
@@ -14,8 +14,7 @@
# under the License.
from tempest.api.compute import base
-from tempest import exceptions
-from tempest.test import attr
+from tempest import test
class ServerMetadataV3TestJSON(base.BaseV3ComputeTest):
@@ -40,7 +39,7 @@
resp, _ = self.client.set_server_metadata(self.server_id, meta)
self.assertEqual(resp.status, 200)
- @attr(type='gate')
+ @test.attr(type='gate')
def test_list_server_metadata(self):
# All metadata key/value pairs for a server should be returned
resp, resp_metadata = self.client.list_server_metadata(self.server_id)
@@ -50,7 +49,7 @@
expected = {'key1': 'value1', 'key2': 'value2'}
self.assertEqual(expected, resp_metadata)
- @attr(type='gate')
+ @test.attr(type='gate')
def test_set_server_metadata(self):
# The server's metadata should be replaced with the provided values
# Create a new set of metadata for the server
@@ -64,22 +63,7 @@
resp, resp_metadata = self.client.list_server_metadata(self.server_id)
self.assertEqual(resp_metadata, req_metadata)
- @attr(type='gate')
- def test_server_create_metadata_key_too_long(self):
- # Attempt to start a server with a meta-data key that is > 255
- # characters
-
- # Try a few values
- for sz in [256, 257, 511, 1023]:
- key = "k" * sz
- meta = {key: 'data1'}
- self.assertRaises(exceptions.OverLimit,
- self.create_test_server,
- meta=meta)
-
- # no teardown - all creates should fail
-
- @attr(type='gate')
+ @test.attr(type='gate')
def test_update_server_metadata(self):
# The server's metadata values should be updated to the
# provided values
@@ -93,7 +77,7 @@
expected = {'key1': 'alt1', 'key2': 'value2', 'key3': 'value3'}
self.assertEqual(expected, resp_metadata)
- @attr(type='gate')
+ @test.attr(type='gate')
def test_update_metadata_empty_body(self):
# The original metadata should not be lost if empty metadata body is
# passed
@@ -103,14 +87,14 @@
expected = {'key1': 'value1', 'key2': 'value2'}
self.assertEqual(expected, resp_metadata)
- @attr(type='gate')
+ @test.attr(type='gate')
def test_get_server_metadata_item(self):
# The value for a specific metadata key should be returned
resp, meta = self.client.get_server_metadata_item(self.server_id,
'key2')
self.assertEqual('value2', meta['key2'])
- @attr(type='gate')
+ @test.attr(type='gate')
def test_set_server_metadata_item(self):
# The item's value should be updated to the provided value
# Update the metadata value
@@ -124,7 +108,7 @@
expected = {'key1': 'value1', 'key2': 'value2', 'nova': 'alt'}
self.assertEqual(expected, resp_metadata)
- @attr(type='gate')
+ @test.attr(type='gate')
def test_delete_server_metadata_item(self):
# The metadata value/key pair should be deleted from the server
resp, meta = self.client.delete_server_metadata_item(self.server_id,
@@ -135,77 +119,3 @@
resp, resp_metadata = self.client.list_server_metadata(self.server_id)
expected = {'key2': 'value2'}
self.assertEqual(expected, resp_metadata)
-
- @attr(type=['negative', 'gate'])
- def test_server_metadata_negative(self):
- # Blank key should trigger an error.
- meta = {'': 'data1'}
- self.assertRaises(exceptions.BadRequest,
- self.create_test_server,
- meta=meta)
-
- # GET on a non-existent server should not succeed
- self.assertRaises(exceptions.NotFound,
- self.client.get_server_metadata_item, 999, 'test2')
-
- # List metadata on a non-existent server should not succeed
- self.assertRaises(exceptions.NotFound,
- self.client.list_server_metadata, 999)
-
- # Raise BadRequest if key in uri does not match
- # the key passed in body.
- meta = {'testkey': 'testvalue'}
- self.assertRaises(exceptions.BadRequest,
- self.client.set_server_metadata_item,
- self.server_id, 'key', meta)
-
- # Set metadata on a non-existent server should not succeed
- meta = {'meta1': 'data1'}
- self.assertRaises(exceptions.NotFound,
- self.client.set_server_metadata, 999, meta)
-
- # An update should not happen for a non-existent image
- meta = {'key1': 'value1', 'key2': 'value2'}
- self.assertRaises(exceptions.NotFound,
- self.client.update_server_metadata, 999, meta)
-
- # Blank key should trigger an error
- meta = {'': 'data1'}
- self.assertRaises(exceptions.BadRequest,
- self.client.update_server_metadata,
- self.server_id, meta=meta)
-
- # Should not be able to delete metadata item from a non-existent server
- self.assertRaises(exceptions.NotFound,
- self.client.delete_server_metadata_item, 999, 'd')
-
- # Raise a 413 OverLimit exception while exceeding metadata items limit
- # for tenant.
- _, quota_set = self.quotas.get_quota_set(self.tenant_id)
- quota_metadata = quota_set['metadata_items']
- req_metadata = {}
- for num in range(1, quota_metadata + 2):
- req_metadata['key' + str(num)] = 'val' + str(num)
- self.assertRaises(exceptions.OverLimit,
- self.client.set_server_metadata,
- self.server_id, req_metadata)
-
- # Raise a 413 OverLimit exception while exceeding metadata items limit
- # for tenant (update).
- self.assertRaises(exceptions.OverLimit,
- self.client.update_server_metadata,
- self.server_id, req_metadata)
-
- # Raise a bad request error for blank key.
- # set_server_metadata will replace all metadata with new value
- meta = {'': 'data1'}
- self.assertRaises(exceptions.BadRequest,
- self.client.set_server_metadata,
- self.server_id, meta=meta)
-
- # Raise a bad request error for a missing metadata field
- # set_server_metadata will replace all metadata with new value
- meta = {'meta1': 'data1'}
- self.assertRaises(exceptions.BadRequest,
- self.client.set_server_metadata,
- self.server_id, meta=meta, no_metadata_field=True)
diff --git a/tempest/api/compute/v3/servers/test_server_metadata_negative.py b/tempest/api/compute/v3/servers/test_server_metadata_negative.py
new file mode 100644
index 0000000..4062696
--- /dev/null
+++ b/tempest/api/compute/v3/servers/test_server_metadata_negative.py
@@ -0,0 +1,158 @@
+# Copyright 2014 NEC Corporation. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from tempest.api.compute import base
+from tempest.common.utils import data_utils
+from tempest import exceptions
+from tempest import test
+
+
+class ServerMetadataV3NegativeTestJSON(base.BaseV3ComputeTest):
+ _interface = 'json'
+
+ @classmethod
+ def setUpClass(cls):
+ super(ServerMetadataV3NegativeTestJSON, cls).setUpClass()
+ cls.client = cls.servers_client
+ cls.quotas = cls.quotas_client
+ cls.admin_client = cls._get_identity_admin_client()
+ resp, tenants = cls.admin_client.list_tenants()
+ cls.tenant_id = [tnt['id'] for tnt in tenants if tnt['name'] ==
+ cls.client.tenant_name][0]
+ resp, server = cls.create_test_server(meta={}, wait_until='ACTIVE')
+
+ cls.server_id = server['id']
+
+ @test.attr(type=['gate', 'negative'])
+ def test_server_create_metadata_key_too_long(self):
+ # Attempt to start a server with a meta-data key that is > 255
+ # characters
+
+ # Tryset_server_metadata_item a few values
+ for sz in [256, 257, 511, 1023]:
+ key = "k" * sz
+ meta = {key: 'data1'}
+ self.assertRaises(exceptions.OverLimit,
+ self.create_test_server,
+ meta=meta)
+
+ # no teardown - all creates should fail
+
+ @test.attr(type=['negative', 'gate'])
+ def test_create_server_metadata_blank_key(self):
+ # Blank key should trigger an error.
+ meta = {'': 'data1'}
+ self.assertRaises(exceptions.BadRequest,
+ self.create_test_server,
+ meta=meta)
+
+ @test.attr(type=['negative', 'gate'])
+ def test_server_metadata_non_existent_server(self):
+ # GET on a non-existent server should not succeed
+ non_existent_server_id = data_utils.rand_uuid()
+ self.assertRaises(exceptions.NotFound,
+ self.client.get_server_metadata_item,
+ non_existent_server_id,
+ 'test2')
+
+ @test.attr(type=['negative', 'gate'])
+ def test_list_server_metadata_non_existent_server(self):
+ # List metadata on a non-existent server should not succeed
+ non_existent_server_id = data_utils.rand_uuid()
+ self.assertRaises(exceptions.NotFound,
+ self.client.list_server_metadata,
+ non_existent_server_id)
+
+ @test.attr(type=['negative', 'gate'])
+ def test_wrong_key_passed_in_body(self):
+ # Raise BadRequest if key in uri does not match
+ # the key passed in body.
+ meta = {'testkey': 'testvalue'}
+ self.assertRaises(exceptions.BadRequest,
+ self.client.set_server_metadata_item,
+ self.server_id, 'key', meta)
+
+ @test.attr(type=['negative', 'gate'])
+ def test_set_metadata_non_existent_server(self):
+ # Set metadata on a non-existent server should not succeed
+ non_existent_server_id = data_utils.rand_uuid()
+ meta = {'meta1': 'data1'}
+ self.assertRaises(exceptions.NotFound,
+ self.client.set_server_metadata,
+ non_existent_server_id,
+ meta)
+
+ @test.attr(type=['negative', 'gate'])
+ def test_update_metadata_non_existent_server(self):
+ # An update should not happen for a non-existent server
+ non_existent_server_id = data_utils.rand_uuid()
+ meta = {'key1': 'value1', 'key2': 'value2'}
+ self.assertRaises(exceptions.NotFound,
+ self.client.update_server_metadata,
+ non_existent_server_id,
+ meta)
+
+ @test.attr(type=['negative', 'gate'])
+ def test_update_metadata_with_blank_key(self):
+ # Blank key should trigger an error
+ meta = {'': 'data1'}
+ self.assertRaises(exceptions.BadRequest,
+ self.client.update_server_metadata,
+ self.server_id, meta=meta)
+
+ @test.attr(type=['negative', 'gate'])
+ def test_delete_metadata_non_existent_server(self):
+ # Should not be able to delete metadata item from a non-existent server
+ non_existent_server_id = data_utils.rand_uuid()
+ self.assertRaises(exceptions.NotFound,
+ self.client.delete_server_metadata_item,
+ non_existent_server_id,
+ 'd')
+
+ @test.attr(type=['negative', 'gate'])
+ def test_metadata_items_limit(self):
+ # Raise a 413 OverLimit exception while exceeding metadata items limit
+ # for tenant.
+ _, quota_set = self.quotas.get_quota_set(self.tenant_id)
+ quota_metadata = quota_set['metadata_items']
+ req_metadata = {}
+ for num in range(1, quota_metadata + 2):
+ req_metadata['key' + str(num)] = 'val' + str(num)
+ self.assertRaises(exceptions.OverLimit,
+ self.client.set_server_metadata,
+ self.server_id, req_metadata)
+
+ # Raise a 413 OverLimit exception while exceeding metadata items limit
+ # for tenant (update).
+ self.assertRaises(exceptions.OverLimit,
+ self.client.update_server_metadata,
+ self.server_id, req_metadata)
+
+ @test.attr(type=['negative', 'gate'])
+ def test_set_server_metadata_blank_key(self):
+ # Raise a bad request error for blank key.
+ # set_server_metadata will replace all metadata with new value
+ meta = {'': 'data1'}
+ self.assertRaises(exceptions.BadRequest,
+ self.client.set_server_metadata,
+ self.server_id, meta=meta)
+
+ @test.attr(type=['negative', 'gate'])
+ def test_set_server_metadata_missing_metadata(self):
+ # Raise a bad request error for a missing metadata field
+ # set_server_metadata will replace all metadata with new value
+ meta = {'meta1': 'data1'}
+ self.assertRaises(exceptions.BadRequest,
+ self.client.set_server_metadata,
+ self.server_id, meta=meta, no_metadata_field=True)
diff --git a/tempest/api/compute/v3/servers/test_servers_negative.py b/tempest/api/compute/v3/servers/test_servers_negative.py
index aadba77..191701e 100644
--- a/tempest/api/compute/v3/servers/test_servers_negative.py
+++ b/tempest/api/compute/v3/servers/test_servers_negative.py
@@ -19,9 +19,12 @@
from tempest.api.compute import base
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest import test
+CONF = config.CONF
+
class ServersNegativeV3TestJSON(base.BaseV3ComputeTest):
_interface = 'json'
@@ -393,7 +396,7 @@
self.assertEqual(202, resp.status)
self.addCleanup(self.client.unshelve_server, self.server_id)
- offload_time = self.config.compute.shelved_offload_time
+ offload_time = CONF.compute.shelved_offload_time
if offload_time >= 0:
self.client.wait_for_server_status(self.server_id,
'SHELVED_OFFLOADED',
diff --git a/tempest/api/compute/v3/test_extensions.py b/tempest/api/compute/v3/test_extensions.py
index 32f62d5..775d70a 100644
--- a/tempest/api/compute/v3/test_extensions.py
+++ b/tempest/api/compute/v3/test_extensions.py
@@ -15,9 +15,11 @@
from tempest.api.compute import base
+from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
+CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -28,11 +30,11 @@
@test.attr(type='gate')
def test_list_extensions(self):
# List of all extensions
- if len(self.config.compute_feature_enabled.api_v3_extensions) == 0:
+ if len(CONF.compute_feature_enabled.api_v3_extensions) == 0:
raise self.skipException('There are not any extensions configured')
resp, extensions = self.extensions_client.list_extensions()
self.assertEqual(200, resp.status)
- ext = self.config.compute_feature_enabled.api_v3_extensions[0]
+ ext = CONF.compute_feature_enabled.api_v3_extensions[0]
if ext == 'all':
self.assertIn('Hosts', map(lambda x: x['name'], extensions))
elif ext:
diff --git a/tempest/api/compute/v3/test_live_block_migration.py b/tempest/api/compute/v3/test_live_block_migration.py
index 087bffb..c881206 100644
--- a/tempest/api/compute/v3/test_live_block_migration.py
+++ b/tempest/api/compute/v3/test_live_block_migration.py
@@ -23,13 +23,13 @@
from tempest import exceptions
from tempest.test import attr
+CONF = config.CONF
+
class LiveBlockMigrationV3TestJSON(base.BaseV3ComputeAdminTest):
_host_key = 'os-extended-server-attributes:host'
_interface = 'json'
- CONF = config.CONF
-
@classmethod
def setUpClass(cls):
super(LiveBlockMigrationV3TestJSON, cls).setUpClass()
@@ -57,7 +57,7 @@
def _migrate_server_to(self, server_id, dest_host):
_resp, body = self.admin_servers_client.live_migrate_server(
server_id, dest_host,
- self.config.compute_feature_enabled.
+ CONF.compute_feature_enabled.
block_migration_for_live_migration)
return body
diff --git a/tempest/api/compute/volumes/test_attach_volume.py b/tempest/api/compute/volumes/test_attach_volume.py
index d51bf13..8d8e3ec 100644
--- a/tempest/api/compute/volumes/test_attach_volume.py
+++ b/tempest/api/compute/volumes/test_attach_volume.py
@@ -36,8 +36,8 @@
@classmethod
def setUpClass(cls):
super(AttachVolumeTestJSON, cls).setUpClass()
- cls.device = cls.config.compute.volume_device_name
- if not cls.config.service_available.cinder:
+ cls.device = CONF.compute.volume_device_name
+ if not CONF.service_available.cinder:
skip_msg = ("%s skipped as Cinder is not available" % cls.__name__)
raise cls.skipException(skip_msg)
diff --git a/tempest/api/compute/volumes/test_volumes_get.py b/tempest/api/compute/volumes/test_volumes_get.py
index b5a4802..bcab891 100644
--- a/tempest/api/compute/volumes/test_volumes_get.py
+++ b/tempest/api/compute/volumes/test_volumes_get.py
@@ -15,9 +15,12 @@
from tempest.api.compute import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
from testtools.matchers import ContainsAll
+CONF = config.CONF
+
class VolumesGetTestJSON(base.BaseV2ComputeTest):
@@ -27,7 +30,7 @@
def setUpClass(cls):
super(VolumesGetTestJSON, cls).setUpClass()
cls.client = cls.volumes_extensions_client
- if not cls.config.service_available.cinder:
+ if not CONF.service_available.cinder:
skip_msg = ("%s skipped as Cinder is not available" % cls.__name__)
raise cls.skipException(skip_msg)
@@ -41,7 +44,7 @@
resp, volume = self.client.create_volume(size=1,
display_name=v_name,
metadata=metadata)
- self.addCleanup(self._delete_volume, volume)
+ self.addCleanup(self.delete_volume, volume['id'])
self.assertEqual(200, resp.status)
self.assertIn('id', volume)
self.assertIn('displayName', volume)
@@ -69,16 +72,6 @@
'The fetched Volume metadata misses data '
'from the created Volume')
- def _delete_volume(self, volume):
- # Delete the Volume created in this method
- try:
- resp, _ = self.client.delete_volume(volume['id'])
- self.assertEqual(202, resp.status)
- # Checking if the deleted Volume still exists
- self.client.wait_for_resource_deletion(volume['id'])
- except KeyError:
- return
-
class VolumesGetTestXML(VolumesGetTestJSON):
_interface = "xml"
diff --git a/tempest/api/compute/volumes/test_volumes_list.py b/tempest/api/compute/volumes/test_volumes_list.py
index ac89f99..48b1b7e 100644
--- a/tempest/api/compute/volumes/test_volumes_list.py
+++ b/tempest/api/compute/volumes/test_volumes_list.py
@@ -15,8 +15,11 @@
from tempest.api.compute import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
+
class VolumesTestJSON(base.BaseV2ComputeTest):
@@ -34,7 +37,7 @@
def setUpClass(cls):
super(VolumesTestJSON, cls).setUpClass()
cls.client = cls.volumes_extensions_client
- if not cls.config.service_available.cinder:
+ if not CONF.service_available.cinder:
skip_msg = ("%s skipped as Cinder is not available" % cls.__name__)
raise cls.skipException(skip_msg)
# Create 3 Volumes
@@ -59,7 +62,7 @@
# too small. So, here, we clean up whatever we did manage
# to create and raise a SkipTest
for volume in cls.volume_list:
- cls.client.delete_volume(volume)
+ cls.delete_volume(volume['id'])
msg = ("Failed to create ALL necessary volumes to run "
"test. This typically means that the backing file "
"size of the nova-volumes group is too small to "
@@ -71,8 +74,7 @@
def tearDownClass(cls):
# Delete the created Volumes
for volume in cls.volume_list:
- resp, _ = cls.client.delete_volume(volume['id'])
- cls.client.wait_for_resource_deletion(volume['id'])
+ cls.delete_volume(volume['id'])
super(VolumesTestJSON, cls).tearDownClass()
@attr(type='gate')
diff --git a/tempest/api/compute/volumes/test_volumes_negative.py b/tempest/api/compute/volumes/test_volumes_negative.py
index e01e349..85b30e2 100644
--- a/tempest/api/compute/volumes/test_volumes_negative.py
+++ b/tempest/api/compute/volumes/test_volumes_negative.py
@@ -17,9 +17,12 @@
from tempest.api.compute import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.test import attr
+CONF = config.CONF
+
class VolumesNegativeTest(base.BaseV2ComputeTest):
_interface = 'json'
@@ -28,7 +31,7 @@
def setUpClass(cls):
super(VolumesNegativeTest, cls).setUpClass()
cls.client = cls.volumes_extensions_client
- if not cls.config.service_available.cinder:
+ if not CONF.service_available.cinder:
skip_msg = ("%s skipped as Cinder is not available" % cls.__name__)
raise cls.skipException(skip_msg)
diff --git a/tempest/api/identity/admin/v3/test_trusts.py b/tempest/api/identity/admin/v3/test_trusts.py
index 0bded78..1bebad4 100644
--- a/tempest/api/identity/admin/v3/test_trusts.py
+++ b/tempest/api/identity/admin/v3/test_trusts.py
@@ -31,7 +31,7 @@
if not CONF.identity_feature_enabled.trust:
raise self.skipException("Trusts aren't enabled")
- self.trustee_username = self.config.identity.alt_username
+ self.trustee_username = CONF.identity.alt_username
self.trust_id = None
def tearDown(self):
diff --git a/tempest/api/image/base.py b/tempest/api/image/base.py
index 2e69579..37b848c 100644
--- a/tempest/api/image/base.py
+++ b/tempest/api/image/base.py
@@ -17,10 +17,13 @@
from tempest import clients
from tempest.common import isolated_creds
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
import tempest.test
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -35,10 +38,10 @@
cls._interface = 'json'
cls.isolated_creds = isolated_creds.IsolatedCreds(
cls.__name__, network_resources=cls.network_resources)
- if not cls.config.service_available.glance:
+ if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_primary_creds()
username, tenant_name, password = creds
cls.os = clients.Manager(username=username,
@@ -83,7 +86,7 @@
def setUpClass(cls):
super(BaseV1ImageTest, cls).setUpClass()
cls.client = cls.os.image_client
- if not cls.config.image_feature_enabled.api_v1:
+ if not CONF.image_feature_enabled.api_v1:
msg = "Glance API v1 not supported"
raise cls.skipException(msg)
@@ -92,7 +95,7 @@
@classmethod
def setUpClass(cls):
super(BaseV1ImageMembersTest, cls).setUpClass()
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_alt_creds()
username, tenant_name, password = creds
cls.os_alt = clients.Manager(username=username,
@@ -124,7 +127,7 @@
def setUpClass(cls):
super(BaseV2ImageTest, cls).setUpClass()
cls.client = cls.os.image_client_v2
- if not cls.config.image_feature_enabled.api_v2:
+ if not CONF.image_feature_enabled.api_v2:
msg = "Glance API v2 not supported"
raise cls.skipException(msg)
@@ -134,7 +137,7 @@
@classmethod
def setUpClass(cls):
super(BaseV2MemberImageTest, cls).setUpClass()
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_alt_creds()
username, tenant_name, password = creds
cls.os_alt = clients.Manager(username=username,
diff --git a/tempest/api/image/v1/test_images.py b/tempest/api/image/v1/test_images.py
index 3c8d95e..8c62c05 100644
--- a/tempest/api/image/v1/test_images.py
+++ b/tempest/api/image/v1/test_images.py
@@ -16,8 +16,11 @@
import cStringIO as StringIO
from tempest.api.image import base
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
+
class CreateRegisterImagesTest(base.BaseV1ImageTest):
"""Here we test the registration and creation of images."""
@@ -68,7 +71,7 @@
resp, body = self.create_image(name='New Http Image',
container_format='bare',
disk_format='raw', is_public=True,
- copy_from=self.config.images.http_image)
+ copy_from=CONF.images.http_image)
self.assertIn('id', body)
image_id = body.get('id')
self.assertEqual('New Http Image', body.get('name'))
diff --git a/tempest/api/network/base.py b/tempest/api/network/base.py
index 0085cd6..1c2c4b0 100644
--- a/tempest/api/network/base.py
+++ b/tempest/api/network/base.py
@@ -17,10 +17,13 @@
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
import tempest.test
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -52,8 +55,7 @@
cls.set_network_resources()
super(BaseNetworkTest, cls).setUpClass()
os = clients.Manager(interface=cls._interface)
- cls.network_cfg = os.config.network
- if not cls.config.service_available.neutron:
+ if not CONF.service_available.neutron:
raise cls.skipException("Neutron support is required")
cls.client = os.network_client
cls.networks = []
@@ -123,8 +125,8 @@
@classmethod
def create_subnet(cls, network, ip_version=4):
"""Wrapper utility that returns a test subnet."""
- cidr = netaddr.IPNetwork(cls.network_cfg.tenant_network_cidr)
- mask_bits = cls.network_cfg.tenant_network_mask_bits
+ cidr = netaddr.IPNetwork(CONF.network.tenant_network_cidr)
+ mask_bits = CONF.network.tenant_network_mask_bits
# Find a cidr that is not in use yet and create a subnet with it
body = None
failure = None
@@ -260,9 +262,9 @@
@classmethod
def setUpClass(cls):
super(BaseAdminNetworkTest, cls).setUpClass()
- admin_username = cls.config.compute_admin.username
- admin_password = cls.config.compute_admin.password
- admin_tenant = cls.config.compute_admin.tenant_name
+ admin_username = CONF.compute_admin.username
+ admin_password = CONF.compute_admin.password
+ admin_tenant = CONF.compute_admin.tenant_name
if not (admin_username and admin_password and admin_tenant):
msg = ("Missing Administrative Network API credentials "
"in configuration.")
diff --git a/tempest/api/network/test_floating_ips.py b/tempest/api/network/test_floating_ips.py
index a7c1bd2..69367ab 100644
--- a/tempest/api/network/test_floating_ips.py
+++ b/tempest/api/network/test_floating_ips.py
@@ -15,8 +15,11 @@
from tempest.api.network import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
+
class FloatingIPTestJSON(base.BaseNetworkTest):
_interface = 'json'
@@ -43,7 +46,7 @@
@classmethod
def setUpClass(cls):
super(FloatingIPTestJSON, cls).setUpClass()
- cls.ext_net_id = cls.config.network.public_network_id
+ cls.ext_net_id = CONF.network.public_network_id
# Create network, subnet, router and add interface
cls.network = cls.create_network()
diff --git a/tempest/api/network/test_networks.py b/tempest/api/network/test_networks.py
index b1f4608..3aa765c 100644
--- a/tempest/api/network/test_networks.py
+++ b/tempest/api/network/test_networks.py
@@ -17,9 +17,12 @@
from tempest.api.network import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.test import attr
+CONF = config.CONF
+
class NetworksTestJSON(base.BaseNetworkTest):
_interface = 'json'
@@ -76,8 +79,8 @@
updated_net = body['network']
self.assertEqual(updated_net['name'], new_name)
# Find a cidr that is not in use yet and create a subnet with it
- cidr = netaddr.IPNetwork(self.network_cfg.tenant_network_cidr)
- mask_bits = self.network_cfg.tenant_network_mask_bits
+ cidr = netaddr.IPNetwork(CONF.network.tenant_network_cidr)
+ mask_bits = CONF.network.tenant_network_mask_bits
for subnet_cidr in cidr.subnet(mask_bits):
try:
resp, body = self.client.create_subnet(
@@ -321,8 +324,8 @@
@attr(type='smoke')
def test_bulk_create_delete_subnet(self):
# Creates 2 subnets in one request
- cidr = netaddr.IPNetwork(self.network_cfg.tenant_network_cidr)
- mask_bits = self.network_cfg.tenant_network_mask_bits
+ cidr = netaddr.IPNetwork(CONF.network.tenant_network_cidr)
+ mask_bits = CONF.network.tenant_network_mask_bits
cidrs = []
for subnet_cidr in cidr.subnet(mask_bits):
cidrs.append(subnet_cidr)
diff --git a/tempest/api/network/test_routers.py b/tempest/api/network/test_routers.py
index 7cabb63..f3fac93 100644
--- a/tempest/api/network/test_routers.py
+++ b/tempest/api/network/test_routers.py
@@ -17,8 +17,11 @@
from tempest.api.network import base_routers as base
from tempest.common.utils import data_utils
+from tempest import config
from tempest import test
+CONF = config.CONF
+
class RoutersTest(base.BaseRouterTest):
_interface = 'json'
@@ -35,14 +38,14 @@
name = data_utils.rand_name('router-')
resp, create_body = self.client.create_router(
name, external_gateway_info={
- "network_id": self.network_cfg.public_network_id},
+ "network_id": CONF.network.public_network_id},
admin_state_up=False)
self.assertEqual('201', resp['status'])
self.addCleanup(self._delete_router, create_body['router']['id'])
self.assertEqual(create_body['router']['name'], name)
self.assertEqual(
create_body['router']['external_gateway_info']['network_id'],
- self.network_cfg.public_network_id)
+ CONF.network.public_network_id)
self.assertEqual(create_body['router']['admin_state_up'], False)
# Show details of the created router
resp, show_body = self.client.show_router(
@@ -51,7 +54,7 @@
self.assertEqual(show_body['router']['name'], name)
self.assertEqual(
show_body['router']['external_gateway_info']['network_id'],
- self.network_cfg.public_network_id)
+ CONF.network.public_network_id)
self.assertEqual(show_body['router']['admin_state_up'], False)
# List routers and verify if created router is there in response
resp, list_body = self.client.list_routers()
@@ -123,14 +126,14 @@
def _verify_gateway_port(self, router_id):
resp, list_body = self.admin_client.list_ports(
- network_id=self.network_cfg.public_network_id,
+ network_id=CONF.network.public_network_id,
device_id=router_id)
self.assertEqual(len(list_body['ports']), 1)
gw_port = list_body['ports'][0]
fixed_ips = gw_port['fixed_ips']
self.assertEqual(len(fixed_ips), 1)
resp, public_net_body = self.admin_client.show_network(
- self.network_cfg.public_network_id)
+ CONF.network.public_network_id)
public_subnet_id = public_net_body['network']['subnets'][0]
self.assertEqual(fixed_ips[0]['subnet_id'], public_subnet_id)
@@ -140,13 +143,13 @@
self.client.update_router(
router['id'],
external_gateway_info={
- 'network_id': self.network_cfg.public_network_id})
+ 'network_id': CONF.network.public_network_id})
# Verify operation - router
resp, show_body = self.client.show_router(router['id'])
self.assertEqual('200', resp['status'])
self._verify_router_gateway(
router['id'],
- {'network_id': self.network_cfg.public_network_id})
+ {'network_id': CONF.network.public_network_id})
self._verify_gateway_port(router['id'])
@test.requires_ext(extension='ext-gw-mode', service='network')
@@ -156,11 +159,11 @@
self.admin_client.update_router_with_snat_gw_info(
router['id'],
external_gateway_info={
- 'network_id': self.network_cfg.public_network_id,
+ 'network_id': CONF.network.public_network_id,
'enable_snat': True})
self._verify_router_gateway(
router['id'],
- {'network_id': self.network_cfg.public_network_id,
+ {'network_id': CONF.network.public_network_id,
'enable_snat': True})
self._verify_gateway_port(router['id'])
@@ -171,11 +174,11 @@
self.admin_client.update_router_with_snat_gw_info(
router['id'],
external_gateway_info={
- 'network_id': self.network_cfg.public_network_id,
+ 'network_id': CONF.network.public_network_id,
'enable_snat': False})
self._verify_router_gateway(
router['id'],
- {'network_id': self.network_cfg.public_network_id,
+ {'network_id': CONF.network.public_network_id,
'enable_snat': False})
self._verify_gateway_port(router['id'])
@@ -183,12 +186,12 @@
def test_update_router_unset_gateway(self):
router = self.create_router(
data_utils.rand_name('router-'),
- external_network_id=self.network_cfg.public_network_id)
+ external_network_id=CONF.network.public_network_id)
self.client.update_router(router['id'], external_gateway_info={})
self._verify_router_gateway(router['id'])
# No gateway port expected
resp, list_body = self.admin_client.list_ports(
- network_id=self.network_cfg.public_network_id,
+ network_id=CONF.network.public_network_id,
device_id=router['id'])
self.assertFalse(list_body['ports'])
@@ -197,15 +200,15 @@
def test_update_router_reset_gateway_without_snat(self):
router = self.create_router(
data_utils.rand_name('router-'),
- external_network_id=self.network_cfg.public_network_id)
+ external_network_id=CONF.network.public_network_id)
self.admin_client.update_router_with_snat_gw_info(
router['id'],
external_gateway_info={
- 'network_id': self.network_cfg.public_network_id,
+ 'network_id': CONF.network.public_network_id,
'enable_snat': False})
self._verify_router_gateway(
router['id'],
- {'network_id': self.network_cfg.public_network_id,
+ {'network_id': CONF.network.public_network_id,
'enable_snat': False})
self._verify_gateway_port(router['id'])
diff --git a/tempest/api/network/test_vpnaas_extensions.py b/tempest/api/network/test_vpnaas_extensions.py
index 089f9ef..64b8a41 100644
--- a/tempest/api/network/test_vpnaas_extensions.py
+++ b/tempest/api/network/test_vpnaas_extensions.py
@@ -15,8 +15,11 @@
from tempest.api.network import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest import test
+CONF = config.CONF
+
class VPNaaSJSON(base.BaseNetworkTest):
_interface = 'json'
@@ -43,7 +46,7 @@
cls.subnet = cls.create_subnet(cls.network)
cls.router = cls.create_router(
data_utils.rand_name("router-"),
- external_network_id=cls.network_cfg.public_network_id)
+ external_network_id=CONF.network.public_network_id)
cls.create_router_interface(cls.router['id'], cls.subnet['id'])
cls.vpnservice = cls.create_vpnservice(cls.subnet['id'],
cls.router['id'])
diff --git a/tempest/api/object_storage/base.py b/tempest/api/object_storage/base.py
index 41f23b3..0eedea1 100644
--- a/tempest/api/object_storage/base.py
+++ b/tempest/api/object_storage/base.py
@@ -18,9 +18,12 @@
from tempest import clients
from tempest.common import custom_matchers
from tempest.common import isolated_creds
+from tempest import config
from tempest import exceptions
import tempest.test
+CONF = config.CONF
+
class BaseObjectTest(tempest.test.BaseTestCase):
@@ -28,12 +31,12 @@
def setUpClass(cls):
cls.set_network_resources()
super(BaseObjectTest, cls).setUpClass()
- if not cls.config.service_available.swift:
+ if not CONF.service_available.swift:
skip_msg = ("%s skipped as swift is not available" % cls.__name__)
raise cls.skipException(skip_msg)
cls.isolated_creds = isolated_creds.IsolatedCreds(
cls.__name__, network_resources=cls.network_resources)
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
# Get isolated creds for normal user
creds = cls.isolated_creds.get_primary_creds()
username, tenant_name, password = creds
@@ -82,7 +85,7 @@
def _assign_member_role(cls):
primary_user = cls.isolated_creds.get_primary_user()
alt_user = cls.isolated_creds.get_alt_user()
- swift_role = cls.config.object_storage.operator_role
+ swift_role = CONF.object_storage.operator_role
try:
resp, roles = cls.os_admin.identity_client.list_roles()
role = next(r for r in roles if r['name'] == swift_role)
diff --git a/tempest/api/object_storage/test_container_sync.py b/tempest/api/object_storage/test_container_sync.py
index 32bbcbd..207fced 100644
--- a/tempest/api/object_storage/test_container_sync.py
+++ b/tempest/api/object_storage/test_container_sync.py
@@ -18,9 +18,13 @@
from tempest.api.object_storage import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
from tempest.test import HTTP_SUCCESS
+CONF = config.CONF
+
+
# This test can be quite long to run due to its
# dependency on container-sync process running interval.
# You can obviously reduce the container-sync interval in the
@@ -40,9 +44,9 @@
# Must be configure according to container-sync interval
container_sync_timeout = \
- int(cls.config.object_storage.container_sync_timeout)
+ int(CONF.object_storage.container_sync_timeout)
cls.container_sync_interval = \
- int(cls.config.object_storage.container_sync_interval)
+ int(CONF.object_storage.container_sync_interval)
cls.attempts = \
int(container_sync_timeout / cls.container_sync_interval)
diff --git a/tempest/api/orchestration/base.py b/tempest/api/orchestration/base.py
index b69cc49..3424082 100644
--- a/tempest/api/orchestration/base.py
+++ b/tempest/api/orchestration/base.py
@@ -12,9 +12,11 @@
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest.openstack.common import log as logging
import tempest.test
+CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -26,12 +28,10 @@
def setUpClass(cls):
super(BaseOrchestrationTest, cls).setUpClass()
os = clients.OrchestrationManager()
- cls.orchestration_cfg = os.config.orchestration
- cls.compute_cfg = os.config.compute
- if not os.config.service_available.heat:
+ if not CONF.service_available.heat:
raise cls.skipException("Heat support is required")
- cls.build_timeout = cls.orchestration_cfg.build_timeout
- cls.build_interval = cls.orchestration_cfg.build_interval
+ cls.build_timeout = CONF.orchestration.build_timeout
+ cls.build_interval = CONF.orchestration.build_interval
cls.os = os
cls.orchestration_client = os.orchestration_client
@@ -45,7 +45,7 @@
def _get_default_network(cls):
resp, networks = cls.network_client.list_networks()
for net in networks['networks']:
- if net['name'] == cls.compute_cfg.fixed_network_name:
+ if net['name'] == CONF.compute.fixed_network_name:
return net
@classmethod
@@ -58,16 +58,6 @@
return admin_client
@classmethod
- def _get_client_args(cls):
-
- return (
- cls.config,
- cls.config.identity.admin_username,
- cls.config.identity.admin_password,
- cls.config.identity.uri
- )
-
- @classmethod
def create_stack(cls, stack_name, template_data, parameters={}):
resp, body = cls.client.create_stack(
stack_name,
diff --git a/tempest/api/orchestration/stacks/test_limits.py b/tempest/api/orchestration/stacks/test_limits.py
index 2b5bd8f..22f544d 100644
--- a/tempest/api/orchestration/stacks/test_limits.py
+++ b/tempest/api/orchestration/stacks/test_limits.py
@@ -14,9 +14,11 @@
from tempest.api.orchestration import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.test import attr
+CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -32,7 +34,7 @@
@attr(type='gate')
def test_exceed_max_template_size_fails(self):
- fill = 'A' * self.orchestration_cfg.max_template_size
+ fill = 'A' * CONF.orchestration.max_template_size
template = '''
HeatTemplateFormatVersion: '2012-12-12'
Description: '%s'
diff --git a/tempest/api/orchestration/stacks/test_neutron_resources.py b/tempest/api/orchestration/stacks/test_neutron_resources.py
index bed72c8..243c3ce 100644
--- a/tempest/api/orchestration/stacks/test_neutron_resources.py
+++ b/tempest/api/orchestration/stacks/test_neutron_resources.py
@@ -16,8 +16,10 @@
from tempest.api.orchestration import base
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -91,16 +93,15 @@
@classmethod
def setUpClass(cls):
super(NeutronResourcesTestJSON, cls).setUpClass()
- if not cls.orchestration_cfg.image_ref:
+ if not CONF.orchestration.image_ref:
raise cls.skipException("No image available to test")
cls.client = cls.orchestration_client
os = clients.Manager()
- cls.network_cfg = os.config.network
- if not cls.config.service_available.neutron:
+ if not CONF.service_available.neutron:
raise cls.skipException("Neutron support is required")
cls.network_client = os.network_client
cls.stack_name = data_utils.rand_name('heat')
- cls.keypair_name = (cls.orchestration_cfg.keypair_name or
+ cls.keypair_name = (CONF.orchestration.keypair_name or
cls._create_keypair()['name'])
cls.external_router_id = cls._get_external_router_id()
@@ -110,8 +111,8 @@
cls.template,
parameters={
'KeyName': cls.keypair_name,
- 'InstanceType': cls.orchestration_cfg.instance_type,
- 'ImageId': cls.orchestration_cfg.image_ref,
+ 'InstanceType': CONF.orchestration.instance_type,
+ 'ImageId': CONF.orchestration.image_ref,
'ExternalRouterId': cls.external_router_id
})
cls.stack_id = cls.stack_identifier.split('/')[1]
diff --git a/tempest/api/orchestration/stacks/test_server_cfn_init.py b/tempest/api/orchestration/stacks/test_server_cfn_init.py
index 2ef629f..4267c1d 100644
--- a/tempest/api/orchestration/stacks/test_server_cfn_init.py
+++ b/tempest/api/orchestration/stacks/test_server_cfn_init.py
@@ -125,13 +125,13 @@
@classmethod
def setUpClass(cls):
super(ServerCfnInitTestJSON, cls).setUpClass()
- if not cls.orchestration_cfg.image_ref:
+ if not CONF.orchestration.image_ref:
raise cls.skipException("No image available to test")
cls.client = cls.orchestration_client
stack_name = data_utils.rand_name('heat')
- if cls.orchestration_cfg.keypair_name:
- keypair_name = cls.orchestration_cfg.keypair_name
+ if CONF.orchestration.keypair_name:
+ keypair_name = CONF.orchestration.keypair_name
else:
cls.keypair = cls._create_keypair()
keypair_name = cls.keypair['name']
@@ -142,8 +142,8 @@
cls.template,
parameters={
'key_name': keypair_name,
- 'flavor': cls.orchestration_cfg.instance_type,
- 'image': cls.orchestration_cfg.image_ref,
+ 'flavor': CONF.orchestration.instance_type,
+ 'image': CONF.orchestration.image_ref,
'network': cls._get_default_network()['id']
})
diff --git a/tempest/api/volume/admin/test_multi_backend.py b/tempest/api/volume/admin/test_multi_backend.py
index 32a355b..96e0264 100644
--- a/tempest/api/volume/admin/test_multi_backend.py
+++ b/tempest/api/volume/admin/test_multi_backend.py
@@ -12,11 +12,14 @@
from tempest.api.volume import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.openstack.common import log as logging
from tempest.services.volume.json.admin import volume_types_client
from tempest.services.volume.json import volumes_client
from tempest.test import attr
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -26,24 +29,24 @@
@classmethod
def setUpClass(cls):
super(VolumeMultiBackendTest, cls).setUpClass()
- if not cls.config.volume_feature_enabled.multi_backend:
+ if not CONF.volume_feature_enabled.multi_backend:
cls.tearDownClass()
raise cls.skipException("Cinder multi-backend feature disabled")
- cls.backend1_name = cls.config.volume.backend1_name
- cls.backend2_name = cls.config.volume.backend2_name
+ cls.backend1_name = CONF.volume.backend1_name
+ cls.backend2_name = CONF.volume.backend2_name
- adm_user = cls.config.identity.admin_username
- adm_pass = cls.config.identity.admin_password
- adm_tenant = cls.config.identity.admin_tenant_name
- auth_url = cls.config.identity.uri
+ adm_user = CONF.identity.admin_username
+ adm_pass = CONF.identity.admin_password
+ adm_tenant = CONF.identity.admin_tenant_name
+ auth_url = CONF.identity.uri
- cls.volume_client = volumes_client.VolumesClientJSON(cls.config,
+ cls.volume_client = volumes_client.VolumesClientJSON(CONF,
adm_user,
adm_pass,
auth_url,
adm_tenant)
- cls.type_client = volume_types_client.VolumeTypesClientJSON(cls.config,
+ cls.type_client = volume_types_client.VolumeTypesClientJSON(CONF,
adm_user,
adm_pass,
auth_url,
diff --git a/tempest/api/volume/admin/test_volume_types.py b/tempest/api/volume/admin/test_volume_types.py
index 4add2c1..d481251 100644
--- a/tempest/api/volume/admin/test_volume_types.py
+++ b/tempest/api/volume/admin/test_volume_types.py
@@ -15,8 +15,11 @@
from tempest.api.volume import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
+
class VolumeTypesTest(base.BaseVolumeV1AdminTest):
_interface = "json"
@@ -43,8 +46,8 @@
volume = {}
vol_name = data_utils.rand_name("volume-")
vol_type_name = data_utils.rand_name("volume-type-")
- proto = self.config.volume.storage_protocol
- vendor = self.config.volume.vendor_name
+ proto = CONF.volume.storage_protocol
+ vendor = CONF.volume.vendor_name
extra_specs = {"storage_protocol": proto,
"vendor_name": vendor}
body = {}
@@ -86,8 +89,8 @@
# Create/get volume type.
body = {}
name = data_utils.rand_name("volume-type-")
- proto = self.config.volume.storage_protocol
- vendor = self.config.volume.vendor_name
+ proto = CONF.volume.storage_protocol
+ vendor = CONF.volume.vendor_name
extra_specs = {"storage_protocol": proto,
"vendor_name": vendor}
resp, body = self.client.create_volume_type(
diff --git a/tempest/api/volume/base.py b/tempest/api/volume/base.py
index 9c6eebe..de2b240 100644
--- a/tempest/api/volume/base.py
+++ b/tempest/api/volume/base.py
@@ -15,9 +15,12 @@
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest.openstack.common import log as logging
import tempest.test
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -30,17 +33,17 @@
cls.set_network_resources()
super(BaseVolumeTest, cls).setUpClass()
- if not cls.config.service_available.cinder:
+ if not CONF.service_available.cinder:
skip_msg = ("%s skipped as Cinder is not available" % cls.__name__)
raise cls.skipException(skip_msg)
cls.os = cls.get_client_manager()
cls.servers_client = cls.os.servers_client
- cls.image_ref = cls.config.compute.image_ref
- cls.flavor_ref = cls.config.compute.flavor_ref
- cls.build_interval = cls.config.volume.build_interval
- cls.build_timeout = cls.config.volume.build_timeout
+ cls.image_ref = CONF.compute.image_ref
+ cls.flavor_ref = CONF.compute.flavor_ref
+ cls.build_interval = CONF.volume.build_interval
+ cls.build_timeout = CONF.volume.build_timeout
cls.snapshots = []
cls.volumes = []
@@ -109,7 +112,7 @@
class BaseVolumeV1Test(BaseVolumeTest):
@classmethod
def setUpClass(cls):
- if not cls.config.volume_feature_enabled.api_v1:
+ if not CONF.volume_feature_enabled.api_v1:
msg = "Volume API v1 not supported"
raise cls.skipException(msg)
super(BaseVolumeV1Test, cls).setUpClass()
@@ -123,14 +126,14 @@
@classmethod
def setUpClass(cls):
super(BaseVolumeV1AdminTest, cls).setUpClass()
- cls.adm_user = cls.config.identity.admin_username
- cls.adm_pass = cls.config.identity.admin_password
- cls.adm_tenant = cls.config.identity.admin_tenant_name
+ cls.adm_user = CONF.identity.admin_username
+ cls.adm_pass = CONF.identity.admin_password
+ cls.adm_tenant = CONF.identity.admin_tenant_name
if not all((cls.adm_user, cls.adm_pass, cls.adm_tenant)):
msg = ("Missing Volume Admin API credentials "
"in configuration.")
raise cls.skipException(msg)
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_admin_creds()
admin_username, admin_tenant_name, admin_password = creds
cls.os_adm = clients.Manager(username=admin_username,
diff --git a/tempest/api/volume/test_extensions.py b/tempest/api/volume/test_extensions.py
index deef8a1..cceffd6 100644
--- a/tempest/api/volume/test_extensions.py
+++ b/tempest/api/volume/test_extensions.py
@@ -15,9 +15,12 @@
from tempest.api.volume import base
+from tempest import config
from tempest.openstack.common import log as logging
from tempest.test import attr
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -30,11 +33,11 @@
# List of all extensions
resp, extensions = self.volumes_extension_client.list_extensions()
self.assertEqual(200, resp.status)
- if len(self.config.volume_feature_enabled.api_extensions) == 0:
+ if len(CONF.volume_feature_enabled.api_extensions) == 0:
raise self.skipException('There are not any extensions configured')
extension_list = [extension.get('alias') for extension in extensions]
LOG.debug("Cinder extensions: %s" % ','.join(extension_list))
- ext = self.config.volume_feature_enabled.api_extensions[0]
+ ext = CONF.volume_feature_enabled.api_extensions[0]
if ext == 'all':
self.assertIn('Hosts', map(lambda x: x['name'], extensions))
elif ext:
diff --git a/tempest/api/volume/test_volume_metadata.py b/tempest/api/volume/test_volume_metadata.py
index 6d23c0a..ec732d1 100644
--- a/tempest/api/volume/test_volume_metadata.py
+++ b/tempest/api/volume/test_volume_metadata.py
@@ -13,6 +13,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+from testtools.matchers import ContainsAll
+
from tempest.api.volume import base
from tempest import test
@@ -49,7 +51,7 @@
# Get the metadata of the volume
resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
self.assertEqual(200, resp.status)
- self.assertEqual(metadata, body)
+ self.assertThat(body.items(), ContainsAll(metadata.items()))
# Delete one item metadata of the volume
rsp, body = self.volumes_client.delete_volume_metadata_item(
self.volume_id,
@@ -76,7 +78,7 @@
# Get the metadata of the volume
resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
self.assertEqual(200, resp.status)
- self.assertEqual(metadata, body)
+ self.assertThat(body.items(), ContainsAll(metadata.items()))
# Update metadata
resp, body = self.volumes_client.update_volume_metadata(
self.volume_id,
@@ -85,7 +87,7 @@
# Get the metadata of the volume
resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
self.assertEqual(200, resp.status)
- self.assertEqual(update, body)
+ self.assertThat(body.items(), ContainsAll(update.items()))
@test.attr(type='gate')
def test_update_volume_metadata_item(self):
@@ -93,9 +95,6 @@
metadata = {"key1": "value1",
"key2": "value2",
"key3": "value3"}
- create_expect = {"key1": "value1",
- "key2": "value2",
- "key3": "value3"}
update_item = {"key3": "value3_update"}
expect = {"key1": "value1",
"key2": "value2",
@@ -105,7 +104,7 @@
self.volume_id,
metadata)
self.assertEqual(200, resp.status)
- self.assertEqual(create_expect, body)
+ self.assertThat(body.items(), ContainsAll(metadata.items()))
# Update metadata item
resp, body = self.volumes_client.update_volume_metadata_item(
self.volume_id,
@@ -115,7 +114,7 @@
# Get the metadata of the volume
resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
self.assertEqual(200, resp.status)
- self.assertEqual(expect, body)
+ self.assertThat(body.items(), ContainsAll(expect.items()))
class VolumeMetadataTestXML(VolumeMetadataTest):
diff --git a/tempest/api/volume/test_volume_transfers.py b/tempest/api/volume/test_volume_transfers.py
index 4ee7bd0..fc4f07d 100644
--- a/tempest/api/volume/test_volume_transfers.py
+++ b/tempest/api/volume/test_volume_transfers.py
@@ -15,8 +15,11 @@
from tempest.api.volume import base
from tempest import clients
+from tempest import config
from tempest.test import attr
+CONF = config.CONF
+
class VolumesTransfersTest(base.BaseVolumeV1Test):
_interface = "json"
@@ -26,7 +29,7 @@
super(VolumesTransfersTest, cls).setUpClass()
# Add another tenant to test volume-transfer
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
creds = cls.isolated_creds.get_alt_creds()
username, tenant_name, password = creds
cls.os_alt = clients.Manager(username=username,
diff --git a/tempest/api/volume/test_volumes_actions.py b/tempest/api/volume/test_volumes_actions.py
index e767ec0..5924c7e 100644
--- a/tempest/api/volume/test_volumes_actions.py
+++ b/tempest/api/volume/test_volumes_actions.py
@@ -15,10 +15,13 @@
from tempest.api.volume import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
from tempest.test import services
from tempest.test import stresstest
+CONF = config.CONF
+
class VolumesActionsTest(base.BaseVolumeV1Test):
_interface = "json"
@@ -98,7 +101,7 @@
image_name = data_utils.rand_name('Image-')
resp, body = self.client.upload_volume(self.volume['id'],
image_name,
- self.config.volume.disk_format)
+ CONF.volume.disk_format)
image_id = body["image_id"]
self.addCleanup(self.image_client.delete_image, image_id)
self.assertEqual(202, resp.status)
diff --git a/tempest/api/volume/test_volumes_get.py b/tempest/api/volume/test_volumes_get.py
index 79a4365..6d89e5b 100644
--- a/tempest/api/volume/test_volumes_get.py
+++ b/tempest/api/volume/test_volumes_get.py
@@ -13,11 +13,16 @@
# License for the specific language governing permissions and limitations
# under the License.
+from testtools.matchers import ContainsAll
+
from tempest.api.volume import base
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
from tempest.test import services
+CONF = config.CONF
+
class VolumesGetTest(base.BaseVolumeV1Test):
_interface = "json"
@@ -66,16 +71,16 @@
self.assertEqual(200, resp.status)
self.assertEqual(v_name,
fetched_volume['display_name'],
- 'The fetched Volume is different '
+ 'The fetched Volume name is different '
'from the created Volume')
self.assertEqual(volume['id'],
fetched_volume['id'],
- 'The fetched Volume is different '
+ 'The fetched Volume id is different '
'from the created Volume')
- self.assertEqual(metadata,
- fetched_volume['metadata'],
- 'The fetched Volume is different '
- 'from the created Volume')
+ self.assertThat(fetched_volume['metadata'].items(),
+ ContainsAll(metadata.items()),
+ 'The fetched Volume metadata misses data '
+ 'from the created Volume')
# NOTE(jdg): Revert back to strict true/false checking
# after fix for bug #1227837 merges
@@ -102,7 +107,10 @@
self.assertEqual(volume['id'], updated_volume['id'])
self.assertEqual(new_v_name, updated_volume['display_name'])
self.assertEqual(new_desc, updated_volume['display_description'])
- self.assertEqual(metadata, updated_volume['metadata'])
+ self.assertThat(updated_volume['metadata'].items(),
+ ContainsAll(metadata.items()),
+ 'The fetched Volume metadata misses data '
+ 'from the created Volume')
# NOTE(jdg): Revert back to strict true/false checking
# after fix for bug #1227837 merges
@@ -112,18 +120,6 @@
if 'imageRef' not in kwargs:
self.assertEqual(boot_flag, False)
- @attr(type='gate')
- def test_volume_get_metadata_none(self):
- # Create a volume without passing metadata, get details, and delete
-
- # Create a volume without metadata
- volume = self.create_volume(metadata={})
-
- # GET Volume
- resp, fetched_volume = self.client.get_volume(volume['id'])
- self.assertEqual(200, resp.status)
- self.assertEqual(fetched_volume['metadata'], {})
-
@attr(type='smoke')
def test_volume_create_get_update_delete(self):
self._volume_create_get_update_delete()
@@ -131,8 +127,7 @@
@attr(type='smoke')
@services('image')
def test_volume_create_get_update_delete_from_image(self):
- self._volume_create_get_update_delete(imageRef=self.
- config.compute.image_ref)
+ self._volume_create_get_update_delete(imageRef=CONF.compute.image_ref)
@attr(type='gate')
def test_volume_create_get_update_delete_as_clone(self):
diff --git a/tempest/cli/__init__.py b/tempest/cli/__init__.py
index dfa2124..a5e0447 100644
--- a/tempest/cli/__init__.py
+++ b/tempest/cli/__init__.py
@@ -17,31 +17,15 @@
import shlex
import subprocess
-from oslo.config import cfg
-
import tempest.cli.output_parser
+from tempest import config
from tempest.openstack.common import log as logging
import tempest.test
LOG = logging.getLogger(__name__)
-cli_opts = [
- cfg.BoolOpt('enabled',
- default=True,
- help="enable cli tests"),
- cfg.StrOpt('cli_dir',
- default='/usr/local/bin',
- help="directory where python client binaries are located"),
- cfg.IntOpt('timeout',
- default=15,
- help="Number of seconds to wait on a CLI timeout"),
-]
-
-CONF = cfg.CONF
-cli_group = cfg.OptGroup(name='cli', title="cli Configuration Options")
-CONF.register_group(cli_group)
-CONF.register_opts(cli_opts, group=cli_group)
+CONF = config.CONF
class ClientTestBase(tempest.test.BaseTestCase):
@@ -50,7 +34,6 @@
if not CONF.cli.enabled:
msg = "cli testing disabled"
raise cls.skipException(msg)
- cls.identity = cls.config.identity
super(ClientTestBase, cls).setUpClass()
def __init__(self, *args, **kwargs):
@@ -106,10 +89,10 @@
# TODO(jogo) make admin=False work
creds = ('--os-username %s --os-tenant-name %s --os-password %s '
'--os-auth-url %s ' %
- (self.identity.admin_username,
- self.identity.admin_tenant_name,
- self.identity.admin_password,
- self.identity.uri))
+ (CONF.identity.admin_username,
+ CONF.identity.admin_tenant_name,
+ CONF.identity.admin_password,
+ CONF.identity.uri))
flags = creds + ' ' + flags
return self.cmd(cmd, action, flags, params, fail_ok)
diff --git a/tempest/cli/simple_read_only/test_cinder.py b/tempest/cli/simple_read_only/test_cinder.py
index 5dcb708..afbd732 100644
--- a/tempest/cli/simple_read_only/test_cinder.py
+++ b/tempest/cli/simple_read_only/test_cinder.py
@@ -20,7 +20,6 @@
import tempest.cli
from tempest import config
-
CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -73,14 +72,14 @@
def test_cinder_quota_defaults(self):
"""This CLI can accept and string as param."""
roles = self.parser.listing(self.cinder('quota-defaults',
- params=self.identity.
+ params=CONF.identity.
admin_tenant_name))
self.assertTableStruct(roles, ['Property', 'Value'])
def test_cinder_quota_show(self):
"""This CLI can accept and string as param."""
roles = self.parser.listing(self.cinder('quota-show',
- params=self.identity.
+ params=CONF.identity.
admin_tenant_name))
self.assertTableStruct(roles, ['Property', 'Value'])
@@ -146,7 +145,7 @@
self.cinder('list', flags='--retries 3')
def test_cinder_region_list(self):
- region = self.config.volume.region
+ region = CONF.volume.region
if not region:
- region = self.config.identity.region
+ region = CONF.identity.region
self.cinder('list', flags='--os-region-name ' + region)
diff --git a/tempest/cli/simple_read_only/test_glance.py b/tempest/cli/simple_read_only/test_glance.py
index b558190..9869483 100644
--- a/tempest/cli/simple_read_only/test_glance.py
+++ b/tempest/cli/simple_read_only/test_glance.py
@@ -16,13 +16,11 @@
import re
import subprocess
-from oslo.config import cfg
-
import tempest.cli
+from tempest import config
from tempest.openstack.common import log as logging
-CONF = cfg.CONF
-
+CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -55,7 +53,7 @@
'Size', 'Status'])
def test_glance_member_list(self):
- tenant_name = '--tenant-id %s' % self.identity.admin_tenant_name
+ tenant_name = '--tenant-id %s' % CONF.identity.admin_tenant_name
out = self.glance('member-list',
params=tenant_name)
endpoints = self.parser.listing(out)
diff --git a/tempest/cli/simple_read_only/test_heat.py b/tempest/cli/simple_read_only/test_heat.py
index b45182b..cf4580c 100644
--- a/tempest/cli/simple_read_only/test_heat.py
+++ b/tempest/cli/simple_read_only/test_heat.py
@@ -14,12 +14,11 @@
import os
import yaml
-from oslo.config import cfg
-
import tempest.cli
+from tempest import config
from tempest.openstack.common import log as logging
-CONF = cfg.CONF
+CONF = config.CONF
LOG = logging.getLogger(__name__)
diff --git a/tempest/cli/simple_read_only/test_keystone.py b/tempest/cli/simple_read_only/test_keystone.py
index 271a18c..1efbede 100644
--- a/tempest/cli/simple_read_only/test_keystone.py
+++ b/tempest/cli/simple_read_only/test_keystone.py
@@ -16,12 +16,11 @@
import re
import subprocess
-from oslo.config import cfg
-
import tempest.cli
+from tempest import config
from tempest.openstack.common import log as logging
-CONF = cfg.CONF
+CONF = config.CONF
LOG = logging.getLogger(__name__)
diff --git a/tempest/cli/simple_read_only/test_nova.py b/tempest/cli/simple_read_only/test_nova.py
index f8ba971..b0264d0 100644
--- a/tempest/cli/simple_read_only/test_nova.py
+++ b/tempest/cli/simple_read_only/test_nova.py
@@ -15,15 +15,14 @@
import subprocess
-from oslo.config import cfg
import testtools
import tempest.cli
+from tempest import config
from tempest.openstack.common import log as logging
import tempest.test
-CONF = cfg.CONF
-
+CONF = config.CONF
LOG = logging.getLogger(__name__)
diff --git a/tempest/clients.py b/tempest/clients.py
index 4c40ce0..797185a 100644
--- a/tempest/clients.py
+++ b/tempest/clients.py
@@ -17,7 +17,6 @@
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.services.baremetal.v1.client_json import BaremetalClientJSON
-from tempest.services.baremetal.v1.client_xml import BaremetalClientXML
from tempest.services import botoclients
from tempest.services.compute.json.aggregates_client import \
AggregatesClientJSON
@@ -185,7 +184,6 @@
:param password: Override of the password
:param tenant_name: Override of the tenant name
"""
- self.config = CONF
# If no creds are provided, we fall back on the defaults
# in the config file for the Compute API.
self.username = username or CONF.identity.username
@@ -202,12 +200,12 @@
self.auth_url = CONF.identity.uri
self.auth_url_v3 = CONF.identity.uri_v3
- client_args = (CONF, self.username, self.password,
+ client_args = (self.username, self.password,
self.auth_url, self.tenant_name)
if self.auth_url_v3:
auth_version = 'v3'
- client_args_v3_auth = (CONF, self.username,
+ client_args_v3_auth = (self.username,
self.password, self.auth_url_v3,
self.tenant_name, auth_version)
else:
@@ -217,7 +215,6 @@
if interface == 'xml':
self.certificates_client = CertificatesClientXML(*client_args)
- self.baremetal_client = BaremetalClientXML(*client_args)
self.servers_client = ServersClientXML(*client_args)
self.limits_client = LimitsClientXML(*client_args)
self.images_client = ImagesClientXML(*client_args)
@@ -233,7 +230,7 @@
self.volume_types_client = VolumeTypesClientXML(*client_args)
self.identity_client = IdentityClientXML(*client_args)
self.identity_v3_client = IdentityV3ClientXML(*client_args)
- self.token_client = TokenClientXML(CONF)
+ self.token_client = TokenClientXML()
self.security_groups_client = SecurityGroupsClientXML(
*client_args)
self.interfaces_client = InterfacesClientXML(*client_args)
@@ -289,7 +286,7 @@
self.volume_types_client = VolumeTypesClientJSON(*client_args)
self.identity_client = IdentityClientJSON(*client_args)
self.identity_v3_client = IdentityV3ClientJSON(*client_args)
- self.token_client = TokenClientJSON(CONF)
+ self.token_client = TokenClientJSON()
self.security_groups_client = SecurityGroupsClientJSON(
*client_args)
self.interfaces_v3_client = InterfacesV3ClientJSON(*client_args)
diff --git a/tempest/common/commands.py b/tempest/common/commands.py
index af7a692..6405eaa 100644
--- a/tempest/common/commands.py
+++ b/tempest/common/commands.py
@@ -29,7 +29,8 @@
subprocess_args = {'stdout': subprocess.PIPE,
'stderr': subprocess.STDOUT}
try:
- proc = subprocess.Popen(['/usr/bin/sudo'] + args, **subprocess_args)
+ proc = subprocess.Popen(['/usr/bin/sudo', '-n'] + args,
+ **subprocess_args)
return proc.communicate()[0]
if proc.returncode != 0:
LOG.error(cmd + "returned with: " +
diff --git a/tempest/common/isolated_creds.py b/tempest/common/isolated_creds.py
index f2df061..146fac9 100644
--- a/tempest/common/isolated_creds.py
+++ b/tempest/common/isolated_creds.py
@@ -472,7 +472,11 @@
net_client = self.network_admin_client
for cred in self.isolated_net_resources:
network, subnet, router = self.isolated_net_resources.get(cred)
- if self.network_resources.get('router'):
+ LOG.debug("Clearing network: %(network)s, "
+ "subnet: %(subnet)s, router: %(router)s",
+ {'network': network, 'subnet': subnet, 'router': router})
+ if (not self.network_resources or
+ self.network_resources.get('router')):
try:
if self.tempest_client:
net_client.remove_router_interface_with_subnet_id(
@@ -485,13 +489,16 @@
router['name'])
pass
self._clear_isolated_router(router['id'], router['name'])
- if self.network_resources.get('network'):
+ if (not self.network_resources or
+ self.network_resources.get('network')):
# TODO(mlavalle) This method call will be removed once patch
# https://review.openstack.org/#/c/46563/ merges in Neutron
self._cleanup_ports(network['id'])
- if self.network_resources.get('subnet'):
+ if (not self.network_resources or
+ self.network_resources.get('subnet')):
self._clear_isolated_subnet(subnet['id'], subnet['name'])
- if self.network_resources.get('network'):
+ if (not self.network_resources or
+ self.network_resources.get('network')):
self._clear_isolated_network(network['id'], network['name'])
def clear_isolated_creds(self):
diff --git a/tempest/common/rest_client.py b/tempest/common/rest_client.py
index b1fef99..636e2bf 100644
--- a/tempest/common/rest_client.py
+++ b/tempest/common/rest_client.py
@@ -22,10 +22,13 @@
import time
from tempest.common import http
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
# redrive rate limited calls at most twice
MAX_RECURSION_DEPTH = 2
TOKEN_CHARS_RE = re.compile('^[-A-Za-z0-9+/=]*$')
@@ -38,9 +41,8 @@
TYPE = "json"
LOG = logging.getLogger(__name__)
- def __init__(self, config, user, password, auth_url, tenant_name=None,
+ def __init__(self, user, password, auth_url, tenant_name=None,
auth_version='v2'):
- self.config = config
self.user = user
self.password = password
self.auth_url = auth_url
@@ -51,21 +53,21 @@
self.token = None
self.base_url = None
self.region = {}
- for cfgname in dir(self.config):
+ for cfgname in dir(CONF):
# Find all config.FOO.catalog_type and assume FOO is a service.
- cfg = getattr(self.config, cfgname)
+ cfg = getattr(CONF, cfgname)
catalog_type = getattr(cfg, 'catalog_type', None)
if not catalog_type:
continue
service_region = getattr(cfg, 'region', None)
if not service_region:
- service_region = self.config.identity.region
+ service_region = CONF.identity.region
self.region[catalog_type] = service_region
self.endpoint_url = 'publicURL'
self.headers = {'Content-Type': 'application/%s' % self.TYPE,
'Accept': 'application/%s' % self.TYPE}
- self.build_interval = config.compute.build_interval
- self.build_timeout = config.compute.build_timeout
+ self.build_interval = CONF.compute.build_interval
+ self.build_timeout = CONF.compute.build_timeout
self.general_header_lc = set(('cache-control', 'connection',
'date', 'pragma', 'trailer',
'transfer-encoding', 'via',
@@ -74,18 +76,18 @@
'location', 'proxy-authenticate',
'retry-after', 'server',
'vary', 'www-authenticate'))
- dscv = self.config.identity.disable_ssl_certificate_validation
+ dscv = CONF.identity.disable_ssl_certificate_validation
self.http_obj = http.ClosingHttp(
disable_ssl_certificate_validation=dscv)
def __str__(self):
STRING_LIMIT = 80
- str_format = ("config:%s, user:%s, password:%s, "
+ str_format = ("user:%s, password:%s, "
"auth_url:%s, tenant_name:%s, auth_version:%s, "
"service:%s, base_url:%s, region:%s, "
"endpoint_url:%s, build_interval:%s, build_timeout:%s"
"\ntoken:%s..., \nheaders:%s...")
- return str_format % (self.config, self.user, self.password,
+ return str_format % (self.user, self.password,
self.auth_url, self.tenant_name,
self.auth_version, self.service,
self.base_url, self.region, self.endpoint_url,
diff --git a/tempest/config.py b/tempest/config.py
index 5a9199d..ccb3125 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -667,7 +667,7 @@
default='^cirros-0.3.1-x86_64-uec$',
help="Matching images become parameters for scenario tests"),
cfg.StrOpt('flavor_regex',
- default='^m1.(micro|nano|tiny)$',
+ default='^m1.nano$',
help="Matching flavors become parameters for scenario tests"),
cfg.StrOpt('non_ssh_image_regex',
default='^.*[Ww]in.*$',
@@ -689,6 +689,20 @@
help="Catalog type of the baremetal provisioning service."),
]
+cli_group = cfg.OptGroup(name='cli', title="cli Configuration Options")
+
+CLIGroup = [
+ cfg.BoolOpt('enabled',
+ default=True,
+ help="enable cli tests"),
+ cfg.StrOpt('cli_dir',
+ default='/usr/local/bin',
+ help="directory where python client binaries are located"),
+ cfg.IntOpt('timeout',
+ default=15,
+ help="Number of seconds to wait on a CLI timeout"),
+]
+
# this should never be called outside of this class
class TempestConfigPrivate(object):
@@ -713,9 +727,7 @@
path = os.path.join(conf_dir, conf_file)
- if not (os.path.isfile(path) or
- 'TEMPEST_CONFIG_DIR' in os.environ or
- 'TEMPEST_CONFIG' in os.environ):
+ if not os.path.isfile(path):
path = failsafe_path
# only parse the config file if we expect one to exist. This is needed
@@ -759,6 +771,7 @@
register_opt_group(cfg.CONF, debug_group, DebugGroup)
register_opt_group(cfg.CONF, baremetal_group, BaremetalGroup)
register_opt_group(cfg.CONF, input_scenario_group, InputScenarioGroup)
+ register_opt_group(cfg.CONF, cli_group, CLIGroup)
self.compute = cfg.CONF.compute
self.compute_feature_enabled = cfg.CONF['compute-feature-enabled']
self.identity = cfg.CONF.identity
@@ -784,6 +797,7 @@
self.debug = cfg.CONF.debug
self.baremetal = cfg.CONF.baremetal
self.input_scenario = cfg.CONF['input-scenario']
+ self.cli = cfg.CONF.cli
if not self.compute_admin.username:
self.compute_admin.username = self.identity.admin_username
self.compute_admin.password = self.identity.admin_password
diff --git a/tempest/manager.py b/tempest/manager.py
index cba6ba5..93ff10f 100644
--- a/tempest/manager.py
+++ b/tempest/manager.py
@@ -13,7 +13,6 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest import config
from tempest import exceptions
@@ -27,7 +26,6 @@
"""
def __init__(self):
- self.config = config.CONF
self.client_attr_names = []
# we do this everywhere, have it be part of the super class
diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py
index ca3a2db..12d81cc 100644
--- a/tempest/scenario/manager.py
+++ b/tempest/scenario/manager.py
@@ -35,11 +35,13 @@
from tempest.common import isolated_creds
from tempest.common.utils import data_utils
from tempest.common.utils.linux.remote_client import RemoteClient
+from tempest import config
from tempest import exceptions
import tempest.manager
from tempest.openstack.common import log
import tempest.test
+CONF = config.CONF
LOG = log.getLogger(__name__)
@@ -89,14 +91,14 @@
# each user that operations need to be performed for.
self._validate_credentials(username, password, tenant_name)
- auth_url = self.config.identity.uri
- dscv = self.config.identity.disable_ssl_certificate_validation
- region = self.config.identity.region
+ auth_url = CONF.identity.uri
+ dscv = CONF.identity.disable_ssl_certificate_validation
+ region = CONF.identity.region
client_args = (username, password, tenant_name, auth_url)
# Create our default Nova client to use in testing
- service_type = self.config.compute.catalog_type
+ service_type = CONF.compute.catalog_type
return novaclient.client.Client(self.NOVACLIENT_VERSION,
*client_args,
service_type=service_type,
@@ -107,17 +109,17 @@
def _get_image_client(self):
token = self.identity_client.auth_token
- region = self.config.identity.region
+ region = CONF.identity.region
endpoint = self.identity_client.service_catalog.url_for(
attr='region', filter_value=region,
service_type='image', endpoint_type='publicURL')
- dscv = self.config.identity.disable_ssl_certificate_validation
+ dscv = CONF.identity.disable_ssl_certificate_validation
return glanceclient.Client('1', endpoint=endpoint, token=token,
insecure=dscv)
def _get_volume_client(self, username, password, tenant_name):
- auth_url = self.config.identity.uri
- region = self.config.identity.region
+ auth_url = CONF.identity.uri
+ region = CONF.identity.region
return cinderclient.client.Client(self.CINDERCLIENT_VERSION,
username,
password,
@@ -127,16 +129,17 @@
http_log_debug=True)
def _get_object_storage_client(self, username, password, tenant_name):
- auth_url = self.config.identity.uri
- # add current tenant to Member group.
+ auth_url = CONF.identity.uri
+ # add current tenant to swift operator role group.
keystone_admin = self._get_identity_client(
- self.config.identity.admin_username,
- self.config.identity.admin_password,
- self.config.identity.admin_tenant_name)
+ CONF.identity.admin_username,
+ CONF.identity.admin_password,
+ CONF.identity.admin_tenant_name)
- # enable test user to operate swift by adding Member role to him.
+ # enable test user to operate swift by adding operator role to him.
roles = keystone_admin.roles.list()
- member_role = [role for role in roles if role.name == 'Member'][0]
+ operator_role = CONF.object_storage.operator_role
+ member_role = [role for role in roles if role.name == operator_role][0]
# NOTE(maurosr): This is surrounded in the try-except block cause
# neutron tests doesn't have tenant isolation.
try:
@@ -153,16 +156,16 @@
def _get_orchestration_client(self, username=None, password=None,
tenant_name=None):
if not username:
- username = self.config.identity.admin_username
+ username = CONF.identity.admin_username
if not password:
- password = self.config.identity.admin_password
+ password = CONF.identity.admin_password
if not tenant_name:
- tenant_name = self.config.identity.tenant_name
+ tenant_name = CONF.identity.tenant_name
self._validate_credentials(username, password, tenant_name)
keystone = self._get_identity_client(username, password, tenant_name)
- region = self.config.identity.region
+ region = CONF.identity.region
token = keystone.auth_token
try:
endpoint = keystone.service_catalog.url_for(
@@ -184,8 +187,8 @@
# of the identity service, so use admin credentials by default.
self._validate_credentials(username, password, tenant_name)
- auth_url = self.config.identity.uri
- dscv = self.config.identity.disable_ssl_certificate_validation
+ auth_url = CONF.identity.uri
+ dscv = CONF.identity.disable_ssl_certificate_validation
return keystoneclient.v2_0.client.Client(username=username,
password=password,
@@ -200,14 +203,14 @@
# preferable to authenticating as a specific user because
# working with certain resources (public routers and networks)
# often requires admin privileges anyway.
- username = self.config.identity.admin_username
- password = self.config.identity.admin_password
- tenant_name = self.config.identity.admin_tenant_name
+ username = CONF.identity.admin_username
+ password = CONF.identity.admin_password
+ tenant_name = CONF.identity.admin_tenant_name
self._validate_credentials(username, password, tenant_name)
- auth_url = self.config.identity.uri
- dscv = self.config.identity.disable_ssl_certificate_validation
+ auth_url = CONF.identity.uri
+ dscv = CONF.identity.disable_ssl_certificate_validation
return neutronclient.v2_0.client.Client(username=username,
password=password,
@@ -251,12 +254,12 @@
@classmethod
def _get_credentials(cls, get_creds, prefix):
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
username, tenant_name, password = get_creds()
else:
- username = getattr(cls.config.identity, prefix + 'username')
- password = getattr(cls.config.identity, prefix + 'password')
- tenant_name = getattr(cls.config.identity, prefix + 'tenant_name')
+ username = getattr(CONF.identity, prefix + 'username')
+ password = getattr(CONF.identity, prefix + 'password')
+ tenant_name = getattr(CONF.identity, prefix + 'tenant_name')
return username, password, tenant_name
@classmethod
@@ -402,8 +405,8 @@
thing, log_status, new_status)
if not tempest.test.call_until_true(
check_status,
- self.config.compute.build_timeout,
- self.config.compute.build_interval):
+ CONF.compute.build_timeout,
+ CONF.compute.build_interval):
message = ("Timed out waiting for thing %s "
"to become %s") % (thing_id, log_status)
raise exceptions.TimeoutException(message)
@@ -453,9 +456,9 @@
if name is None:
name = data_utils.rand_name('scenario-server-')
if image is None:
- image = self.config.compute.image_ref
+ image = CONF.compute.image_ref
if flavor is None:
- flavor = self.config.compute.flavor_ref
+ flavor = CONF.compute.flavor_ref
LOG.debug("Creating a server (name: %s, image: %s, flavor: %s)",
name, image, flavor)
server = client.servers.create(name, image, flavor, **create_kwargs)
@@ -518,10 +521,10 @@
if isinstance(server_or_ip, basestring):
ip = server_or_ip
else:
- network_name_for_ssh = self.config.compute.network_for_ssh
+ network_name_for_ssh = CONF.compute.network_for_ssh
ip = server_or_ip.networks[network_name_for_ssh][0]
if username is None:
- username = self.config.scenario.ssh_user
+ username = CONF.scenario.ssh_user
if private_key is None:
private_key = self.keypair.private_key
return RemoteClient(ip, username, pkey=private_key)
@@ -541,7 +544,7 @@
@classmethod
def check_preconditions(cls):
- if (cls.config.service_available.neutron):
+ if (CONF.service_available.neutron):
cls.enabled = True
# verify that neutron_available is telling the truth
try:
@@ -557,13 +560,13 @@
@classmethod
def setUpClass(cls):
super(NetworkScenarioTest, cls).setUpClass()
- if cls.config.compute.allow_tenant_isolation:
+ if CONF.compute.allow_tenant_isolation:
cls.tenant_id = cls.isolated_creds.get_primary_tenant().id
else:
cls.tenant_id = cls.manager._get_identity_client(
- cls.config.identity.username,
- cls.config.identity.password,
- cls.config.identity.tenant_name).tenant_id
+ CONF.identity.username,
+ CONF.identity.password,
+ CONF.identity.tenant_name).tenant_id
def _create_network(self, tenant_id, namestart='network-smoke-'):
name = data_utils.rand_name(namestart)
@@ -618,12 +621,12 @@
Create a subnet for the given network within the cidr block
configured for tenant networks.
"""
- cfg = self.config.network
- tenant_cidr = netaddr.IPNetwork(cfg.tenant_network_cidr)
+ tenant_cidr = netaddr.IPNetwork(CONF.network.tenant_network_cidr)
result = None
# Repeatedly attempt subnet creation with sequential cidr
# blocks until an unallocated block is found.
- for subnet_cidr in tenant_cidr.subnet(cfg.tenant_network_mask_bits):
+ for subnet_cidr in tenant_cidr.subnet(
+ CONF.network.tenant_network_mask_bits):
body = dict(
subnet=dict(
ip_version=4,
@@ -707,7 +710,7 @@
return (proc.returncode == 0) == should_succeed
return tempest.test.call_until_true(
- ping, self.config.compute.ping_timeout, 1)
+ ping, CONF.compute.ping_timeout, 1)
def _check_vm_connectivity(self, ip_address,
username=None,
@@ -903,7 +906,7 @@
return rules
def _ssh_to_server(self, server, private_key):
- ssh_login = self.config.compute.image_ssh_user
+ ssh_login = CONF.compute.image_ssh_user
return self.get_remote_client(server,
username=ssh_login,
private_key=private_key)
@@ -929,8 +932,8 @@
network has, a tenant router will be created and returned that
routes traffic to the public network.
"""
- router_id = self.config.network.public_router_id
- network_id = self.config.network.public_network_id
+ router_id = CONF.network.public_router_id
+ network_id = CONF.network.public_network_id
if router_id:
result = self.network_client.show_router(router_id)
return net_common.AttributeDict(**result['router'])
@@ -983,14 +986,14 @@
@classmethod
def setUpClass(cls):
super(OrchestrationScenarioTest, cls).setUpClass()
- if not cls.config.service_available.heat:
+ if not CONF.service_available.heat:
raise cls.skipException("Heat support is required")
@classmethod
def credentials(cls):
- username = cls.config.identity.admin_username
- password = cls.config.identity.admin_password
- tenant_name = cls.config.identity.tenant_name
+ username = CONF.identity.admin_username
+ password = CONF.identity.admin_password
+ tenant_name = CONF.identity.tenant_name
return username, password, tenant_name
def _load_template(self, base_file, file_name):
@@ -1007,5 +1010,5 @@
def _get_default_network(cls):
networks = cls.network_client.list_networks()
for net in networks['networks']:
- if net['name'] == cls.config.compute.fixed_network_name:
+ if net['name'] == CONF.compute.fixed_network_name:
return net
diff --git a/tempest/scenario/orchestration/test_autoscaling.py b/tempest/scenario/orchestration/test_autoscaling.py
index be7f955..cd7a2b2 100644
--- a/tempest/scenario/orchestration/test_autoscaling.py
+++ b/tempest/scenario/orchestration/test_autoscaling.py
@@ -13,25 +13,28 @@
import heatclient.exc as heat_exceptions
import time
+from tempest import config
from tempest.scenario import manager
from tempest.test import attr
from tempest.test import call_until_true
from tempest.test import services
from tempest.test import skip_because
+CONF = config.CONF
+
class AutoScalingTest(manager.OrchestrationScenarioTest):
def setUp(self):
super(AutoScalingTest, self).setUp()
- if not self.config.orchestration.image_ref:
+ if not CONF.orchestration.image_ref:
raise self.skipException("No image available to test")
self.client = self.orchestration_client
def assign_keypair(self):
self.stack_name = self._stack_rand_name()
- if self.config.orchestration.keypair_name:
- self.keypair_name = self.config.orchestration.keypair_name
+ if CONF.orchestration.keypair_name:
+ self.keypair_name = CONF.orchestration.keypair_name
else:
self.keypair = self.create_keypair()
self.keypair_name = self.keypair.id
@@ -40,8 +43,8 @@
net = self._get_default_network()
self.parameters = {
'KeyName': self.keypair_name,
- 'InstanceType': self.config.orchestration.instance_type,
- 'ImageId': self.config.orchestration.image_ref,
+ 'InstanceType': CONF.orchestration.instance_type,
+ 'ImageId': CONF.orchestration.image_ref,
'StackStart': str(time.time()),
'Subnet': net['subnets'][0]
}
@@ -58,7 +61,7 @@
# if a keypair was set, do not delete the stack on exit to allow
# for manual post-mortums
- if not self.config.orchestration.keypair_name:
+ if not CONF.orchestration.keypair_name:
self.set_resource('stack', self.stack)
@skip_because(bug="1257575")
@@ -70,7 +73,7 @@
self.launch_stack()
sid = self.stack_identifier
- timeout = self.config.orchestration.build_timeout
+ timeout = CONF.orchestration.build_timeout
interval = 10
self.assertEqual('CREATE', self.stack.action)
diff --git a/tempest/scenario/test_cross_tenant_connectivity.py b/tempest/scenario/test_cross_tenant_connectivity.py
index 6fd10be..edcf091 100644
--- a/tempest/scenario/test_cross_tenant_connectivity.py
+++ b/tempest/scenario/test_cross_tenant_connectivity.py
@@ -15,6 +15,7 @@
from tempest.common import debug
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.scenario import manager
@@ -23,6 +24,8 @@
from tempest.test import call_until_true
from tempest.test import services
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -131,8 +134,8 @@
msg = 'No alt_tenant defined'
cls.enabled = False
raise cls.skipException(msg)
- cfg = cls.config.network
- if not (cfg.tenant_networks_reachable or cfg.public_network_id):
+ if not (CONF.network.tenant_networks_reachable or
+ CONF.network.public_network_id):
msg = ('Either tenant_networks_reachable must be "true", or '
'public_network_id must be defined.')
cls.enabled = False
@@ -166,7 +169,7 @@
)
for tenant in [cls.demo_tenant, cls.alt_tenant]:
cls.tenants[tenant.tenant_id] = tenant
- if not cls.config.network.public_router_id:
+ if not CONF.network.public_router_id:
cls.floating_ip_access = True
else:
cls.floating_ip_access = False
@@ -277,7 +280,7 @@
self._assign_floating_ips(server)
def _assign_floating_ips(self, server):
- public_network_id = self.config.network.public_network_id
+ public_network_id = CONF.network.public_network_id
floating_ip = self._create_floating_ip(server, public_network_id)
self.floating_ips.setdefault(server, floating_ip)
@@ -353,7 +356,7 @@
return should_succeed
return call_until_true(ping_remote,
- self.config.compute.ping_timeout,
+ CONF.compute.ping_timeout,
1)
def _check_connectivity(self, access_point, ip, should_succeed=True):
diff --git a/tempest/scenario/test_dashboard_basic_ops.py b/tempest/scenario/test_dashboard_basic_ops.py
index 98efcfb..19996e5 100644
--- a/tempest/scenario/test_dashboard_basic_ops.py
+++ b/tempest/scenario/test_dashboard_basic_ops.py
@@ -17,9 +17,12 @@
from lxml import html
+from tempest import config
from tempest.scenario import manager
from tempest.test import services
+CONF = config.CONF
+
class TestDashboardBasicOps(manager.OfficialClientTest):
@@ -35,16 +38,16 @@
cls.set_network_resources()
super(TestDashboardBasicOps, cls).setUpClass()
- if not cls.config.service_available.horizon:
+ if not CONF.service_available.horizon:
raise cls.skipException("Horizon support is required")
def check_login_page(self):
- response = urllib2.urlopen(self.config.dashboard.dashboard_url)
+ response = urllib2.urlopen(CONF.dashboard.dashboard_url)
self.assertIn("<h3>Log In</h3>", response.read())
def user_login(self):
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
- response = self.opener.open(self.config.dashboard.dashboard_url).read()
+ response = self.opener.open(CONF.dashboard.dashboard_url).read()
# Grab the CSRF token and default region
csrf_token = html.fromstring(response).xpath(
@@ -53,17 +56,17 @@
'//input[@name="region"]/@value')[0]
# Prepare login form request
- req = urllib2.Request(self.config.dashboard.login_url)
+ req = urllib2.Request(CONF.dashboard.login_url)
req.add_header('Content-type', 'application/x-www-form-urlencoded')
- req.add_header('Referer', self.config.dashboard.dashboard_url)
- params = {'username': self.config.identity.username,
- 'password': self.config.identity.password,
+ req.add_header('Referer', CONF.dashboard.dashboard_url)
+ params = {'username': CONF.identity.username,
+ 'password': CONF.identity.password,
'region': region,
'csrfmiddlewaretoken': csrf_token}
self.opener.open(req, urllib.urlencode(params))
def check_home_page(self):
- response = self.opener.open(self.config.dashboard.dashboard_url)
+ response = self.opener.open(CONF.dashboard.dashboard_url)
self.assertIn('Overview', response.read())
@services('dashboard')
diff --git a/tempest/scenario/test_large_ops.py b/tempest/scenario/test_large_ops.py
index 25e2dab..e8030c9 100644
--- a/tempest/scenario/test_large_ops.py
+++ b/tempest/scenario/test_large_ops.py
@@ -14,10 +14,13 @@
# under the License.
from tempest.common.utils import data_utils
+from tempest import config
from tempest.openstack.common import log as logging
from tempest.scenario import manager
from tempest.test import services
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -67,12 +70,9 @@
return image.id
def glance_image_create(self):
- aki_img_path = self.config.scenario.img_dir + "/" + \
- self.config.scenario.aki_img_file
- ari_img_path = self.config.scenario.img_dir + "/" + \
- self.config.scenario.ari_img_file
- ami_img_path = self.config.scenario.img_dir + "/" + \
- self.config.scenario.ami_img_file
+ aki_img_path = CONF.scenario.img_dir + "/" + CONF.scenario.aki_img_file
+ ari_img_path = CONF.scenario.img_dir + "/" + CONF.scenario.ari_img_file
+ ami_img_path = CONF.scenario.img_dir + "/" + CONF.scenario.ami_img_file
LOG.debug("paths: ami: %s, ari: %s, aki: %s"
% (ami_img_path, ari_img_path, aki_img_path))
kernel_id = self._image_create('scenario-aki', 'aki', aki_img_path)
@@ -87,12 +87,12 @@
def nova_boot(self):
name = data_utils.rand_name('scenario-server-')
client = self.compute_client
- flavor_id = self.config.compute.flavor_ref
+ flavor_id = CONF.compute.flavor_ref
secgroup = self._create_security_group_nova()
self.servers = client.servers.create(
name=name, image=self.image,
flavor=flavor_id,
- min_count=self.config.scenario.large_ops_number,
+ min_count=CONF.scenario.large_ops_number,
security_groups=[secgroup.name])
# needed because of bug 1199788
self.servers = [x for x in client.servers.list() if name in x.name]
@@ -102,7 +102,7 @@
@services('compute', 'image')
def test_large_ops_scenario(self):
- if self.config.scenario.large_ops_number < 1:
+ if CONF.scenario.large_ops_number < 1:
return
self.glance_image_create()
self.nova_boot()
diff --git a/tempest/scenario/test_minimum_basic.py b/tempest/scenario/test_minimum_basic.py
index 26a4dc0..846e0cc 100644
--- a/tempest/scenario/test_minimum_basic.py
+++ b/tempest/scenario/test_minimum_basic.py
@@ -14,10 +14,12 @@
# under the License.
from tempest.common.utils import data_utils
+from tempest import config
from tempest.openstack.common import log as logging
from tempest.scenario import manager
from tempest.test import services
+CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -63,12 +65,9 @@
return image.id
def glance_image_create(self):
- aki_img_path = self.config.scenario.img_dir + "/" + \
- self.config.scenario.aki_img_file
- ari_img_path = self.config.scenario.img_dir + "/" + \
- self.config.scenario.ari_img_file
- ami_img_path = self.config.scenario.img_dir + "/" + \
- self.config.scenario.ami_img_file
+ aki_img_path = CONF.scenario.img_dir + "/" + CONF.scenario.aki_img_file
+ ari_img_path = CONF.scenario.img_dir + "/" + CONF.scenario.ari_img_file
+ ami_img_path = CONF.scenario.img_dir + "/" + CONF.scenario.ami_img_file
LOG.debug("paths: ami: %s, ari: %s, aki: %s"
% (ami_img_path, ari_img_path, aki_img_path))
kernel_id = self._image_create('scenario-aki', 'aki', aki_img_path)
diff --git a/tempest/scenario/test_network_basic_ops.py b/tempest/scenario/test_network_basic_ops.py
index aea5874..be0e045 100644
--- a/tempest/scenario/test_network_basic_ops.py
+++ b/tempest/scenario/test_network_basic_ops.py
@@ -103,8 +103,8 @@
@classmethod
def check_preconditions(cls):
super(TestNetworkBasicOps, cls).check_preconditions()
- cfg = cls.config.network
- if not (cfg.tenant_networks_reachable or cfg.public_network_id):
+ if not (CONF.network.tenant_networks_reachable
+ or CONF.network.public_network_id):
msg = ('Either tenant_networks_reachable must be "true", or '
'public_network_id must be defined.')
cls.enabled = False
diff --git a/tempest/scenario/test_server_advanced_ops.py b/tempest/scenario/test_server_advanced_ops.py
index 45c24ca..9626157 100644
--- a/tempest/scenario/test_server_advanced_ops.py
+++ b/tempest/scenario/test_server_advanced_ops.py
@@ -13,10 +13,13 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest import config
from tempest.openstack.common import log as logging
from tempest.scenario import manager
from tempest.test import services
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -34,13 +37,13 @@
cls.set_network_resources()
super(TestServerAdvancedOps, cls).setUpClass()
- if not cls.config.compute_feature_enabled.resize:
+ if not CONF.compute_feature_enabled.resize:
msg = "Skipping test - resize not available on this host"
raise cls.skipException(msg)
- resize_flavor = cls.config.compute.flavor_ref_alt
+ resize_flavor = CONF.compute.flavor_ref_alt
- if resize_flavor == cls.config.compute.flavor_ref:
+ if resize_flavor == CONF.compute.flavor_ref:
msg = "Skipping test - flavor_ref and flavor_ref_alt are identical"
raise cls.skipException(msg)
@@ -49,7 +52,7 @@
# We create an instance for use in this test
instance = self.create_server()
instance_id = instance.id
- resize_flavor = self.config.compute.flavor_ref_alt
+ resize_flavor = CONF.compute.flavor_ref_alt
LOG.debug("Resizing instance %s from flavor %s to flavor %s",
instance.id, instance.flavor, resize_flavor)
instance.resize(resize_flavor)
diff --git a/tempest/scenario/test_server_basic_ops.py b/tempest/scenario/test_server_basic_ops.py
index 8779518..73ff6b4 100644
--- a/tempest/scenario/test_server_basic_ops.py
+++ b/tempest/scenario/test_server_basic_ops.py
@@ -15,12 +15,15 @@
from tempest.common.utils import data_utils
from tempest.common.utils import test_utils
+from tempest import config
from tempest.openstack.common import log as logging
from tempest.scenario import manager
from tempest.test import services
import testscenarios
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
# NOTE(andreaf) - nose does not honour the load_tests protocol
@@ -56,9 +59,9 @@
# Setup image and flavor the test instance
# Support both configured and injected values
if not hasattr(self, 'image_ref'):
- self.image_ref = self.config.compute.image_ref
+ self.image_ref = CONF.compute.image_ref
if not hasattr(self, 'flavor_ref'):
- self.flavor_ref = self.config.compute.flavor_ref
+ self.flavor_ref = CONF.compute.flavor_ref
self.image_utils = test_utils.ImageUtils()
if not self.image_utils.is_flavor_enough(self.flavor_ref,
self.image_ref):
@@ -67,7 +70,7 @@
image=self.image_ref, flavor=self.flavor_ref
)
)
- self.run_ssh = self.config.compute.run_ssh and \
+ self.run_ssh = CONF.compute.run_ssh and \
self.image_utils.is_sshable_image(self.image_ref)
self.ssh_user = self.image_utils.ssh_user(self.image_ref)
LOG.debug('Starting test for i:{image}, f:{flavor}. '
diff --git a/tempest/scenario/test_snapshot_pattern.py b/tempest/scenario/test_snapshot_pattern.py
index 5ff8642..2bb3d84 100644
--- a/tempest/scenario/test_snapshot_pattern.py
+++ b/tempest/scenario/test_snapshot_pattern.py
@@ -13,10 +13,12 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest import config
from tempest.openstack.common import log
from tempest.scenario import manager
from tempest.test import services
+CONF = config.CONF
LOG = log.getLogger(__name__)
@@ -74,8 +76,8 @@
self._create_loginable_secgroup_rule_nova()
# boot a instance and create a timestamp file in it
- server = self._boot_image(self.config.compute.image_ref)
- if self.config.compute.use_floatingip_for_ssh:
+ server = self._boot_image(CONF.compute.image_ref)
+ if CONF.compute.use_floatingip_for_ssh:
fip_for_server = self._create_floating_ip()
self._set_floating_ip_to_server(server, fip_for_server)
self._write_timestamp(fip_for_server.ip)
@@ -89,7 +91,7 @@
server_from_snapshot = self._boot_image(snapshot_image.id)
# check the existence of the timestamp file in the second instance
- if self.config.compute.use_floatingip_for_ssh:
+ if CONF.compute.use_floatingip_for_ssh:
fip_for_snapshot = self._create_floating_ip()
self._set_floating_ip_to_server(server_from_snapshot,
fip_for_snapshot)
diff --git a/tempest/scenario/test_stamp_pattern.py b/tempest/scenario/test_stamp_pattern.py
index 84c7096..8d043ae 100644
--- a/tempest/scenario/test_stamp_pattern.py
+++ b/tempest/scenario/test_stamp_pattern.py
@@ -18,11 +18,14 @@
from cinderclient import exceptions as cinder_exceptions
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.scenario import manager
import tempest.test
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -113,7 +116,6 @@
def _wait_for_volume_availible_on_the_system(self, server_or_ip):
ssh = self.get_remote_client(server_or_ip)
- conf = self.config
def _func():
part = ssh.get_partitions()
@@ -121,8 +123,8 @@
return 'vdb' in part
if not tempest.test.call_until_true(_func,
- conf.compute.build_timeout,
- conf.compute.build_interval):
+ CONF.compute.build_timeout,
+ CONF.compute.build_interval):
raise exceptions.TimeoutException
def _create_timestamp(self, server_or_ip):
@@ -148,10 +150,10 @@
# boot an instance and create a timestamp file in it
volume = self._create_volume()
- server = self._boot_image(self.config.compute.image_ref)
+ server = self._boot_image(CONF.compute.image_ref)
# create and add floating IP to server1
- if self.config.compute.use_floatingip_for_ssh:
+ if CONF.compute.use_floatingip_for_ssh:
floating_ip_for_server = self._create_floating_ip()
self._add_floating_ip(server, floating_ip_for_server)
ip_for_server = floating_ip_for_server.ip
@@ -177,7 +179,7 @@
server_from_snapshot = self._boot_image(snapshot_image.id)
# create and add floating IP to server_from_snapshot
- if self.config.compute.use_floatingip_for_ssh:
+ if CONF.compute.use_floatingip_for_ssh:
floating_ip_for_snapshot = self._create_floating_ip()
self._add_floating_ip(server_from_snapshot,
floating_ip_for_snapshot)
diff --git a/tempest/scenario/test_swift_basic_ops.py b/tempest/scenario/test_swift_basic_ops.py
index 5892e1e..b367f7f 100644
--- a/tempest/scenario/test_swift_basic_ops.py
+++ b/tempest/scenario/test_swift_basic_ops.py
@@ -15,10 +15,13 @@
from tempest.common.utils.data_utils import rand_name
+from tempest import config
from tempest.openstack.common import log as logging
from tempest.scenario import manager
from tempest.test import services
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -39,7 +42,7 @@
def setUpClass(cls):
cls.set_network_resources()
super(TestSwiftBasicOps, cls).setUpClass()
- if not cls.config.service_available.swift:
+ if not CONF.service_available.swift:
skip_msg = ("%s skipped as swift is not available" %
cls.__name__)
raise cls.skipException(skip_msg)
diff --git a/tempest/scenario/test_volume_boot_pattern.py b/tempest/scenario/test_volume_boot_pattern.py
index c4f8ced..54851b5 100644
--- a/tempest/scenario/test_volume_boot_pattern.py
+++ b/tempest/scenario/test_volume_boot_pattern.py
@@ -11,11 +11,13 @@
# under the License.
from tempest.common.utils import data_utils
+from tempest import config
from tempest.openstack.common import log
from tempest.scenario import manager
import tempest.test
from tempest.test import services
+CONF = config.CONF
LOG = log.getLogger(__name__)
@@ -36,7 +38,7 @@
"""
def _create_volume_from_image(self):
- img_uuid = self.config.compute.image_ref
+ img_uuid = CONF.compute.image_ref
vol_name = data_utils.rand_name('volume-origin')
return self.create_volume(name=vol_name, imageRef=img_uuid)
@@ -89,14 +91,14 @@
'available')
def _ssh_to_server(self, server, keypair):
- if self.config.compute.use_floatingip_for_ssh:
+ if CONF.compute.use_floatingip_for_ssh:
floating_ip = self.compute_client.floating_ips.create()
fip_name = data_utils.rand_name('scenario-fip')
self.set_resource(fip_name, floating_ip)
server.add_floating_ip(floating_ip)
ip = floating_ip.ip
else:
- network_name_for_ssh = self.config.compute.network_for_ssh
+ network_name_for_ssh = CONF.compute.network_for_ssh
ip = server.networks[network_name_for_ssh][0]
try:
diff --git a/tempest/services/baremetal/base.py b/tempest/services/baremetal/base.py
index 74d023a..0b5426e 100644
--- a/tempest/services/baremetal/base.py
+++ b/tempest/services/baremetal/base.py
@@ -16,6 +16,9 @@
import six
from tempest.common import rest_client
+from tempest import config
+
+CONF = config.CONF
def handle_errors(f):
@@ -44,10 +47,10 @@
"""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(BaremetalClient, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(BaremetalClient, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.baremetal.catalog_type
+ self.service = CONF.baremetal.catalog_type
self.uri_prefix = ''
def serialize(self, object_type, object_dict):
diff --git a/tempest/services/baremetal/v1/base_v1.py b/tempest/services/baremetal/v1/base_v1.py
index 5e90cd6..13693e1 100644
--- a/tempest/services/baremetal/v1/base_v1.py
+++ b/tempest/services/baremetal/v1/base_v1.py
@@ -21,8 +21,8 @@
methods in order to send requests to Ironic.
"""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(BaremetalClientV1, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(BaremetalClientV1, self).__init__(username, password,
auth_url, tenant_name)
self.version = '1'
self.uri_prefix = 'v%s' % self.version
diff --git a/tempest/services/baremetal/v1/client_json.py b/tempest/services/baremetal/v1/client_json.py
index f1708af..c98b20f 100644
--- a/tempest/services/baremetal/v1/client_json.py
+++ b/tempest/services/baremetal/v1/client_json.py
@@ -18,8 +18,8 @@
class BaremetalClientJSON(base_v1.BaremetalClientV1):
"""Tempest REST client for Ironic JSON API v1."""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(BaremetalClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(BaremetalClientJSON, self).__init__(username, password,
auth_url, tenant_name)
self.serialize = lambda obj_type, obj_body: json.dumps(obj_body)
diff --git a/tempest/services/baremetal/v1/client_xml.py b/tempest/services/baremetal/v1/client_xml.py
deleted file mode 100644
index 4c214fe..0000000
--- a/tempest/services/baremetal/v1/client_xml.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-from tempest.common import rest_client
-from tempest.services.baremetal.v1 import base_v1 as base
-from tempest.services.compute.xml import common as xml
-
-
-class BaremetalClientXML(rest_client.RestClientXML, base.BaremetalClientV1):
- """Tempest REST client for Ironic XML API v1."""
-
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(BaremetalClientXML, self).__init__(config, username, password,
- auth_url, tenant_name)
-
- self.serialize = self.json_to_xml
- self.deserialize = xml.xml_to_json
-
- def json_to_xml(self, object_type, object_dict):
- """
- Brainlessly converts a specification of an object to XML string.
-
- :param object_type: Kind of the object.
- :param object_dict: Specification of the object attributes as a dict.
- :return: An XML string that corresponds to the specification.
-
- """
- root = xml.Element(object_type)
-
- for attr_name, value in object_dict:
- # Handle nested dictionaries
- if isinstance(value, dict):
- value = self.json_to_xml(attr_name, value)
-
- root.append(xml.Element(attr_name, value))
-
- return str(xml.Document(root))
-
- def _patch_request(self, resource_name, uuid, patch_object):
- """Changes Content-Type header to application/json for jsonpatch."""
-
- self.headers['Content-Type'] = 'application/json'
- try:
- super(self)._patch_request(self, resource_name, uuid, patch_object)
- finally:
- self.headers['Content-Type'] = 'application/xml'
diff --git a/tempest/services/botoclients.py b/tempest/services/botoclients.py
index a1e1b5c..03e87b1 100644
--- a/tempest/services/botoclients.py
+++ b/tempest/services/botoclients.py
@@ -18,25 +18,27 @@
import types
import urlparse
+from tempest import config
from tempest import exceptions
import boto
import boto.ec2
import boto.s3.connection
+CONF = config.CONF
+
class BotoClientBase(object):
ALLOWED_METHODS = set()
- def __init__(self, config,
- username=None, password=None,
+ def __init__(self, username=None, password=None,
auth_url=None, tenant_name=None,
*args, **kwargs):
- self.connection_timeout = str(config.boto.http_socket_timeout)
- self.num_retries = str(config.boto.num_retries)
- self.build_timeout = config.boto.build_timeout
+ self.connection_timeout = str(CONF.boto.http_socket_timeout)
+ self.num_retries = str(CONF.boto.num_retries)
+ self.build_timeout = CONF.boto.build_timeout
self.ks_cred = {"username": username,
"password": password,
"auth_url": auth_url,
@@ -103,15 +105,15 @@
def connect_method(self, *args, **kwargs):
return boto.connect_ec2(*args, **kwargs)
- def __init__(self, config, *args, **kwargs):
- super(APIClientEC2, self).__init__(config, *args, **kwargs)
- aws_access = config.boto.aws_access
- aws_secret = config.boto.aws_secret
- purl = urlparse.urlparse(config.boto.ec2_url)
+ def __init__(self, *args, **kwargs):
+ super(APIClientEC2, self).__init__(*args, **kwargs)
+ aws_access = CONF.boto.aws_access
+ aws_secret = CONF.boto.aws_secret
+ purl = urlparse.urlparse(CONF.boto.ec2_url)
- region_name = config.compute.region
+ region_name = CONF.compute.region
if not region_name:
- region_name = config.identity.region
+ region_name = CONF.identity.region
region = boto.ec2.regioninfo.RegionInfo(name=region_name,
endpoint=purl.hostname)
port = purl.port
@@ -194,11 +196,11 @@
def connect_method(self, *args, **kwargs):
return boto.connect_s3(*args, **kwargs)
- def __init__(self, config, *args, **kwargs):
- super(ObjectClientS3, self).__init__(config, *args, **kwargs)
- aws_access = config.boto.aws_access
- aws_secret = config.boto.aws_secret
- purl = urlparse.urlparse(config.boto.s3_url)
+ def __init__(self, *args, **kwargs):
+ super(ObjectClientS3, self).__init__(*args, **kwargs)
+ aws_access = CONF.boto.aws_access
+ aws_secret = CONF.boto.aws_secret
+ purl = urlparse.urlparse(CONF.boto.s3_url)
port = purl.port
if port is None:
if purl.scheme is not "https":
diff --git a/tempest/services/compute/json/aggregates_client.py b/tempest/services/compute/json/aggregates_client.py
index d9e73de..235d006 100644
--- a/tempest/services/compute/json/aggregates_client.py
+++ b/tempest/services/compute/json/aggregates_client.py
@@ -16,15 +16,18 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class AggregatesClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(AggregatesClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(AggregatesClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_aggregates(self):
"""Get aggregate list."""
diff --git a/tempest/services/compute/json/availability_zone_client.py b/tempest/services/compute/json/availability_zone_client.py
index 49664c7..2b7e23c 100644
--- a/tempest/services/compute/json/availability_zone_client.py
+++ b/tempest/services/compute/json/availability_zone_client.py
@@ -16,15 +16,18 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class AvailabilityZoneClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(AvailabilityZoneClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(AvailabilityZoneClientJSON, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def get_availability_zone_list(self):
resp, body = self.get('os-availability-zone')
diff --git a/tempest/services/compute/json/certificates_client.py b/tempest/services/compute/json/certificates_client.py
index f4d31ed..06e2ae7 100644
--- a/tempest/services/compute/json/certificates_client.py
+++ b/tempest/services/compute/json/certificates_client.py
@@ -16,15 +16,18 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class CertificatesClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(CertificatesClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(CertificatesClientJSON, self).__init__(username,
password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def get_certificate(self, id):
url = "os-certificates/%s" % (id)
diff --git a/tempest/services/compute/json/extensions_client.py b/tempest/services/compute/json/extensions_client.py
index ae68261..8505d93 100644
--- a/tempest/services/compute/json/extensions_client.py
+++ b/tempest/services/compute/json/extensions_client.py
@@ -16,14 +16,17 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class ExtensionsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ExtensionsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ExtensionsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_extensions(self):
url = 'extensions'
diff --git a/tempest/services/compute/json/fixed_ips_client.py b/tempest/services/compute/json/fixed_ips_client.py
index 31754ca..19bf4e2 100644
--- a/tempest/services/compute/json/fixed_ips_client.py
+++ b/tempest/services/compute/json/fixed_ips_client.py
@@ -16,14 +16,17 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class FixedIPsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(FixedIPsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(FixedIPsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def get_fixed_ip_details(self, fixed_ip):
url = "os-fixed-ips/%s" % (fixed_ip)
diff --git a/tempest/services/compute/json/flavors_client.py b/tempest/services/compute/json/flavors_client.py
index 300a0de..7fcf1b2 100644
--- a/tempest/services/compute/json/flavors_client.py
+++ b/tempest/services/compute/json/flavors_client.py
@@ -17,14 +17,17 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class FlavorsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(FlavorsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(FlavorsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_flavors(self, params=None):
url = 'flavors'
diff --git a/tempest/services/compute/json/floating_ips_client.py b/tempest/services/compute/json/floating_ips_client.py
index 1235dd1..7c2139d 100644
--- a/tempest/services/compute/json/floating_ips_client.py
+++ b/tempest/services/compute/json/floating_ips_client.py
@@ -17,14 +17,17 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class FloatingIPsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(FloatingIPsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(FloatingIPsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_floating_ips(self, params=None):
"""Returns a list of all floating IPs filtered by any parameters."""
diff --git a/tempest/services/compute/json/hosts_client.py b/tempest/services/compute/json/hosts_client.py
index 23cb7e9..33e5345 100644
--- a/tempest/services/compute/json/hosts_client.py
+++ b/tempest/services/compute/json/hosts_client.py
@@ -16,14 +16,17 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class HostsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(HostsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(HostsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_hosts(self, params=None):
"""Lists all hosts."""
diff --git a/tempest/services/compute/json/hypervisor_client.py b/tempest/services/compute/json/hypervisor_client.py
index c8ac951..a4d8660 100644
--- a/tempest/services/compute/json/hypervisor_client.py
+++ b/tempest/services/compute/json/hypervisor_client.py
@@ -16,15 +16,18 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class HypervisorClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(HypervisorClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(HypervisorClientJSON, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def get_hypervisor_list(self):
"""List hypervisors information."""
diff --git a/tempest/services/compute/json/images_client.py b/tempest/services/compute/json/images_client.py
index d64d8d7..c9adc3f 100644
--- a/tempest/services/compute/json/images_client.py
+++ b/tempest/services/compute/json/images_client.py
@@ -18,17 +18,20 @@
from tempest.common.rest_client import RestClient
from tempest.common import waiters
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class ImagesClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ImagesClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ImagesClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
- self.build_interval = self.config.compute.build_interval
- self.build_timeout = self.config.compute.build_timeout
+ self.service = CONF.compute.catalog_type
+ self.build_interval = CONF.compute.build_interval
+ self.build_timeout = CONF.compute.build_timeout
def create_image(self, server_id, name, meta=None):
"""Creates an image of the original server."""
diff --git a/tempest/services/compute/json/instance_usage_audit_log_client.py b/tempest/services/compute/json/instance_usage_audit_log_client.py
index 97062cb..2673bd7 100644
--- a/tempest/services/compute/json/instance_usage_audit_log_client.py
+++ b/tempest/services/compute/json/instance_usage_audit_log_client.py
@@ -16,14 +16,17 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class InstanceUsagesAuditLogClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
+ def __init__(self, username, password, auth_url, tenant_name=None):
super(InstanceUsagesAuditLogClientJSON, self).__init__(
- config, username, password, auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ username, password, auth_url, tenant_name)
+ self.service = CONF.compute.catalog_type
def list_instance_usage_audit_logs(self):
url = 'os-instance_usage_audit_log'
diff --git a/tempest/services/compute/json/interfaces_client.py b/tempest/services/compute/json/interfaces_client.py
index 06e6476..21d3a5a 100644
--- a/tempest/services/compute/json/interfaces_client.py
+++ b/tempest/services/compute/json/interfaces_client.py
@@ -17,15 +17,18 @@
import time
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class InterfacesClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(InterfacesClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(InterfacesClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_interfaces(self, server):
resp, body = self.get('servers/%s/os-interface' % server)
diff --git a/tempest/services/compute/json/keypairs_client.py b/tempest/services/compute/json/keypairs_client.py
index efd92d2..dd4e3e1 100644
--- a/tempest/services/compute/json/keypairs_client.py
+++ b/tempest/services/compute/json/keypairs_client.py
@@ -16,14 +16,17 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class KeyPairsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(KeyPairsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(KeyPairsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_keypairs(self):
resp, body = self.get("os-keypairs")
diff --git a/tempest/services/compute/json/limits_client.py b/tempest/services/compute/json/limits_client.py
index 525c12f..c5cc988 100644
--- a/tempest/services/compute/json/limits_client.py
+++ b/tempest/services/compute/json/limits_client.py
@@ -14,15 +14,19 @@
# under the License.
import json
+
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class LimitsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(LimitsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(LimitsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def get_absolute_limits(self):
resp, body = self.get("limits")
diff --git a/tempest/services/compute/json/quotas_client.py b/tempest/services/compute/json/quotas_client.py
index b6ec9b8..df12467 100644
--- a/tempest/services/compute/json/quotas_client.py
+++ b/tempest/services/compute/json/quotas_client.py
@@ -16,14 +16,17 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class QuotasClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(QuotasClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(QuotasClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def get_quota_set(self, tenant_id):
"""List the quota set for a tenant."""
diff --git a/tempest/services/compute/json/security_groups_client.py b/tempest/services/compute/json/security_groups_client.py
index 8a44626..299a6e6 100644
--- a/tempest/services/compute/json/security_groups_client.py
+++ b/tempest/services/compute/json/security_groups_client.py
@@ -17,16 +17,19 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class SecurityGroupsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(SecurityGroupsClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(SecurityGroupsClientJSON, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_security_groups(self, params=None):
"""List all security groups for a user."""
diff --git a/tempest/services/compute/json/servers_client.py b/tempest/services/compute/json/servers_client.py
index 0b9ca0e..0987f05 100644
--- a/tempest/services/compute/json/servers_client.py
+++ b/tempest/services/compute/json/servers_client.py
@@ -20,17 +20,20 @@
from tempest.common.rest_client import RestClient
from tempest.common import waiters
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class ServersClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None,
+ def __init__(self, username, password, auth_url, tenant_name=None,
auth_version='v2'):
- super(ServersClientJSON, self).__init__(config, username, password,
+ super(ServersClientJSON, self).__init__(username, password,
auth_url, tenant_name,
auth_version=auth_version)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def create_server(self, name, image_ref, flavor_ref, **kwargs):
"""
diff --git a/tempest/services/compute/json/services_client.py b/tempest/services/compute/json/services_client.py
index 7829e5a..c209cf3 100644
--- a/tempest/services/compute/json/services_client.py
+++ b/tempest/services/compute/json/services_client.py
@@ -18,14 +18,17 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class ServicesClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ServicesClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ServicesClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_services(self, params=None):
url = 'os-services'
diff --git a/tempest/services/compute/json/tenant_usages_client.py b/tempest/services/compute/json/tenant_usages_client.py
index a263767..c141fa7 100644
--- a/tempest/services/compute/json/tenant_usages_client.py
+++ b/tempest/services/compute/json/tenant_usages_client.py
@@ -17,14 +17,17 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class TenantUsagesClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
+ def __init__(self, username, password, auth_url, tenant_name=None):
super(TenantUsagesClientJSON, self).__init__(
- config, username, password, auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ username, password, auth_url, tenant_name)
+ self.service = CONF.compute.catalog_type
def list_tenant_usages(self, params=None):
url = 'os-simple-tenant-usage'
diff --git a/tempest/services/compute/json/volumes_extensions_client.py b/tempest/services/compute/json/volumes_extensions_client.py
index aa49be5..d61b8a5 100644
--- a/tempest/services/compute/json/volumes_extensions_client.py
+++ b/tempest/services/compute/json/volumes_extensions_client.py
@@ -18,18 +18,21 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class VolumesExtensionsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(VolumesExtensionsClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(VolumesExtensionsClientJSON, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_type
- self.build_interval = self.config.volume.build_interval
- self.build_timeout = self.config.volume.build_timeout
+ self.service = CONF.compute.catalog_type
+ self.build_interval = CONF.volume.build_interval
+ self.build_timeout = CONF.volume.build_timeout
def list_volumes(self, params=None):
"""List all the volumes created."""
diff --git a/tempest/services/compute/v3/json/aggregates_client.py b/tempest/services/compute/v3/json/aggregates_client.py
index d63be02..bc037c9 100644
--- a/tempest/services/compute/v3/json/aggregates_client.py
+++ b/tempest/services/compute/v3/json/aggregates_client.py
@@ -16,16 +16,19 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class AggregatesV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(AggregatesV3ClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(AggregatesV3ClientJSON, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def list_aggregates(self):
"""Get aggregate list."""
diff --git a/tempest/services/compute/v3/json/availability_zone_client.py b/tempest/services/compute/v3/json/availability_zone_client.py
index 97ff21c..a3f4d94 100644
--- a/tempest/services/compute/v3/json/availability_zone_client.py
+++ b/tempest/services/compute/v3/json/availability_zone_client.py
@@ -16,15 +16,18 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class AvailabilityZoneV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(AvailabilityZoneV3ClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(AvailabilityZoneV3ClientJSON, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def get_availability_zone_list(self):
resp, body = self.get('os-availability-zone')
diff --git a/tempest/services/compute/v3/json/certificates_client.py b/tempest/services/compute/v3/json/certificates_client.py
index 7c21290..1833cb9 100644
--- a/tempest/services/compute/v3/json/certificates_client.py
+++ b/tempest/services/compute/v3/json/certificates_client.py
@@ -16,15 +16,18 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class CertificatesV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(CertificatesV3ClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(CertificatesV3ClientJSON, self).__init__(username,
password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def get_certificate(self, id):
url = "os-certificates/%s" % (id)
diff --git a/tempest/services/compute/v3/json/extensions_client.py b/tempest/services/compute/v3/json/extensions_client.py
index c508d2f..f760093 100644
--- a/tempest/services/compute/v3/json/extensions_client.py
+++ b/tempest/services/compute/v3/json/extensions_client.py
@@ -16,15 +16,18 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class ExtensionsV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ExtensionsV3ClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ExtensionsV3ClientJSON, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def list_extensions(self):
url = 'extensions'
diff --git a/tempest/services/compute/v3/json/flavors_client.py b/tempest/services/compute/v3/json/flavors_client.py
index f8c762c..d8a54a6 100644
--- a/tempest/services/compute/v3/json/flavors_client.py
+++ b/tempest/services/compute/v3/json/flavors_client.py
@@ -17,14 +17,17 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class FlavorsV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(FlavorsV3ClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(FlavorsV3ClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def list_flavors(self, params=None):
url = 'flavors'
@@ -63,7 +66,7 @@
if kwargs.get('swap'):
post_body['swap'] = kwargs.get('swap')
if kwargs.get('rxtx'):
- post_body['rxtx_factor'] = kwargs.get('rxtx')
+ post_body['os-flavor-rxtx:rxtx_factor'] = kwargs.get('rxtx')
if kwargs.get('is_public'):
post_body['flavor-access:is_public'] = kwargs.get('is_public')
post_body = json.dumps({'flavor': post_body})
diff --git a/tempest/services/compute/v3/json/hosts_client.py b/tempest/services/compute/v3/json/hosts_client.py
index 669bf59..d15b237 100644
--- a/tempest/services/compute/v3/json/hosts_client.py
+++ b/tempest/services/compute/v3/json/hosts_client.py
@@ -16,14 +16,17 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class HostsV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(HostsV3ClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(HostsV3ClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def list_hosts(self, params=None):
"""Lists all hosts."""
diff --git a/tempest/services/compute/v3/json/hypervisor_client.py b/tempest/services/compute/v3/json/hypervisor_client.py
index d78cc5e..a4ec606 100644
--- a/tempest/services/compute/v3/json/hypervisor_client.py
+++ b/tempest/services/compute/v3/json/hypervisor_client.py
@@ -16,15 +16,18 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class HypervisorV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(HypervisorV3ClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(HypervisorV3ClientJSON, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def get_hypervisor_list(self):
"""List hypervisors information."""
diff --git a/tempest/services/compute/v3/json/instance_usage_audit_log_client.py b/tempest/services/compute/v3/json/instance_usage_audit_log_client.py
index c5fba48..b51f490 100644
--- a/tempest/services/compute/v3/json/instance_usage_audit_log_client.py
+++ b/tempest/services/compute/v3/json/instance_usage_audit_log_client.py
@@ -16,14 +16,17 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class InstanceUsagesAuditLogV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
+ def __init__(self, username, password, auth_url, tenant_name=None):
super(InstanceUsagesAuditLogV3ClientJSON, self).__init__(
- config, username, password, auth_url, tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ username, password, auth_url, tenant_name)
+ self.service = CONF.compute.catalog_v3_type
def list_instance_usage_audit_logs(self, time_before=None):
if time_before:
diff --git a/tempest/services/compute/v3/json/interfaces_client.py b/tempest/services/compute/v3/json/interfaces_client.py
index 7fb0fa9..8f0760c 100644
--- a/tempest/services/compute/v3/json/interfaces_client.py
+++ b/tempest/services/compute/v3/json/interfaces_client.py
@@ -17,16 +17,19 @@
import time
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class InterfacesV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(InterfacesV3ClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(InterfacesV3ClientJSON, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def list_interfaces(self, server):
resp, body = self.get('servers/%s/os-attach-interfaces' % server)
diff --git a/tempest/services/compute/v3/json/keypairs_client.py b/tempest/services/compute/v3/json/keypairs_client.py
index 26018ae..c2efb84 100644
--- a/tempest/services/compute/v3/json/keypairs_client.py
+++ b/tempest/services/compute/v3/json/keypairs_client.py
@@ -16,14 +16,17 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class KeyPairsV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(KeyPairsV3ClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(KeyPairsV3ClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def list_keypairs(self):
resp, body = self.get("keypairs")
diff --git a/tempest/services/compute/v3/json/quotas_client.py b/tempest/services/compute/v3/json/quotas_client.py
index 0f0fd00..ea0d3a2 100644
--- a/tempest/services/compute/v3/json/quotas_client.py
+++ b/tempest/services/compute/v3/json/quotas_client.py
@@ -16,14 +16,17 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class QuotasV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(QuotasV3ClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(QuotasV3ClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def get_quota_set(self, tenant_id):
"""List the quota set for a tenant."""
diff --git a/tempest/services/compute/v3/json/servers_client.py b/tempest/services/compute/v3/json/servers_client.py
index ef282fa..aa8c95a 100644
--- a/tempest/services/compute/v3/json/servers_client.py
+++ b/tempest/services/compute/v3/json/servers_client.py
@@ -21,17 +21,20 @@
from tempest.common.rest_client import RestClient
from tempest.common import waiters
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class ServersV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url,
+ def __init__(self, username, password, auth_url,
tenant_name=None, auth_version='v2'):
- super(ServersV3ClientJSON, self).__init__(config, username, password,
+ super(ServersV3ClientJSON, self).__init__(username, password,
auth_url, tenant_name,
auth_version=auth_version)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def create_server(self, name, image_ref, flavor_ref, **kwargs):
"""
diff --git a/tempest/services/compute/v3/json/services_client.py b/tempest/services/compute/v3/json/services_client.py
index e0c1c3c..174a4f7 100644
--- a/tempest/services/compute/v3/json/services_client.py
+++ b/tempest/services/compute/v3/json/services_client.py
@@ -18,14 +18,17 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class ServicesV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ServicesV3ClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ServicesV3ClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def list_services(self, params=None):
url = 'os-services'
diff --git a/tempest/services/compute/v3/json/tenant_usages_client.py b/tempest/services/compute/v3/json/tenant_usages_client.py
index ff0251d..fbc41de 100644
--- a/tempest/services/compute/v3/json/tenant_usages_client.py
+++ b/tempest/services/compute/v3/json/tenant_usages_client.py
@@ -17,14 +17,17 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class TenantUsagesV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
+ def __init__(self, username, password, auth_url, tenant_name=None):
super(TenantUsagesV3ClientJSON, self).__init__(
- config, username, password, auth_url, tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ username, password, auth_url, tenant_name)
+ self.service = CONF.compute.catalog_v3_type
def list_tenant_usages(self, params=None):
url = 'os-simple-tenant-usage'
diff --git a/tempest/services/compute/v3/json/version_client.py b/tempest/services/compute/v3/json/version_client.py
index 1773af5..419bbb8 100644
--- a/tempest/services/compute/v3/json/version_client.py
+++ b/tempest/services/compute/v3/json/version_client.py
@@ -16,15 +16,18 @@
import json
from tempest.common import rest_client
+from tempest import config
+
+CONF = config.CONF
class VersionV3ClientJSON(rest_client.RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(VersionV3ClientJSON, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(VersionV3ClientJSON, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_v3_type
+ self.service = CONF.compute.catalog_v3_type
def get_version(self):
resp, body = self.get('')
diff --git a/tempest/services/compute/xml/aggregates_client.py b/tempest/services/compute/xml/aggregates_client.py
index 164a963..ddef18b 100644
--- a/tempest/services/compute/xml/aggregates_client.py
+++ b/tempest/services/compute/xml/aggregates_client.py
@@ -16,19 +16,22 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest import exceptions
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import Text
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class AggregatesClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(AggregatesClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(AggregatesClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _format_aggregate(self, g):
agg = xml_to_json(g)
diff --git a/tempest/services/compute/xml/availability_zone_client.py b/tempest/services/compute/xml/availability_zone_client.py
index 4024d29..ac1bb4b 100644
--- a/tempest/services/compute/xml/availability_zone_client.py
+++ b/tempest/services/compute/xml/availability_zone_client.py
@@ -16,16 +16,19 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class AvailabilityZoneClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(AvailabilityZoneClientXML, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(AvailabilityZoneClientXML, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _parse_array(self, node):
return [xml_to_json(x) for x in node]
diff --git a/tempest/services/compute/xml/certificates_client.py b/tempest/services/compute/xml/certificates_client.py
index 682f8de..3f2438d 100644
--- a/tempest/services/compute/xml/certificates_client.py
+++ b/tempest/services/compute/xml/certificates_client.py
@@ -15,14 +15,17 @@
from tempest.common.rest_client import RestClientXML
+from tempest import config
+
+CONF = config.CONF
class CertificatesClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(CertificatesClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(CertificatesClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def get_certificate(self, id):
url = "os-certificates/%s" % (id)
diff --git a/tempest/services/compute/xml/extensions_client.py b/tempest/services/compute/xml/extensions_client.py
index b2ab9da..98cd3e3 100644
--- a/tempest/services/compute/xml/extensions_client.py
+++ b/tempest/services/compute/xml/extensions_client.py
@@ -14,16 +14,20 @@
# under the License.
from lxml import etree
+
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class ExtensionsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ExtensionsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ExtensionsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _parse_array(self, node):
array = []
diff --git a/tempest/services/compute/xml/fixed_ips_client.py b/tempest/services/compute/xml/fixed_ips_client.py
index 53482c1..f212e21 100644
--- a/tempest/services/compute/xml/fixed_ips_client.py
+++ b/tempest/services/compute/xml/fixed_ips_client.py
@@ -15,17 +15,20 @@
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import Text
+CONF = config.CONF
+
class FixedIPsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(FixedIPsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(FixedIPsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def get_fixed_ip_details(self, fixed_ip):
url = "os-fixed-ips/%s" % (fixed_ip)
diff --git a/tempest/services/compute/xml/flavors_client.py b/tempest/services/compute/xml/flavors_client.py
index b7e63e6..74c0e47 100644
--- a/tempest/services/compute/xml/flavors_client.py
+++ b/tempest/services/compute/xml/flavors_client.py
@@ -18,12 +18,14 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import Text
from tempest.services.compute.xml.common import xml_to_json
from tempest.services.compute.xml.common import XMLNS_11
+CONF = config.CONF
XMLNS_OS_FLV_EXT_DATA = \
"http://docs.openstack.org/compute/ext/flavor_extra_data/api/v1.1"
@@ -33,10 +35,10 @@
class FlavorsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(FlavorsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(FlavorsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _format_flavor(self, f):
flavor = {'links': []}
diff --git a/tempest/services/compute/xml/floating_ips_client.py b/tempest/services/compute/xml/floating_ips_client.py
index de78b1e..bbfe86b 100644
--- a/tempest/services/compute/xml/floating_ips_client.py
+++ b/tempest/services/compute/xml/floating_ips_client.py
@@ -17,18 +17,21 @@
import urllib
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest import exceptions
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import Text
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class FloatingIPsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(FloatingIPsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(FloatingIPsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _parse_array(self, node):
array = []
diff --git a/tempest/services/compute/xml/hosts_client.py b/tempest/services/compute/xml/hosts_client.py
index e7931a3..441be0e 100644
--- a/tempest/services/compute/xml/hosts_client.py
+++ b/tempest/services/compute/xml/hosts_client.py
@@ -16,17 +16,20 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class HostsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(HostsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(HostsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_hosts(self, params=None):
"""Lists all hosts."""
diff --git a/tempest/services/compute/xml/hypervisor_client.py b/tempest/services/compute/xml/hypervisor_client.py
index e988a36..bee2dfd 100644
--- a/tempest/services/compute/xml/hypervisor_client.py
+++ b/tempest/services/compute/xml/hypervisor_client.py
@@ -16,16 +16,19 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class HypervisorClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(HypervisorClientXML, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(HypervisorClientXML, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _parse_array(self, node):
return [xml_to_json(x) for x in node]
diff --git a/tempest/services/compute/xml/images_client.py b/tempest/services/compute/xml/images_client.py
index 6c5a14c..98de7df 100644
--- a/tempest/services/compute/xml/images_client.py
+++ b/tempest/services/compute/xml/images_client.py
@@ -19,6 +19,7 @@
from tempest.common.rest_client import RestClientXML
from tempest.common import waiters
+from tempest import config
from tempest import exceptions
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
@@ -26,15 +27,17 @@
from tempest.services.compute.xml.common import xml_to_json
from tempest.services.compute.xml.common import XMLNS_11
+CONF = config.CONF
+
class ImagesClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ImagesClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ImagesClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
- self.build_interval = self.config.compute.build_interval
- self.build_timeout = self.config.compute.build_timeout
+ self.service = CONF.compute.catalog_type
+ self.build_interval = CONF.compute.build_interval
+ self.build_timeout = CONF.compute.build_timeout
def _parse_server(self, node):
data = xml_to_json(node)
diff --git a/tempest/services/compute/xml/instance_usage_audit_log_client.py b/tempest/services/compute/xml/instance_usage_audit_log_client.py
index 473ecd1..2e1d6c8 100644
--- a/tempest/services/compute/xml/instance_usage_audit_log_client.py
+++ b/tempest/services/compute/xml/instance_usage_audit_log_client.py
@@ -16,15 +16,18 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class InstanceUsagesAuditLogClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
+ def __init__(self, username, password, auth_url, tenant_name=None):
super(InstanceUsagesAuditLogClientXML, self).__init__(
- config, username, password, auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ username, password, auth_url, tenant_name)
+ self.service = CONF.compute.catalog_type
def list_instance_usage_audit_logs(self):
url = 'os-instance_usage_audit_log'
diff --git a/tempest/services/compute/xml/interfaces_client.py b/tempest/services/compute/xml/interfaces_client.py
index a84e0bd..c90f507 100644
--- a/tempest/services/compute/xml/interfaces_client.py
+++ b/tempest/services/compute/xml/interfaces_client.py
@@ -18,19 +18,22 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest import exceptions
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import Text
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class InterfacesClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(InterfacesClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(InterfacesClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _process_xml_interface(self, node):
iface = xml_to_json(node)
diff --git a/tempest/services/compute/xml/keypairs_client.py b/tempest/services/compute/xml/keypairs_client.py
index 57c4dda..da3303e 100644
--- a/tempest/services/compute/xml/keypairs_client.py
+++ b/tempest/services/compute/xml/keypairs_client.py
@@ -15,19 +15,23 @@
from lxml import etree
+
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import Text
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class KeyPairsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(KeyPairsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(KeyPairsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_keypairs(self):
resp, body = self.get("os-keypairs", self.headers)
diff --git a/tempest/services/compute/xml/limits_client.py b/tempest/services/compute/xml/limits_client.py
index 785d546..9233697 100644
--- a/tempest/services/compute/xml/limits_client.py
+++ b/tempest/services/compute/xml/limits_client.py
@@ -16,16 +16,19 @@
from lxml import objectify
from tempest.common.rest_client import RestClientXML
+from tempest import config
+
+CONF = config.CONF
NS = "{http://docs.openstack.org/common/api/v1.0}"
class LimitsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(LimitsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(LimitsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def get_absolute_limits(self):
resp, body = self.get("limits", self.headers)
diff --git a/tempest/services/compute/xml/quotas_client.py b/tempest/services/compute/xml/quotas_client.py
index f157dfb..74aad1b 100644
--- a/tempest/services/compute/xml/quotas_client.py
+++ b/tempest/services/compute/xml/quotas_client.py
@@ -16,18 +16,21 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import xml_to_json
from tempest.services.compute.xml.common import XMLNS_11
+CONF = config.CONF
+
class QuotasClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(QuotasClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(QuotasClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _format_quota(self, q):
quota = {}
diff --git a/tempest/services/compute/xml/security_groups_client.py b/tempest/services/compute/xml/security_groups_client.py
index 498922b..c32a81e 100644
--- a/tempest/services/compute/xml/security_groups_client.py
+++ b/tempest/services/compute/xml/security_groups_client.py
@@ -17,6 +17,7 @@
import urllib
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest import exceptions
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
@@ -24,14 +25,16 @@
from tempest.services.compute.xml.common import xml_to_json
from tempest.services.compute.xml.common import XMLNS_11
+CONF = config.CONF
+
class SecurityGroupsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
+ def __init__(self, username, password, auth_url, tenant_name=None):
super(SecurityGroupsClientXML, self).__init__(
- config, username, password,
+ username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _parse_array(self, node):
array = []
diff --git a/tempest/services/compute/xml/servers_client.py b/tempest/services/compute/xml/servers_client.py
index 63492b7..68268a1 100644
--- a/tempest/services/compute/xml/servers_client.py
+++ b/tempest/services/compute/xml/servers_client.py
@@ -21,6 +21,7 @@
from tempest.common.rest_client import RestClientXML
from tempest.common import waiters
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.services.compute.xml.common import Document
@@ -29,6 +30,7 @@
from tempest.services.compute.xml.common import xml_to_json
from tempest.services.compute.xml.common import XMLNS_11
+CONF = config.CONF
LOG = logging.getLogger(__name__)
@@ -139,12 +141,12 @@
class ServersClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None,
+ def __init__(self, username, password, auth_url, tenant_name=None,
auth_version='v2'):
- super(ServersClientXML, self).__init__(config, username, password,
+ super(ServersClientXML, self).__init__(username, password,
auth_url, tenant_name,
auth_version=auth_version)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _parse_key_value(self, node):
"""Parse <foo key='key'>value</foo> data into {'key': 'value'}."""
diff --git a/tempest/services/compute/xml/services_client.py b/tempest/services/compute/xml/services_client.py
index 8ef0aa8..bfc824d 100644
--- a/tempest/services/compute/xml/services_client.py
+++ b/tempest/services/compute/xml/services_client.py
@@ -17,18 +17,22 @@
import urllib
from lxml import etree
+
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class ServicesClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ServicesClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ServicesClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def list_services(self, params=None):
url = 'os-services'
diff --git a/tempest/services/compute/xml/tenant_usages_client.py b/tempest/services/compute/xml/tenant_usages_client.py
index dfa4a9f..ae813a6 100644
--- a/tempest/services/compute/xml/tenant_usages_client.py
+++ b/tempest/services/compute/xml/tenant_usages_client.py
@@ -18,16 +18,19 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class TenantUsagesClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(TenantUsagesClientXML, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(TenantUsagesClientXML, self).__init__(username,
password, auth_url,
tenant_name)
- self.service = self.config.compute.catalog_type
+ self.service = CONF.compute.catalog_type
def _parse_array(self, node):
json = xml_to_json(node)
diff --git a/tempest/services/compute/xml/volumes_extensions_client.py b/tempest/services/compute/xml/volumes_extensions_client.py
index cb6cefc..d6723e1 100644
--- a/tempest/services/compute/xml/volumes_extensions_client.py
+++ b/tempest/services/compute/xml/volumes_extensions_client.py
@@ -19,6 +19,7 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest import exceptions
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
@@ -26,16 +27,17 @@
from tempest.services.compute.xml.common import xml_to_json
from tempest.services.compute.xml.common import XMLNS_11
+CONF = config.CONF
+
class VolumesExtensionsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(VolumesExtensionsClientXML, self).__init__(config,
- username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(VolumesExtensionsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.compute.catalog_type
- self.build_interval = self.config.compute.build_interval
- self.build_timeout = self.config.compute.build_timeout
+ self.service = CONF.compute.catalog_type
+ self.build_interval = CONF.compute.build_interval
+ self.build_timeout = CONF.compute.build_timeout
def _parse_volume(self, body):
vol = dict((attr, body.get(attr)) for attr in body.keys())
diff --git a/tempest/services/data_processing/v1_1/client.py b/tempest/services/data_processing/v1_1/client.py
index bd147e8..a1d558a 100644
--- a/tempest/services/data_processing/v1_1/client.py
+++ b/tempest/services/data_processing/v1_1/client.py
@@ -16,13 +16,16 @@
import json
from tempest.common import rest_client
+from tempest import config
+
+CONF = config.CONF
class DataProcessingClient(rest_client.RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(DataProcessingClient, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(DataProcessingClient, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.data_processing.catalog_type
+ self.service = CONF.data_processing.catalog_type
@classmethod
def _request_and_parse(cls, req_fun, uri, res_name, *args, **kwargs):
diff --git a/tempest/services/identity/json/identity_client.py b/tempest/services/identity/json/identity_client.py
index a0411dc..1ed7044 100644
--- a/tempest/services/identity/json/identity_client.py
+++ b/tempest/services/identity/json/identity_client.py
@@ -14,15 +14,18 @@
from tempest.common import http
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class IdentityClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(IdentityClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(IdentityClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def has_admin_extensions(self):
@@ -239,8 +242,8 @@
class TokenClientJSON(RestClient):
- def __init__(self, config):
- auth_url = config.identity.uri
+ def __init__(self):
+ auth_url = CONF.identity.uri
# TODO(jaypipes) Why is this all repeated code in here?
# Normalize URI to ensure /tokens is in it.
@@ -248,7 +251,6 @@
auth_url = auth_url.rstrip('/') + '/tokens'
self.auth_url = auth_url
- self.config = config
def auth(self, user, password, tenant):
creds = {
@@ -267,7 +269,7 @@
def request(self, method, url, headers=None, body=None):
"""A simple HTTP request interface."""
- dscv = self.config.identity.disable_ssl_certificate_validation
+ dscv = CONF.identity.disable_ssl_certificate_validation
self.http_obj = http.ClosingHttp(
disable_ssl_certificate_validation=dscv)
if headers is None:
diff --git a/tempest/services/identity/v3/json/credentials_client.py b/tempest/services/identity/v3/json/credentials_client.py
index dccb9a0..1250d79 100644
--- a/tempest/services/identity/v3/json/credentials_client.py
+++ b/tempest/services/identity/v3/json/credentials_client.py
@@ -17,14 +17,17 @@
from urlparse import urlparse
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class CredentialsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(CredentialsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(CredentialsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def request(self, method, url, headers=None, body=None, wait=None):
diff --git a/tempest/services/identity/v3/json/endpoints_client.py b/tempest/services/identity/v3/json/endpoints_client.py
index 124f498..bb2230b 100644
--- a/tempest/services/identity/v3/json/endpoints_client.py
+++ b/tempest/services/identity/v3/json/endpoints_client.py
@@ -17,15 +17,17 @@
import urlparse
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class EndPointClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(EndPointClientJSON, self).__init__(config,
- username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(EndPointClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def request(self, method, url, headers=None, body=None, wait=None):
diff --git a/tempest/services/identity/v3/json/identity_client.py b/tempest/services/identity/v3/json/identity_client.py
index c89fbcc..7dd5c6e 100644
--- a/tempest/services/identity/v3/json/identity_client.py
+++ b/tempest/services/identity/v3/json/identity_client.py
@@ -17,14 +17,17 @@
from urlparse import urlparse
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class IdentityV3ClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(IdentityV3ClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(IdentityV3ClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def request(self, method, url, headers=None, body=None, wait=None):
@@ -459,19 +462,18 @@
class V3TokenClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(V3TokenClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(V3TokenClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
- auth_url = config.identity.uri
+ auth_url = CONF.identity.uri
if 'tokens' not in auth_url:
auth_url = auth_url.rstrip('/') + '/tokens'
self.auth_url = auth_url
- self.config = config
def auth(self, user_id, password):
creds = {
diff --git a/tempest/services/identity/v3/json/policy_client.py b/tempest/services/identity/v3/json/policy_client.py
index 9ce6d5b..3d98d99 100644
--- a/tempest/services/identity/v3/json/policy_client.py
+++ b/tempest/services/identity/v3/json/policy_client.py
@@ -17,14 +17,17 @@
from urlparse import urlparse
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class PolicyClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(PolicyClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(PolicyClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def request(self, method, url, headers=None, body=None, wait=None):
diff --git a/tempest/services/identity/v3/json/service_client.py b/tempest/services/identity/v3/json/service_client.py
index e60e7e3..57b6e9e 100644
--- a/tempest/services/identity/v3/json/service_client.py
+++ b/tempest/services/identity/v3/json/service_client.py
@@ -17,14 +17,17 @@
from urlparse import urlparse
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class ServiceClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ServiceClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ServiceClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def request(self, method, url, headers=None, body=None, wait=None):
diff --git a/tempest/services/identity/v3/xml/credentials_client.py b/tempest/services/identity/v3/xml/credentials_client.py
index 4344db1..c8cdce7 100644
--- a/tempest/services/identity/v3/xml/credentials_client.py
+++ b/tempest/services/identity/v3/xml/credentials_client.py
@@ -19,21 +19,23 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import Text
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
XMLNS = "http://docs.openstack.org/identity/api/v3"
class CredentialsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(CredentialsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(CredentialsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def request(self, method, url, headers=None, body=None, wait=None):
diff --git a/tempest/services/identity/v3/xml/endpoints_client.py b/tempest/services/identity/v3/xml/endpoints_client.py
index bd23674..e1df3a9 100644
--- a/tempest/services/identity/v3/xml/endpoints_client.py
+++ b/tempest/services/identity/v3/xml/endpoints_client.py
@@ -18,19 +18,22 @@
from tempest.common import http
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
XMLNS = "http://docs.openstack.org/identity/api/v3"
class EndPointClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(EndPointClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(EndPointClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def _parse_array(self, node):
@@ -47,7 +50,7 @@
def request(self, method, url, headers=None, body=None, wait=None):
"""Overriding the existing HTTP request in super class RestClient."""
- dscv = self.config.identity.disable_ssl_certificate_validation
+ dscv = CONF.identity.disable_ssl_certificate_validation
self.http_obj = http.ClosingHttp(
disable_ssl_certificate_validation=dscv)
self._set_auth()
diff --git a/tempest/services/identity/v3/xml/identity_client.py b/tempest/services/identity/v3/xml/identity_client.py
index 579ddb8..de75fe5 100644
--- a/tempest/services/identity/v3/xml/identity_client.py
+++ b/tempest/services/identity/v3/xml/identity_client.py
@@ -18,20 +18,23 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import Text
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
XMLNS = "http://docs.openstack.org/identity/api/v3"
class IdentityV3ClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(IdentityV3ClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(IdentityV3ClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def _parse_projects(self, node):
@@ -451,19 +454,18 @@
class V3TokenClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(V3TokenClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(V3TokenClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
- auth_url = config.identity.uri
+ auth_url = CONF.identity.uri
if 'tokens' not in auth_url:
auth_url = auth_url.rstrip('/') + '/tokens'
self.auth_url = auth_url
- self.config = config
def auth(self, user_id, password):
user = Element('user',
diff --git a/tempest/services/identity/v3/xml/policy_client.py b/tempest/services/identity/v3/xml/policy_client.py
index 7317728..54b4ad8 100644
--- a/tempest/services/identity/v3/xml/policy_client.py
+++ b/tempest/services/identity/v3/xml/policy_client.py
@@ -19,19 +19,22 @@
from tempest.common import http
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
XMLNS = "http://docs.openstack.org/identity/api/v3"
class PolicyClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(PolicyClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(PolicyClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def _parse_array(self, node):
@@ -48,7 +51,7 @@
def request(self, method, url, headers=None, body=None, wait=None):
"""Overriding the existing HTTP request in super class RestClient."""
- dscv = self.config.identity.disable_ssl_certificate_validation
+ dscv = CONF.identity.disable_ssl_certificate_validation
self.http_obj = http.ClosingHttp(
disable_ssl_certificate_validation=dscv)
self._set_auth()
diff --git a/tempest/services/identity/v3/xml/service_client.py b/tempest/services/identity/v3/xml/service_client.py
index a142b06..2997775 100644
--- a/tempest/services/identity/v3/xml/service_client.py
+++ b/tempest/services/identity/v3/xml/service_client.py
@@ -18,20 +18,22 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
XMLNS = "http://docs.openstack.org/identity/api/v3"
class ServiceClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ServiceClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ServiceClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def _parse_array(self, node):
diff --git a/tempest/services/identity/xml/identity_client.py b/tempest/services/identity/xml/identity_client.py
index 6e819d8..e6a7188 100644
--- a/tempest/services/identity/xml/identity_client.py
+++ b/tempest/services/identity/xml/identity_client.py
@@ -19,21 +19,23 @@
from tempest.common import http
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest import exceptions
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
XMLNS = "http://docs.openstack.org/identity/api/v2.0"
class IdentityClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(IdentityClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(IdentityClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.identity.catalog_type
+ self.service = CONF.identity.catalog_type
self.endpoint_url = 'adminURL'
def _parse_array(self, node):
@@ -263,8 +265,8 @@
class TokenClientXML(RestClientXML):
- def __init__(self, config):
- auth_url = config.identity.uri
+ def __init__(self):
+ auth_url = CONF.identity.uri
# TODO(jaypipes) Why is this all repeated code in here?
# Normalize URI to ensure /tokens is in it.
@@ -272,7 +274,6 @@
auth_url = auth_url.rstrip('/') + '/tokens'
self.auth_url = auth_url
- self.config = config
def auth(self, user, password, tenant):
passwordCreds = Element("passwordCredentials",
@@ -287,7 +288,7 @@
def request(self, method, url, headers=None, body=None):
"""A simple HTTP request interface."""
- dscv = self.config.identity.disable_ssl_certificate_validation
+ dscv = CONF.identity.disable_ssl_certificate_validation
self.http_obj = http.ClosingHttp(
disable_ssl_certificate_validation=dscv)
if headers is None:
diff --git a/tempest/services/image/v1/json/image_client.py b/tempest/services/image/v1/json/image_client.py
index aa6abd0..a5b93a0 100644
--- a/tempest/services/image/v1/json/image_client.py
+++ b/tempest/services/image/v1/json/image_client.py
@@ -22,19 +22,22 @@
from tempest.common import glance_http
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
class ImageClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ImageClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ImageClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.images.catalog_type
- if config.service_available.glance:
+ self.service = CONF.images.catalog_type
+ if CONF.service_available.glance:
self.http = self._get_http()
def _image_meta_from_headers(self, headers):
@@ -108,7 +111,7 @@
self.auth_url,
self.service,
self.tenant_name)
- dscv = self.config.identity.disable_ssl_certificate_validation
+ dscv = CONF.identity.disable_ssl_certificate_validation
return glance_http.HTTPClient(endpoint=endpoint, token=token,
insecure=dscv)
diff --git a/tempest/services/image/v2/json/image_client.py b/tempest/services/image/v2/json/image_client.py
index 3a79695..0c4fb5c 100644
--- a/tempest/services/image/v2/json/image_client.py
+++ b/tempest/services/image/v2/json/image_client.py
@@ -20,23 +20,26 @@
from tempest.common import glance_http
from tempest.common import rest_client
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class ImageClientV2JSON(rest_client.RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ImageClientV2JSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ImageClientV2JSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.images.catalog_type
- if config.service_available.glance:
+ self.service = CONF.images.catalog_type
+ if CONF.service_available.glance:
self.http = self._get_http()
def _get_http(self):
token, endpoint = self.keystone_auth(self.user, self.password,
self.auth_url, self.service,
self.tenant_name)
- dscv = self.config.identity.disable_ssl_certificate_validation
+ dscv = CONF.identity.disable_ssl_certificate_validation
return glance_http.HTTPClient(endpoint=endpoint, token=token,
insecure=dscv)
diff --git a/tempest/services/network/json/network_client.py b/tempest/services/network/json/network_client.py
index 47c20d2..9908816 100644
--- a/tempest/services/network/json/network_client.py
+++ b/tempest/services/network/json/network_client.py
@@ -31,9 +31,9 @@
quotas
"""
- def get_rest_client(self, config, username,
+ def get_rest_client(self, username,
password, auth_url, tenant_name=None):
- return RestClient(config, username, password, auth_url, tenant_name)
+ return RestClient(username, password, auth_url, tenant_name)
def deserialize_single(self, body):
return json.loads(body)
diff --git a/tempest/services/network/network_client_base.py b/tempest/services/network/network_client_base.py
index f4a012f..467256e 100644
--- a/tempest/services/network/network_client_base.py
+++ b/tempest/services/network/network_client_base.py
@@ -12,6 +12,10 @@
import urllib
+from tempest import config
+
+CONF = config.CONF
+
# the following map is used to construct proper URI
# for the given neutron resource
service_resource_prefix_map = {
@@ -42,15 +46,15 @@
class NetworkClientBase(object):
- def __init__(self, config, username, password,
+ def __init__(self, username, password,
auth_url, tenant_name=None):
self.rest_client = self.get_rest_client(
- config, username, password, auth_url, tenant_name)
- self.rest_client.service = self.rest_client.config.network.catalog_type
+ username, password, auth_url, tenant_name)
+ self.rest_client.service = CONF.network.catalog_type
self.version = '2.0'
self.uri_prefix = "v%s" % (self.version)
- def get_rest_client(self, config, username, password,
+ def get_rest_client(self, username, password,
auth_url, tenant_name):
raise NotImplementedError
diff --git a/tempest/services/network/xml/network_client.py b/tempest/services/network/xml/network_client.py
index b8e39ad..4eb38be 100644
--- a/tempest/services/network/xml/network_client.py
+++ b/tempest/services/network/xml/network_client.py
@@ -28,9 +28,9 @@
PLURALS = ['dns_nameservers', 'host_routes', 'allocation_pools',
'fixed_ips', 'extensions']
- def get_rest_client(self, config, username, password,
+ def get_rest_client(self, username, password,
auth_url, tenant_name=None):
- return RestClientXML(config, username, password,
+ return RestClientXML(username, password,
auth_url, tenant_name)
def _parse_array(self, node):
diff --git a/tempest/services/object_storage/account_client.py b/tempest/services/object_storage/account_client.py
index a6f47b7..4c5b832 100644
--- a/tempest/services/object_storage/account_client.py
+++ b/tempest/services/object_storage/account_client.py
@@ -18,14 +18,17 @@
from tempest.common import http
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class AccountClient(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(AccountClient, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(AccountClient, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.object_storage.catalog_type
+ self.service = CONF.object_storage.catalog_type
self.format = 'json'
def list_account_metadata(self):
@@ -102,12 +105,12 @@
class AccountClientCustomizedHeader(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(AccountClientCustomizedHeader, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(AccountClientCustomizedHeader, self).__init__(username,
password, auth_url,
tenant_name)
# Overwrites json-specific header encoding in RestClient
- self.service = self.config.object_storage.catalog_type
+ self.service = CONF.object_storage.catalog_type
self.format = 'json'
def request(self, method, url, headers=None, body=None):
diff --git a/tempest/services/object_storage/container_client.py b/tempest/services/object_storage/container_client.py
index cbd07bf..4308589 100644
--- a/tempest/services/object_storage/container_client.py
+++ b/tempest/services/object_storage/container_client.py
@@ -17,16 +17,19 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class ContainerClient(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ContainerClient, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ContainerClient, self).__init__(username, password,
auth_url, tenant_name)
# Overwrites json-specific header encoding in RestClient
self.headers = {}
- self.service = self.config.object_storage.catalog_type
+ self.service = CONF.object_storage.catalog_type
self.format = 'json'
def create_container(self, container_name, metadata=None,
diff --git a/tempest/services/object_storage/object_client.py b/tempest/services/object_storage/object_client.py
index 1304a03..2a68a4f 100644
--- a/tempest/services/object_storage/object_client.py
+++ b/tempest/services/object_storage/object_client.py
@@ -17,15 +17,18 @@
from tempest.common import http
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class ObjectClient(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ObjectClient, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ObjectClient, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.object_storage.catalog_type
+ self.service = CONF.object_storage.catalog_type
def create_object(self, container, object_name, data, params=None):
"""Create storage object."""
@@ -135,17 +138,17 @@
class ObjectClientCustomizedHeader(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ObjectClientCustomizedHeader, self).__init__(config, username,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ObjectClientCustomizedHeader, self).__init__(username,
password, auth_url,
tenant_name)
# Overwrites json-specific header encoding in RestClient
- self.service = self.config.object_storage.catalog_type
+ self.service = CONF.object_storage.catalog_type
self.format = 'json'
def request(self, method, url, headers=None, body=None):
"""A simple HTTP request interface."""
- dscv = self.config.identity.disable_ssl_certificate_validation
+ dscv = CONF.identity.disable_ssl_certificate_validation
self.http_obj = http.ClosingHttp(
disable_ssl_certificate_validation=dscv)
if headers is None:
diff --git a/tempest/services/orchestration/json/orchestration_client.py b/tempest/services/orchestration/json/orchestration_client.py
index 20f1b06..273c2ae 100644
--- a/tempest/services/orchestration/json/orchestration_client.py
+++ b/tempest/services/orchestration/json/orchestration_client.py
@@ -19,17 +19,20 @@
import urllib
from tempest.common import rest_client
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class OrchestrationClient(rest_client.RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(OrchestrationClient, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(OrchestrationClient, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.orchestration.catalog_type
- self.build_interval = self.config.orchestration.build_interval
- self.build_timeout = self.config.orchestration.build_timeout
+ self.service = CONF.orchestration.catalog_type
+ self.build_interval = CONF.orchestration.build_interval
+ self.build_timeout = CONF.orchestration.build_timeout
def list_stacks(self, params=None):
"""Lists all stacks for a user."""
diff --git a/tempest/services/telemetry/json/telemetry_client.py b/tempest/services/telemetry/json/telemetry_client.py
index d8662e9..a1112da 100644
--- a/tempest/services/telemetry/json/telemetry_client.py
+++ b/tempest/services/telemetry/json/telemetry_client.py
@@ -20,9 +20,9 @@
class TelemetryClientJSON(client.TelemetryClientBase):
- def get_rest_client(self, config, username,
+ def get_rest_client(self, username,
password, auth_url, tenant_name=None):
- return RestClient(config, username, password, auth_url, tenant_name)
+ return RestClient(username, password, auth_url, tenant_name)
def deserialize(self, body):
return json.loads(body.replace("\n", ""))
diff --git a/tempest/services/telemetry/telemetry_client_base.py b/tempest/services/telemetry/telemetry_client_base.py
index 883bf33..24039c6 100644
--- a/tempest/services/telemetry/telemetry_client_base.py
+++ b/tempest/services/telemetry/telemetry_client_base.py
@@ -17,6 +17,10 @@
import six
import urllib
+from tempest import config
+
+CONF = config.CONF
+
@six.add_metaclass(abc.ABCMeta)
class TelemetryClientBase(object):
@@ -31,17 +35,16 @@
statistics
"""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- self.rest_client = self.get_rest_client(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ self.rest_client = self.get_rest_client(username, password,
auth_url, tenant_name)
- self.rest_client.service = \
- self.rest_client.config.telemetry.catalog_type
+ self.rest_client.service = CONF.telemetry.catalog_type
self.headers = self.rest_client.headers
self.version = '2'
self.uri_prefix = "v%s" % self.version
@abc.abstractmethod
- def get_rest_client(self, config, username, password,
+ def get_rest_client(self, username, password,
auth_url, tenant_name):
"""
:param config:
diff --git a/tempest/services/telemetry/xml/telemetry_client.py b/tempest/services/telemetry/xml/telemetry_client.py
index ac5fa32..862d08f 100644
--- a/tempest/services/telemetry/xml/telemetry_client.py
+++ b/tempest/services/telemetry/xml/telemetry_client.py
@@ -23,9 +23,9 @@
class TelemetryClientXML(client.TelemetryClientBase):
- def get_rest_client(self, config, username,
+ def get_rest_client(self, username,
password, auth_url, tenant_name=None):
- return RestClientXML(config, username, password, auth_url, tenant_name)
+ return RestClientXML(username, password, auth_url, tenant_name)
def _parse_array(self, body):
array = []
diff --git a/tempest/services/volume/json/admin/volume_hosts_client.py b/tempest/services/volume/json/admin/volume_hosts_client.py
index c9a522a..e4178b9 100644
--- a/tempest/services/volume/json/admin/volume_hosts_client.py
+++ b/tempest/services/volume/json/admin/volume_hosts_client.py
@@ -17,6 +17,9 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class VolumeHostsClientJSON(RestClient):
@@ -24,13 +27,13 @@
Client class to send CRUD Volume Hosts API requests to a Cinder endpoint
"""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(VolumeHostsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(VolumeHostsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.volume.catalog_type
- self.build_interval = self.config.volume.build_interval
- self.build_timeout = self.config.volume.build_timeout
+ self.service = CONF.volume.catalog_type
+ self.build_interval = CONF.volume.build_interval
+ self.build_timeout = CONF.volume.build_timeout
def list_hosts(self, params=None):
"""Lists all hosts."""
diff --git a/tempest/services/volume/json/admin/volume_types_client.py b/tempest/services/volume/json/admin/volume_types_client.py
index 4ab9b70..5b6328b 100644
--- a/tempest/services/volume/json/admin/volume_types_client.py
+++ b/tempest/services/volume/json/admin/volume_types_client.py
@@ -17,6 +17,9 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class VolumeTypesClientJSON(RestClient):
@@ -24,13 +27,13 @@
Client class to send CRUD Volume Types API requests to a Cinder endpoint
"""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(VolumeTypesClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(VolumeTypesClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.volume.catalog_type
- self.build_interval = self.config.volume.build_interval
- self.build_timeout = self.config.volume.build_timeout
+ self.service = CONF.volume.catalog_type
+ self.build_interval = CONF.volume.build_interval
+ self.build_timeout = CONF.volume.build_timeout
def list_volume_types(self, params=None):
"""List all the volume_types created."""
diff --git a/tempest/services/volume/json/extensions_client.py b/tempest/services/volume/json/extensions_client.py
index bdd5f1e..c3bbb20 100644
--- a/tempest/services/volume/json/extensions_client.py
+++ b/tempest/services/volume/json/extensions_client.py
@@ -16,14 +16,17 @@
import json
from tempest.common.rest_client import RestClient
+from tempest import config
+
+CONF = config.CONF
class ExtensionsClientJSON(RestClient):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ExtensionsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ExtensionsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.volume.catalog_type
+ self.service = CONF.volume.catalog_type
def list_extensions(self):
url = 'extensions'
diff --git a/tempest/services/volume/json/snapshots_client.py b/tempest/services/volume/json/snapshots_client.py
index 1a34898..a36083b 100644
--- a/tempest/services/volume/json/snapshots_client.py
+++ b/tempest/services/volume/json/snapshots_client.py
@@ -15,22 +15,25 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
class SnapshotsClientJSON(RestClient):
"""Client class to send CRUD Volume API requests."""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(SnapshotsClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(SnapshotsClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.volume.catalog_type
- self.build_interval = self.config.volume.build_interval
- self.build_timeout = self.config.volume.build_timeout
+ self.service = CONF.volume.catalog_type
+ self.build_interval = CONF.volume.build_interval
+ self.build_timeout = CONF.volume.build_timeout
def list_snapshots(self, params=None):
"""List all the snapshot."""
diff --git a/tempest/services/volume/json/volumes_client.py b/tempest/services/volume/json/volumes_client.py
index c99501b..6c09e02 100644
--- a/tempest/services/volume/json/volumes_client.py
+++ b/tempest/services/volume/json/volumes_client.py
@@ -18,21 +18,24 @@
import urllib
from tempest.common.rest_client import RestClient
+from tempest import config
from tempest import exceptions
+CONF = config.CONF
+
class VolumesClientJSON(RestClient):
"""
Client class to send CRUD Volume API requests to a Cinder endpoint
"""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(VolumesClientJSON, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(VolumesClientJSON, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.volume.catalog_type
- self.build_interval = self.config.volume.build_interval
- self.build_timeout = self.config.volume.build_timeout
+ self.service = CONF.volume.catalog_type
+ self.build_interval = CONF.volume.build_interval
+ self.build_timeout = CONF.volume.build_timeout
def get_attachment_from_volume(self, volume):
"""Return the element 'attachment' from input volumes."""
diff --git a/tempest/services/volume/xml/admin/volume_hosts_client.py b/tempest/services/volume/xml/admin/volume_hosts_client.py
index 31e529f..39b82e5 100644
--- a/tempest/services/volume/xml/admin/volume_hosts_client.py
+++ b/tempest/services/volume/xml/admin/volume_hosts_client.py
@@ -18,20 +18,23 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class VolumeHostsClientXML(RestClientXML):
"""
Client class to send CRUD Volume Hosts API requests to a Cinder endpoint
"""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(VolumeHostsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(VolumeHostsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.volume.catalog_type
- self.build_interval = self.config.compute.build_interval
- self.build_timeout = self.config.compute.build_timeout
+ self.service = CONF.volume.catalog_type
+ self.build_interval = CONF.compute.build_interval
+ self.build_timeout = CONF.compute.build_timeout
def _parse_array(self, node):
"""
diff --git a/tempest/services/volume/xml/admin/volume_types_client.py b/tempest/services/volume/xml/admin/volume_types_client.py
index 12e70d4..942c4e1 100644
--- a/tempest/services/volume/xml/admin/volume_types_client.py
+++ b/tempest/services/volume/xml/admin/volume_types_client.py
@@ -18,6 +18,7 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest import exceptions
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
@@ -25,18 +26,20 @@
from tempest.services.compute.xml.common import xml_to_json
from tempest.services.compute.xml.common import XMLNS_11
+CONF = config.CONF
+
class VolumeTypesClientXML(RestClientXML):
"""
Client class to send CRUD Volume Types API requests to a Cinder endpoint
"""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(VolumeTypesClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(VolumeTypesClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.volume.catalog_type
- self.build_interval = self.config.compute.build_interval
- self.build_timeout = self.config.compute.build_timeout
+ self.service = CONF.volume.catalog_type
+ self.build_interval = CONF.compute.build_interval
+ self.build_timeout = CONF.compute.build_timeout
def _parse_volume_type(self, body):
vol_type = dict((attr, body.get(attr)) for attr in body.keys())
diff --git a/tempest/services/volume/xml/extensions_client.py b/tempest/services/volume/xml/extensions_client.py
index 30997bb..a04616d 100644
--- a/tempest/services/volume/xml/extensions_client.py
+++ b/tempest/services/volume/xml/extensions_client.py
@@ -14,16 +14,20 @@
# under the License.
from lxml import etree
+
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest.services.compute.xml.common import xml_to_json
+CONF = config.CONF
+
class ExtensionsClientXML(RestClientXML):
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(ExtensionsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(ExtensionsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.volume.catalog_type
+ self.service = CONF.volume.catalog_type
def _parse_array(self, node):
array = []
diff --git a/tempest/services/volume/xml/snapshots_client.py b/tempest/services/volume/xml/snapshots_client.py
index ea2ea27..3e85041 100644
--- a/tempest/services/volume/xml/snapshots_client.py
+++ b/tempest/services/volume/xml/snapshots_client.py
@@ -16,6 +16,7 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.services.compute.xml.common import Document
@@ -24,19 +25,21 @@
from tempest.services.compute.xml.common import xml_to_json
from tempest.services.compute.xml.common import XMLNS_11
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
class SnapshotsClientXML(RestClientXML):
"""Client class to send CRUD Volume API requests."""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(SnapshotsClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(SnapshotsClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.volume.catalog_type
- self.build_interval = self.config.volume.build_interval
- self.build_timeout = self.config.volume.build_timeout
+ self.service = CONF.volume.catalog_type
+ self.build_interval = CONF.volume.build_interval
+ self.build_timeout = CONF.volume.build_timeout
def list_snapshots(self, params=None):
"""List all snapshot."""
diff --git a/tempest/services/volume/xml/volumes_client.py b/tempest/services/volume/xml/volumes_client.py
index 37370b1..7adaf4b 100644
--- a/tempest/services/volume/xml/volumes_client.py
+++ b/tempest/services/volume/xml/volumes_client.py
@@ -19,6 +19,7 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
+from tempest import config
from tempest import exceptions
from tempest.services.compute.xml.common import Document
from tempest.services.compute.xml.common import Element
@@ -26,18 +27,20 @@
from tempest.services.compute.xml.common import xml_to_json
from tempest.services.compute.xml.common import XMLNS_11
+CONF = config.CONF
+
class VolumesClientXML(RestClientXML):
"""
Client class to send CRUD Volume API requests to a Cinder endpoint
"""
- def __init__(self, config, username, password, auth_url, tenant_name=None):
- super(VolumesClientXML, self).__init__(config, username, password,
+ def __init__(self, username, password, auth_url, tenant_name=None):
+ super(VolumesClientXML, self).__init__(username, password,
auth_url, tenant_name)
- self.service = self.config.volume.catalog_type
- self.build_interval = self.config.compute.build_interval
- self.build_timeout = self.config.compute.build_timeout
+ self.service = CONF.volume.catalog_type
+ self.build_interval = CONF.compute.build_interval
+ self.build_timeout = CONF.compute.build_timeout
def _parse_volume(self, body):
vol = dict((attr, body.get(attr)) for attr in body.keys())
diff --git a/tempest/stress/actions/server_create_destroy.py b/tempest/stress/actions/server_create_destroy.py
index 84c7cf5..4a9f0d5 100644
--- a/tempest/stress/actions/server_create_destroy.py
+++ b/tempest/stress/actions/server_create_destroy.py
@@ -13,14 +13,17 @@
# limitations under the License.
from tempest.common.utils import data_utils
+from tempest import config
import tempest.stress.stressaction as stressaction
+CONF = config.CONF
+
class ServerCreateDestroyTest(stressaction.StressAction):
def setUp(self, **kwargs):
- self.image = self.manager.config.compute.image_ref
- self.flavor = self.manager.config.compute.flavor_ref
+ self.image = CONF.compute.image_ref
+ self.flavor = CONF.compute.flavor_ref
def run(self):
name = data_utils.rand_name("instance")
diff --git a/tempest/stress/actions/ssh_floating.py b/tempest/stress/actions/ssh_floating.py
index 28de771..a34a20d 100644
--- a/tempest/stress/actions/ssh_floating.py
+++ b/tempest/stress/actions/ssh_floating.py
@@ -14,9 +14,12 @@
import subprocess
from tempest.common.utils import data_utils
+from tempest import config
import tempest.stress.stressaction as stressaction
import tempest.test
+CONF = config.CONF
+
class FloatingStress(stressaction.StressAction):
@@ -109,8 +112,8 @@
self.logger.info("Deleted Floating IP %s", str(self.floating['ip']))
def setUp(self, **kwargs):
- self.image = self.manager.config.compute.image_ref
- self.flavor = self.manager.config.compute.flavor_ref
+ self.image = CONF.compute.image_ref
+ self.flavor = CONF.compute.flavor_ref
self.vm_extra_args = kwargs.get('vm_extra_args', {})
self.wait_after_vm_create = kwargs.get('wait_after_vm_create',
True)
diff --git a/tempest/stress/actions/volume_attach_delete.py b/tempest/stress/actions/volume_attach_delete.py
index e6fcb81..c2e6072 100644
--- a/tempest/stress/actions/volume_attach_delete.py
+++ b/tempest/stress/actions/volume_attach_delete.py
@@ -12,14 +12,17 @@
# limitations under the License.
from tempest.common.utils import data_utils
+from tempest import config
import tempest.stress.stressaction as stressaction
+CONF = config.CONF
+
class VolumeAttachDeleteTest(stressaction.StressAction):
def setUp(self, **kwargs):
- self.image = self.manager.config.compute.image_ref
- self.flavor = self.manager.config.compute.flavor_ref
+ self.image = CONF.compute.image_ref
+ self.flavor = CONF.compute.flavor_ref
def run(self):
# Step 1: create volume
diff --git a/tempest/stress/driver.py b/tempest/stress/driver.py
index d37ab6d..d4689c4 100644
--- a/tempest/stress/driver.py
+++ b/tempest/stress/driver.py
@@ -20,11 +20,14 @@
from tempest import clients
from tempest.common import ssh
from tempest.common.utils import data_utils
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import importutils
from tempest.openstack.common import log as logging
from tempest.stress import cleanup
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
processes = []
@@ -110,14 +113,13 @@
"""
admin_manager = clients.AdminManager()
- ssh_user = admin_manager.config.stress.target_ssh_user
- ssh_key = admin_manager.config.stress.target_private_key_path
- logfiles = admin_manager.config.stress.target_logfiles
- log_check_interval = int(admin_manager.config.stress.log_check_interval)
- default_thread_num = int(admin_manager.config.stress.
- default_thread_number_per_action)
+ ssh_user = CONF.stress.target_ssh_user
+ ssh_key = CONF.stress.target_private_key_path
+ logfiles = CONF.stress.target_logfiles
+ log_check_interval = int(CONF.stress.log_check_interval)
+ default_thread_num = int(CONF.stress.default_thread_number_per_action)
if logfiles:
- controller = admin_manager.config.stress.target_controller
+ controller = CONF.stress.target_controller
computes = _get_compute_nodes(controller, ssh_user, ssh_key)
for node in computes:
do_ssh("rm -f %s" % logfiles, node, ssh_user, ssh_key)
diff --git a/tempest/test.py b/tempest/test.py
index 61d1311..5898358 100644
--- a/tempest/test.py
+++ b/tempest/test.py
@@ -155,13 +155,12 @@
"""A function that will check the list of enabled extensions from config
"""
- configs = CONF
config_dict = {
- 'compute': configs.compute_feature_enabled.api_extensions,
- 'compute_v3': configs.compute_feature_enabled.api_v3_extensions,
- 'volume': configs.volume_feature_enabled.api_extensions,
- 'network': configs.network_feature_enabled.api_extensions,
- 'object': configs.object_storage_feature_enabled.discoverable_apis,
+ 'compute': CONF.compute_feature_enabled.api_extensions,
+ 'compute_v3': CONF.compute_feature_enabled.api_v3_extensions,
+ 'volume': CONF.volume_feature_enabled.api_extensions,
+ 'network': CONF.network_feature_enabled.api_extensions,
+ 'object': CONF.object_storage_feature_enabled.discoverable_apis,
}
if config_dict[service][0] == 'all':
return True
@@ -209,12 +208,12 @@
def validate_tearDownClass():
if at_exit_set:
- raise RuntimeError("tearDownClass does not calls the super's "
+ raise RuntimeError("tearDownClass does not call the super's "
"tearDownClass in these classes: "
+ str(at_exit_set) + "\n"
"If you see the exception, with another "
- "exception please do not report this one!"
- "If you are changing tempest code, make sure you",
+ "exception please do not report this one! "
+ "If you are changing tempest code, make sure you "
"are calling the super class's tearDownClass!")
atexit.register(validate_tearDownClass)
@@ -224,8 +223,6 @@
testtools.testcase.WithAttributes,
testresources.ResourcedTestCase):
- config = CONF
-
setUpClassCalled = False
network_resources = {}
@@ -281,7 +278,7 @@
cls.__name__, network_resources=cls.network_resources)
force_tenant_isolation = getattr(cls, 'force_tenant_isolation', None)
- if (cls.config.compute.allow_tenant_isolation or
+ if (CONF.compute.allow_tenant_isolation or
force_tenant_isolation):
creds = cls.isolated_creds.get_primary_creds()
username, tenant_name, password = creds
@@ -311,16 +308,6 @@
return admin_client
@classmethod
- def _get_client_args(cls):
-
- return (
- cls.config,
- cls.config.identity.admin_username,
- cls.config.identity.admin_password,
- cls.config.identity.uri
- )
-
- @classmethod
def set_network_resources(self, network=False, router=False, subnet=False,
dhcp=False):
"""Specify which network resources should be created
diff --git a/tempest/tests/test_rest_client.py b/tempest/tests/test_rest_client.py
index acb9000..f3c7440 100644
--- a/tempest/tests/test_rest_client.py
+++ b/tempest/tests/test_rest_client.py
@@ -15,6 +15,7 @@
import httplib2
from tempest.common import rest_client
+from tempest import config
from tempest import exceptions
from tempest.openstack.common.fixture import mockpatch
from tempest.tests import base
@@ -29,8 +30,8 @@
def setUp(self):
super(BaseRestClientTestClass, self).setUp()
- self.rest_client = rest_client.RestClient(fake_config.FakeConfig(),
- 'fake_user', 'fake_pass',
+ self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakeConfig)
+ self.rest_client = rest_client.RestClient('fake_user', 'fake_pass',
'http://fake_url/v2.0')
self.stubs.Set(httplib2.Http, 'request', self.fake_http.request)
self.useFixture(mockpatch.PatchObject(self.rest_client, '_set_auth',
diff --git a/tempest/tests/test_wrappers.py b/tempest/tests/test_wrappers.py
index dd0ea61..f6ed445 100644
--- a/tempest/tests/test_wrappers.py
+++ b/tempest/tests/test_wrappers.py
@@ -27,6 +27,7 @@
super(TestWrappers, self).setUp()
# Setup test dirs
self.directory = tempfile.mkdtemp(prefix='tempest-unit')
+ self.addCleanup(shutil.rmtree, self.directory)
self.test_dir = os.path.join(self.directory, 'tests')
os.mkdir(self.test_dir)
# Setup Test files
diff --git a/tempest/thirdparty/boto/test_ec2_instance_run.py b/tempest/thirdparty/boto/test_ec2_instance_run.py
index 8a08cc2..19ddd18 100644
--- a/tempest/thirdparty/boto/test_ec2_instance_run.py
+++ b/tempest/thirdparty/boto/test_ec2_instance_run.py
@@ -18,6 +18,7 @@
from tempest import clients
from tempest.common.utils import data_utils
from tempest.common.utils.linux.remote_client import RemoteClient
+from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.test import attr
@@ -27,6 +28,8 @@
from tempest.thirdparty.boto.utils.wait import re_search_wait
from tempest.thirdparty.boto.utils.wait import state_wait
+CONF = config.CONF
+
LOG = logging.getLogger(__name__)
@@ -42,12 +45,11 @@
cls.s3_client = cls.os.s3_client
cls.ec2_client = cls.os.ec2api_client
cls.zone = cls.ec2_client.get_good_zone()
- config = cls.config
- cls.materials_path = config.boto.s3_materials_path
- ami_manifest = config.boto.ami_manifest
- aki_manifest = config.boto.aki_manifest
- ari_manifest = config.boto.ari_manifest
- cls.instance_type = config.boto.instance_type
+ cls.materials_path = CONF.boto.s3_materials_path
+ ami_manifest = CONF.boto.ami_manifest
+ aki_manifest = CONF.boto.aki_manifest
+ ari_manifest = CONF.boto.ari_manifest
+ cls.instance_type = CONF.boto.instance_type
cls.bucket_name = data_utils.rand_name("s3bucket-")
cls.keypair_name = data_utils.rand_name("keypair-")
cls.keypair = cls.ec2_client.create_key_pair(cls.keypair_name)
@@ -281,7 +283,7 @@
# NOTE(afazekas): it may be reports availble before it is available
ssh = RemoteClient(address.public_ip,
- self.os.config.compute.ssh_user,
+ CONF.compute.ssh_user,
pkey=self.keypair.material)
text = data_utils.rand_name("Pattern text for console output -")
resp = ssh.write_to_console(text)
diff --git a/tempest/thirdparty/boto/test_s3_ec2_images.py b/tempest/thirdparty/boto/test_s3_ec2_images.py
index 4b7d9dd..722577b 100644
--- a/tempest/thirdparty/boto/test_s3_ec2_images.py
+++ b/tempest/thirdparty/boto/test_s3_ec2_images.py
@@ -17,10 +17,13 @@
from tempest import clients
from tempest.common.utils import data_utils
+from tempest import config
from tempest.test import attr
from tempest.thirdparty.boto.test import BotoTestCase
from tempest.thirdparty.boto.utils.s3 import s3_upload_dir
+CONF = config.CONF
+
class S3ImagesTest(BotoTestCase):
@@ -33,11 +36,10 @@
cls.os = clients.Manager()
cls.s3_client = cls.os.s3_client
cls.images_client = cls.os.ec2api_client
- config = cls.config
- cls.materials_path = config.boto.s3_materials_path
- cls.ami_manifest = config.boto.ami_manifest
- cls.aki_manifest = config.boto.aki_manifest
- cls.ari_manifest = config.boto.ari_manifest
+ cls.materials_path = CONF.boto.s3_materials_path
+ cls.ami_manifest = CONF.boto.ami_manifest
+ cls.aki_manifest = CONF.boto.aki_manifest
+ cls.ari_manifest = CONF.boto.ari_manifest
cls.ami_path = cls.materials_path + os.sep + cls.ami_manifest
cls.aki_path = cls.materials_path + os.sep + cls.aki_manifest
cls.ari_path = cls.materials_path + os.sep + cls.ari_manifest
diff --git a/test-requirements.txt b/test-requirements.txt
index d7340f3..3fe2f27 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -2,7 +2,7 @@
# needed for doc build
docutils==0.9.1
sphinx>=1.1.2,<1.2
-python-subunit
+python-subunit>=0.0.18
oslo.sphinx
mox>=0.5.3
mock>=1.0