Merge " Adds an identity admin client and API tests for keystone roles."
diff --git a/tempest/common/utils/data_utils.py b/tempest/common/utils/data_utils.py
index 2d540f4..752bc10 100644
--- a/tempest/common/utils/data_utils.py
+++ b/tempest/common/utils/data_utils.py
@@ -37,3 +37,10 @@
url += urllib.urlencode(params)
return url
+
+
+def parse_image_id(image_ref):
+ """Return the image id from a given image ref"""
+ temp = image_ref.rsplit('/')
+ #Return the last item, which is the image id
+ return temp[len(temp) - 1]
diff --git a/tempest/services/nova/json/servers_client.py b/tempest/services/nova/json/servers_client.py
index 08ac6df..53b2d6f 100644
--- a/tempest/services/nova/json/servers_client.py
+++ b/tempest/services/nova/json/servers_client.py
@@ -21,6 +21,7 @@
flavor_ref (Required): The flavor used to build the server.
Following optional keyword arguments are accepted:
adminPass: Sets the initial root password.
+ key_name: Key name of keypair that was created earlier.
meta: A dictionary of values to be used as metadata.
personality: A list of dictionaries for files to be injected into
the server.
@@ -40,7 +41,7 @@
'flavorRef': flavor_ref
}
- for option in ['personality', 'adminPass',
+ for option in ['personality', 'adminPass', 'key_name',
'security_groups', 'networks', 'user_data',
'availability_zone', 'accessIPv4', 'accessIPv6',
'min_count', 'max_count', ('metadata', 'meta'),
diff --git a/tempest/tests/test_authorization.py b/tempest/tests/test_authorization.py
index 9f3c34d..e66446d 100644
--- a/tempest/tests/test_authorization.py
+++ b/tempest/tests/test_authorization.py
@@ -4,9 +4,7 @@
from nose.tools import raises
from tempest import openstack
-from tempest.services.nova.json.images_client import ImagesClient
-from tempest.services.nova.json.servers_client import ServersClient
-from tempest.common.utils.data_utils import rand_name
+from tempest.common.utils.data_utils import rand_name, parse_image_id
from tempest import exceptions
from tempest.tests import utils
@@ -53,7 +51,7 @@
name = rand_name('image')
resp, body = cls.client.create_image(server['id'], name)
- image_id = cls._parse_image_id(resp['location'])
+ image_id = parse_image_id(resp['location'])
cls.images_client.wait_for_image_resp_code(image_id, 200)
cls.images_client.wait_for_image_status(image_id, 'ACTIVE')
resp, cls.image = cls.images_client.get_image(image_id)
@@ -162,9 +160,3 @@
finally:
# Reset the base_url...
self.other_client.base_url = saved_base_url
-
- @classmethod
- def _parse_image_id(self, image_ref):
- temp = image_ref.rsplit('/')
- #Return the last item, which is the image id
- return temp[len(temp) - 1]
diff --git a/tempest/tests/test_floating_ips_actions.py b/tempest/tests/test_floating_ips_actions.py
index cc69048..563d0e3 100644
--- a/tempest/tests/test_floating_ips_actions.py
+++ b/tempest/tests/test_floating_ips_actions.py
@@ -11,7 +11,6 @@
@classmethod
def setUpClass(cls):
- cls.os = openstack.Manager()
cls.client = cls.floating_ips_client
cls.servers_client = cls.servers_client
@@ -49,16 +48,18 @@
Positive test:Allocation of a new floating IP to a project
should be succesfull
"""
- resp, body = self.client.create_floating_ip()
- self.assertEqual(200, resp.status)
- floating_ip_id_allocated = body['id']
- resp, floating_ip_details = \
+ try:
+ resp, body = self.client.create_floating_ip()
+ self.assertEqual(200, resp.status)
+ floating_ip_id_allocated = body['id']
+ resp, floating_ip_details = \
self.client.get_floating_ip_details(floating_ip_id_allocated)
- #Checking if the details of allocated IP is in list of floating IP
- resp, body = self.client.list_floating_ips()
- self.assertTrue(floating_ip_details in body)
- #Deleting the floating IP which is created in this method
- self.client.delete_floating_ip(floating_ip_id_allocated)
+ #Checking if the details of allocated IP is in list of floating IP
+ resp, body = self.client.list_floating_ips()
+ self.assertTrue(floating_ip_details in body)
+ finally:
+ #Deleting the floating IP which is created in this method
+ self.client.delete_floating_ip(floating_ip_id_allocated)
@attr(type='positive')
def test_delete_floating_ip(self):
diff --git a/tempest/tests/test_images.py b/tempest/tests/test_images.py
index 716da65..33020d6 100644
--- a/tempest/tests/test_images.py
+++ b/tempest/tests/test_images.py
@@ -5,11 +5,7 @@
from base_compute_test import BaseComputeTest
import tempest.config
from tempest import openstack
-
-
-def _parse_image_id(image_ref):
- temp = image_ref.rsplit('images/')
- return temp[1]
+from tempest.common.utils import data_utils
class ImagesTest(BaseComputeTest):
@@ -38,7 +34,7 @@
name = rand_name('image')
meta = {'image_type': 'test'}
resp, body = self.client.create_image(server['id'], name, meta)
- image_id = _parse_image_id(resp['location'])
+ image_id = data_utils.parse_image_id(resp['location'])
self.client.wait_for_image_resp_code(image_id, 200)
self.client.wait_for_image_status(image_id, 'ACTIVE')
@@ -78,7 +74,7 @@
pass
else:
- image_id = _parse_image_id(resp['location'])
+ image_id = data_utils.parse_image_id(resp['location'])
self.client.wait_for_image_resp_code(image_id, 200)
self.client.wait_for_image_status(image_id, 'ACTIVE')
self.client.delete_image(image_id)
diff --git a/tempest/tests/test_keypairs.py b/tempest/tests/test_keypairs.py
index 14e1317..fde9de1 100644
--- a/tempest/tests/test_keypairs.py
+++ b/tempest/tests/test_keypairs.py
@@ -10,7 +10,6 @@
@classmethod
def setUpClass(cls):
- cls.os = openstack.Manager()
cls.client = cls.keypairs_client
@attr(type='smoke')
diff --git a/tempest/tests/test_list_floating_ips.py b/tempest/tests/test_list_floating_ips.py
index d100c01..03ed089 100644
--- a/tempest/tests/test_list_floating_ips.py
+++ b/tempest/tests/test_list_floating_ips.py
@@ -39,23 +39,25 @@
def test_get_floating_ip_details(self):
"""Positive test:Should be able to GET the details of floatingIP"""
#Creating a floating IP for which details are to be checked
- resp, body = self.client.create_floating_ip()
- floating_ip_instance_id = body['instance_id']
- floating_ip_ip = body['ip']
- floating_ip_fixed_ip = body['fixed_ip']
- floating_ip_id = body['id']
- resp, body = \
- self.client.get_floating_ip_details(floating_ip_id)
- self.assertEqual(200, resp.status)
- #Comparing the details of floating IP
- self.assertEqual(floating_ip_instance_id,
+ try:
+ resp, body = self.client.create_floating_ip()
+ floating_ip_instance_id = body['instance_id']
+ floating_ip_ip = body['ip']
+ floating_ip_fixed_ip = body['fixed_ip']
+ floating_ip_id = body['id']
+ resp, body = \
+ self.client.get_floating_ip_details(floating_ip_id)
+ self.assertEqual(200, resp.status)
+ #Comparing the details of floating IP
+ self.assertEqual(floating_ip_instance_id,
body['instance_id'])
- self.assertEqual(floating_ip_ip, body['ip'])
- self.assertEqual(floating_ip_fixed_ip,
+ self.assertEqual(floating_ip_ip, body['ip'])
+ self.assertEqual(floating_ip_fixed_ip,
body['fixed_ip'])
- self.assertEqual(floating_ip_id, body['id'])
+ self.assertEqual(floating_ip_id, body['id'])
#Deleting the floating IP created in this method
- self.client.delete_floating_ip(floating_ip_id)
+ finally:
+ self.client.delete_floating_ip(floating_ip_id)
@attr(type='negative')
@unittest.skip('Skipping until Nova Bug 940500 is fixed')
diff --git a/tempest/tests/test_list_images.py b/tempest/tests/test_list_images.py
index 9d2bb1b..810e933 100644
--- a/tempest/tests/test_list_images.py
+++ b/tempest/tests/test_list_images.py
@@ -1,14 +1,8 @@
from nose.plugins.attrib import attr
from tempest import exceptions
-from tempest import openstack
from base_compute_test import BaseComputeTest
-from tempest.common.utils.data_utils import rand_name
-
-
-def _parse_image_id(image_ref):
- temp = image_ref.rsplit('/')
- return temp[len(temp) - 1]
+from tempest.common.utils.data_utils import rand_name, parse_image_id
class ListImagesTest(BaseComputeTest):
@@ -31,7 +25,7 @@
# Create images to be used in the filter tests
image1_name = rand_name('image')
resp, body = cls.client.create_image(cls.server1['id'], image1_name)
- cls.image1_id = _parse_image_id(resp['location'])
+ cls.image1_id = parse_image_id(resp['location'])
cls.client.wait_for_image_resp_code(cls.image1_id, 200)
cls.client.wait_for_image_status(cls.image1_id, 'ACTIVE')
resp, cls.image1 = cls.client.get_image(cls.image1_id)
@@ -41,14 +35,14 @@
# server will sometimes cause failures
image3_name = rand_name('image')
resp, body = cls.client.create_image(cls.server2['id'], image3_name)
- cls.image3_id = _parse_image_id(resp['location'])
+ cls.image3_id = parse_image_id(resp['location'])
cls.client.wait_for_image_resp_code(cls.image3_id, 200)
cls.client.wait_for_image_status(cls.image3_id, 'ACTIVE')
resp, cls.image3 = cls.client.get_image(cls.image3_id)
image2_name = rand_name('image')
resp, body = cls.client.create_image(cls.server1['id'], image2_name)
- cls.image2_id = _parse_image_id(resp['location'])
+ cls.image2_id = parse_image_id(resp['location'])
cls.client.wait_for_image_resp_code(cls.image2_id, 200)
cls.client.wait_for_image_status(cls.image2_id, 'ACTIVE')
resp, cls.image2 = cls.client.get_image(cls.image2_id)
diff --git a/tempest/tests/test_servers.py b/tempest/tests/test_servers.py
index 414d58a..b152b4c 100644
--- a/tempest/tests/test_servers.py
+++ b/tempest/tests/test_servers.py
@@ -54,58 +54,65 @@
password should be set to that password.
"""
- name = rand_name('server')
- resp, server = self.client.create_server(name, self.image_ref,
+ try:
+ name = rand_name('server')
+ resp, server = self.client.create_server(name, self.image_ref,
self.flavor_ref,
adminPass='testpassword')
- #Verify the password is set correctly in the response
- self.assertEqual('testpassword', server['adminPass'])
+ #Verify the password is set correctly in the response
+ self.assertEqual('testpassword', server['adminPass'])
#Teardown
- self.client.delete_server(server['id'])
+ finally:
+ self.client.delete_server(server['id'])
@attr(type='smoke')
def test_update_server_name(self):
"""The server name should be changed to the the provided value"""
- name = rand_name('server')
- resp, server = self.client.create_server(name, self.image_ref,
+ try:
+ name = rand_name('server')
+ resp, server = self.client.create_server(name, self.image_ref,
self.flavor_ref)
- self.client.wait_for_server_status(server['id'], 'ACTIVE')
+ self.client.wait_for_server_status(server['id'], 'ACTIVE')
- #Update the server with a new name
- resp, server = self.client.update_server(server['id'], name='newname')
- self.assertEquals(200, resp.status)
- self.client.wait_for_server_status(server['id'], 'ACTIVE')
+ #Update the server with a new name
+ resp, server = self.client.update_server(server['id'],
+ name='newname')
+ self.assertEquals(200, resp.status)
+ self.client.wait_for_server_status(server['id'], 'ACTIVE')
- #Verify the name of the server has changed
- resp, server = self.client.get_server(server['id'])
- self.assertEqual('newname', server['name'])
+ #Verify the name of the server has changed
+ resp, server = self.client.get_server(server['id'])
+ self.assertEqual('newname', server['name'])
#Teardown
- self.client.delete_server(server['id'])
+ finally:
+ self.client.delete_server(server['id'])
@attr(type='smoke')
def test_update_access_server_address(self):
"""
The server's access addresses should reflect the provided values
"""
- name = rand_name('server')
- resp, server = self.client.create_server(name, self.image_ref,
+ try:
+ name = rand_name('server')
+ resp, server = self.client.create_server(name, self.image_ref,
self.flavor_ref)
- self.client.wait_for_server_status(server['id'], 'ACTIVE')
+ self.client.wait_for_server_status(server['id'], 'ACTIVE')
- #Update the IPv4 and IPv6 access addresses
- resp, body = self.client.update_server(server['id'],
+ #Update the IPv4 and IPv6 access addresses
+ resp, body = self.client.update_server(server['id'],
accessIPv4='1.1.1.1',
accessIPv6='::babe:2.2.2.2')
- self.assertEqual(200, resp.status)
- self.client.wait_for_server_status(server['id'], 'ACTIVE')
+ self.assertEqual(200, resp.status)
+ self.client.wait_for_server_status(server['id'], 'ACTIVE')
- #Verify the access addresses have been updated
- resp, server = self.client.get_server(server['id'])
- self.assertEqual('1.1.1.1', server['accessIPv4'])
- self.assertEqual('::babe:2.2.2.2', server['accessIPv6'])
+ #Verify the access addresses have been updated
+ resp, server = self.client.get_server(server['id'])
+ self.assertEqual('1.1.1.1', server['accessIPv4'])
+ self.assertEqual('::babe:2.2.2.2', server['accessIPv6'])
#Teardown
- self.client.delete_server(server['id'])
+ finally:
+ self.client.delete_server(server['id'])