Merge "Fix pep8 failures in test_ec2_security_groups.py"
diff --git a/tempest/common/rest_client.py b/tempest/common/rest_client.py
index 52ed6bc..8311365 100644
--- a/tempest/common/rest_client.py
+++ b/tempest/common/rest_client.py
@@ -162,8 +162,8 @@
def post(self, url, body, headers):
return self.request('POST', url, headers, body)
- def get(self, url, headers=None):
- return self.request('GET', url, headers)
+ def get(self, url, headers=None, wait=None):
+ return self.request('GET', url, headers, wait=wait)
def delete(self, url, headers=None):
return self.request('DELETE', url, headers)
@@ -186,7 +186,8 @@
def _parse_resp(self, body):
return json.loads(body)
- def request(self, method, url, headers=None, body=None, depth=0):
+ def request(self, method, url,
+ headers=None, body=None, depth=0, wait=None):
"""A simple HTTP request interface."""
if (self.token is None) or (self.base_url is None):
@@ -205,7 +206,8 @@
raise exceptions.Unauthorized()
if resp.status == 404:
- self._log(req_url, body, resp, resp_body)
+ if not wait:
+ self._log(req_url, body, resp, resp_body)
raise exceptions.NotFound(resp_body)
if resp.status == 400:
diff --git a/tempest/services/compute/json/limits_client.py b/tempest/services/compute/json/limits_client.py
index f363bf7..945477a 100644
--- a/tempest/services/compute/json/limits_client.py
+++ b/tempest/services/compute/json/limits_client.py
@@ -26,19 +26,15 @@
auth_url, tenant_name)
self.service = self.config.compute.catalog_type
- def get_limits(self):
+ def get_absolute_limits(self):
resp, body = self.get("limits")
body = json.loads(body)
- return resp, body['limits']
+ return resp, body['limits']['absolute']
- def get_max_server_meta(self):
- resp, limits_dict = self.get_limits()
- return resp, limits_dict['absolute']['maxServerMeta']
-
- def get_personality_file_limit(self):
- resp, limits_dict = self.get_limits()
- return resp, limits_dict['absolute']['maxPersonality']
-
- def get_personality_size_limit(self):
- resp, limits_dict = self.get_limits()
- return resp, limits_dict['absolute']['maxPersonalitySize']
+ def get_specific_absolute_limit(self, absolute_limit):
+ resp, body = self.get("limits")
+ body = json.loads(body)
+ if absolute_limit not in body['limits']['absolute']:
+ return None
+ else:
+ return body['limits']['absolute'][absolute_limit]
diff --git a/tempest/services/compute/json/volumes_extensions_client.py b/tempest/services/compute/json/volumes_extensions_client.py
index 5ac1124..240bcfe 100644
--- a/tempest/services/compute/json/volumes_extensions_client.py
+++ b/tempest/services/compute/json/volumes_extensions_client.py
@@ -59,10 +59,10 @@
body = json.loads(body)
return resp, body['volumes']
- def get_volume(self, volume_id):
+ def get_volume(self, volume_id, wait=None):
"""Returns the details of a single volume"""
url = "os-volumes/%s" % str(volume_id)
- resp, body = self.get(url)
+ resp, body = self.get(url, wait=wait)
body = json.loads(body)
return resp, body['volume']
@@ -111,7 +111,7 @@
def is_resource_deleted(self, id):
try:
- self.get_volume(id)
+ self.get_volume(id, wait=True)
except exceptions.NotFound:
return True
return False
diff --git a/tempest/services/compute/xml/limits_client.py b/tempest/services/compute/xml/limits_client.py
index 75142a9..229dbee 100644
--- a/tempest/services/compute/xml/limits_client.py
+++ b/tempest/services/compute/xml/limits_client.py
@@ -29,7 +29,7 @@
auth_url, tenant_name)
self.service = self.config.compute.catalog_type
- def get_limits(self):
+ def get_absolute_limits(self):
resp, body = self.get("limits", self.headers)
body = objectify.fromstring(body)
lim = NS + 'absolute'
@@ -37,23 +37,19 @@
for el in body[lim].iterchildren():
attributes = el.attrib
- if attributes['name'] == 'maxServerMeta':
- ret['maxServerMeta'] = int(attributes['value'])
- elif attributes['name'] == 'maxPersonality':
- ret['maxPersonality'] = int(attributes['value'])
- elif attributes['name'] == 'maxPersonalitySize':
- ret['maxPersonalitySize'] = int(attributes['value'])
-
+ ret[attributes['name']] = attributes['value']
return resp, ret
- def get_max_server_meta(self):
- resp, limits_dict = self.get_limits()
- return resp, limits_dict['maxServerMeta']
+ def get_specific_absolute_limit(self, absolute_limit):
+ resp, body = self.get("limits", self.headers)
+ body = objectify.fromstring(body)
+ lim = NS + 'absolute'
+ ret = {}
- def get_personality_file_limit(self):
- resp, limits_dict = self.get_limits()
- return resp, limits_dict['maxPersonality']
-
- def get_personality_size_limit(self):
- resp, limits_dict = self.get_limits()
- return resp, limits_dict['maxPersonalitySize']
+ for el in body[lim].iterchildren():
+ attributes = el.attrib
+ ret[attributes['name']] = attributes['value']
+ if absolute_limit not in ret:
+ return None
+ else:
+ return ret[absolute_limit]
diff --git a/tempest/services/compute/xml/volumes_extensions_client.py b/tempest/services/compute/xml/volumes_extensions_client.py
index 6869360..0fbc070 100644
--- a/tempest/services/compute/xml/volumes_extensions_client.py
+++ b/tempest/services/compute/xml/volumes_extensions_client.py
@@ -79,10 +79,10 @@
volumes += [self._parse_volume(vol) for vol in list(body)]
return resp, volumes
- def get_volume(self, volume_id):
+ def get_volume(self, volume_id, wait=None):
"""Returns the details of a single volume"""
url = "os-volumes/%s" % str(volume_id)
- resp, body = self.get(url, self.headers)
+ resp, body = self.get(url, self.headers, wait=wait)
body = etree.fromstring(body)
return resp, self._parse_volume(body)
@@ -139,7 +139,7 @@
def is_resource_deleted(self, id):
try:
- self.get_volume(id)
+ self.get_volume(id, wait=True)
except exceptions.NotFound:
return True
return False
diff --git a/tempest/services/volume/json/volumes_client.py b/tempest/services/volume/json/volumes_client.py
index 6f04e5e..28dae4e 100644
--- a/tempest/services/volume/json/volumes_client.py
+++ b/tempest/services/volume/json/volumes_client.py
@@ -62,10 +62,10 @@
body = json.loads(body)
return resp, body['volumes']
- def get_volume(self, volume_id):
+ def get_volume(self, volume_id, wait=None):
"""Returns the details of a single volume"""
url = "volumes/%s" % str(volume_id)
- resp, body = self.get(url)
+ resp, body = self.get(url, wait=wait)
body = json.loads(body)
return resp, body['volume']
@@ -133,7 +133,7 @@
def is_resource_deleted(self, id):
try:
- self.get_volume(id)
+ self.get_volume(id, wait=True)
except exceptions.NotFound:
return True
return False
diff --git a/tempest/services/volume/xml/volumes_client.py b/tempest/services/volume/xml/volumes_client.py
index ef5f3e9..9d2f159 100644
--- a/tempest/services/volume/xml/volumes_client.py
+++ b/tempest/services/volume/xml/volumes_client.py
@@ -82,10 +82,10 @@
volumes += [self._parse_volume(vol) for vol in list(body)]
return resp, volumes
- def get_volume(self, volume_id):
+ def get_volume(self, volume_id, wait=None):
"""Returns the details of a single volume"""
url = "volumes/%s" % str(volume_id)
- resp, body = self.get(url, self.headers)
+ resp, body = self.get(url, self.headers, wait=wait)
body = etree.fromstring(body)
return resp, self._parse_volume(body)
@@ -140,7 +140,7 @@
def is_resource_deleted(self, id):
try:
- self.get_volume(id)
+ self.get_volume(id, wait=True)
except exceptions.NotFound:
return True
return False
diff --git a/tempest/tests/boto/__init__.py b/tempest/tests/boto/__init__.py
index 3d5ea6c..11fa077 100644
--- a/tempest/tests/boto/__init__.py
+++ b/tempest/tests/boto/__init__.py
@@ -73,7 +73,6 @@
EC2_CAN_CONNECT_ERROR = "AWS credentials not set," +\
" faild to get them even by keystoneclient"
except Exception as exc:
- logging.exception(exc)
EC2_CAN_CONNECT_ERROR = str(exc)
else:
EC2_CAN_CONNECT_ERROR = None
@@ -88,7 +87,6 @@
if exc.status == 403:
_cred_sub_check(s3client.connection_data)
except Exception as exc:
- logging.exception(exc)
S3_CAN_CONNECT_ERROR = str(exc)
except keystoneclient.exceptions.Unauthorized:
S3_CAN_CONNECT_ERROR = "AWS credentials not set," +\
diff --git a/tempest/tests/compute/limits/__init__.py b/tempest/tests/compute/limits/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tempest/tests/compute/limits/__init__.py
diff --git a/tempest/tests/compute/limits/test_absolute_limits.py b/tempest/tests/compute/limits/test_absolute_limits.py
new file mode 100644
index 0000000..ede0dc2
--- /dev/null
+++ b/tempest/tests/compute/limits/test_absolute_limits.py
@@ -0,0 +1,68 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack, LLC
+# 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.
+
+import unittest2 as unittest
+
+from tempest.tests.compute import base
+
+
+class AbsoluteLimitsTest(object):
+
+ @staticmethod
+ def setUpClass(cls):
+ cls.client = cls.limits_client
+
+ @unittest.skip("Skipped until the Bug #1025294 is resolved")
+ def test_absLimits_get(self):
+ """
+ To check if all limits are present in the response
+ """
+ resp, absolute_limits = self.client.get_absolute_limits()
+ expected_elements = ['maxImageMeta', 'maxPersonality',
+ 'maxPersonalitySize',
+ 'maxPersonalityFilePathSize',
+ 'maxServerMeta', 'maxTotalCores',
+ 'maxTotalFloatingIps', 'maxSecurityGroups',
+ 'maxSecurityGroupRules', 'maxTotalInstances',
+ 'maxTotalKeypairs', 'maxTotalRAMSize',
+ 'maxTotalVolumeGigabytes', 'maxTotalVolumes',
+ 'totalCoresUsed', 'totalFloatingIpsUsed',
+ 'totalSecurityGroupsUsed', 'totalInstancesUsed',
+ 'totalKeyPairsUsed', 'totalRAMUsed',
+ 'totalVolumeGigabytesUsed', 'totalVolumesUsed']
+ # check whether all expected elements exist
+ missing_elements =\
+ [ele for ele in expected_elements if ele not in absolute_limits]
+ self.assertEqual(0, len(missing_elements),
+ "Failed to find element %s in absolute limits list"
+ % ', '.join(ele for ele in missing_elements))
+
+
+class AbsoluteLimitsTestJSON(base.BaseComputeTestJSON,
+ AbsoluteLimitsTest):
+ @classmethod
+ def setUpClass(cls):
+ super(AbsoluteLimitsTestJSON, cls).setUpClass()
+ AbsoluteLimitsTest.setUpClass(cls)
+
+
+class AbsoluteLimitsTestXML(base.BaseComputeTestXML,
+ AbsoluteLimitsTest):
+ @classmethod
+ def setUpClass(cls):
+ super(AbsoluteLimitsTestXML, cls).setUpClass()
+ AbsoluteLimitsTest.setUpClass(cls)
diff --git a/tempest/tests/compute/servers/test_server_personality.py b/tempest/tests/compute/servers/test_server_personality.py
index a570aec..75457d1 100644
--- a/tempest/tests/compute/servers/test_server_personality.py
+++ b/tempest/tests/compute/servers/test_server_personality.py
@@ -34,8 +34,9 @@
name = rand_name('server')
file_contents = 'This is a test file.'
personality = []
- _, max_file_limit = self.user_client.get_personality_file_limit()
- for i in range(0, max_file_limit + 1):
+ max_file_limit = \
+ self.user_client.get_specific_absolute_limit("maxPersonality")
+ for i in range(0, int(max_file_limit) + 1):
path = 'etc/test' + str(i) + '.txt'
personality.append({'path': path,
'contents': base64.b64encode(file_contents)})
@@ -57,18 +58,16 @@
name = rand_name('server')
file_contents = 'This is a test file.'
- cli_resp = self.user_client.get_personality_file_limit()
- resp, max_file_limit = cli_resp
- self.assertEqual(200, resp.status)
+ max_file_limit = \
+ self.user_client.get_specific_absolute_limit("maxPersonality")
personality = []
- for i in range(0, max_file_limit):
+ for i in range(0, int(max_file_limit)):
path = 'etc/test' + str(i) + '.txt'
personality.append({
'path': path,
'contents': base64.b64encode(file_contents),
})
-
resp, server = self.client.create_server(name, self.image_ref,
self.flavor_ref,
personality=personality)
diff --git a/tempest/tests/compute/volumes/test_volumes_get.py b/tempest/tests/compute/volumes/test_volumes_get.py
index e80e5b9..0a207b9 100644
--- a/tempest/tests/compute/volumes/test_volumes_get.py
+++ b/tempest/tests/compute/volumes/test_volumes_get.py
@@ -26,6 +26,7 @@
@attr(type='smoke')
def test_volume_create_get_delete(self):
"""CREATE, GET, DELETE Volume"""
+ volume = None
try:
v_name = rand_name('Volume-%s-') % self._interface
metadata = {'Type': 'work'}
@@ -61,11 +62,12 @@
'from the created Volume')
finally:
- #Delete the Volume created in this method
- 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'])
+ if volume:
+ #Delete the Volume created in this method
+ 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'])
@attr(type='positive')
def test_volume_get_metadata_none(self):