Merge "Wait for the router port activation before deletion"
diff --git a/tempest/api/compute/servers/test_server_actions.py b/tempest/api/compute/servers/test_server_actions.py
index c911039..10153bb 100644
--- a/tempest/api/compute/servers/test_server_actions.py
+++ b/tempest/api/compute/servers/test_server_actions.py
@@ -45,15 +45,6 @@
try:
self.validation_resources = self.get_class_validation_resources(
self.os_primary)
- # _test_rebuild_server test compares ip address attached to the
- # server before and after the rebuild, in order to avoid
- # a situation when a newly created server doesn't have a floating
- # ip attached at the beginning of the test_rebuild_server let's
- # make sure right here the floating ip is attached
- waiters.wait_for_server_floating_ip(
- self.client,
- self.client.show_server(self.server_id)['server'],
- self.validation_resources['floating_ip'])
waiters.wait_for_server_status(self.client,
self.server_id, 'ACTIVE')
except lib_exc.NotFound:
@@ -127,7 +118,7 @@
self.assertGreater(new_boot_time, boot_time,
'%s > %s' % (new_boot_time, boot_time))
- def _test_rebuild_server(self, server_id):
+ def _test_rebuild_server(self, server_id, **kwargs):
# Get the IPs the server has before rebuilding it
original_addresses = (self.client.show_server(server_id)['server']
['addresses'])
@@ -166,11 +157,17 @@
# 3.Any "id_rsa", "id_dsa" or "id_ecdsa" key discoverable in
# ~/.ssh/ (if allowed).
# 4.Plain username/password auth, if a password was given.
+
+ if 'validation_resources' in kwargs:
+ validation_resources = kwargs['validation_resources']
+ else:
+ validation_resources = self.validation_resources
+
linux_client = remote_client.RemoteClient(
- self.get_server_ip(rebuilt_server, self.validation_resources),
+ self.get_server_ip(rebuilt_server, validation_resources),
self.ssh_alt_user,
password,
- self.validation_resources['keypair']['private_key'],
+ validation_resources['keypair']['private_key'],
server=rebuilt_server,
servers_client=self.client)
linux_client.validate_authentication()
@@ -267,17 +264,32 @@
The server should be rebuilt using the provided image and data.
"""
tenant_network = self.get_tenant_network()
+ validation_resources = self.get_test_validation_resources(
+ self.os_primary)
_, servers = compute.create_test_server(
self.os_primary,
- wait_until='ACTIVE',
+ wait_until='SSHABLE',
+ validatable=True,
+ validation_resources=validation_resources,
tenant_network=tenant_network)
server = servers[0]
+ # _test_rebuild_server test compares ip address attached to the
+ # server before and after the rebuild, in order to avoid
+ # a situation when a newly created server doesn't have a floating
+ # ip attached at the beginning of the test_rebuild_server let's
+ # make sure right here the floating ip is attached
+ waiters.wait_for_server_floating_ip(
+ self.client,
+ server,
+ validation_resources['floating_ip'])
self.addCleanup(waiters.wait_for_server_termination,
self.client, server['id'])
self.addCleanup(self.client.delete_server, server['id'])
- self._test_rebuild_server(server_id=server['id'])
+ self._test_rebuild_server(
+ server_id=server['id'],
+ validation_resources=validation_resources)
@decorators.idempotent_id('1499262a-9328-4eda-9068-db1ac57498d2')
@testtools.skipUnless(CONF.compute_feature_enabled.resize,
@@ -465,7 +477,9 @@
self.attach_volume(server, volume)
# run general rebuild test
- self._test_rebuild_server(server_id=server['id'])
+ self._test_rebuild_server(
+ server_id=server['id'],
+ validation_resources=validation_resources)
# make sure the volume is attached to the instance after rebuild
vol_after_rebuild = self.volumes_client.show_volume(volume['id'])
diff --git a/tempest/api/volume/admin/test_volume_types.py b/tempest/api/volume/admin/test_volume_types.py
index 5b17afb..0f032c6 100644
--- a/tempest/api/volume/admin/test_volume_types.py
+++ b/tempest/api/volume/admin/test_volume_types.py
@@ -143,6 +143,7 @@
# Get encryption type
encrypt_type_id = encryption_type['volume_type_id']
+ encryption_id = encryption_type['encryption_id']
fetched_encryption_type = (
self.admin_encryption_types_client.show_encryption_type(
encrypt_type_id))
@@ -157,7 +158,7 @@
'cipher': 'aes-xts-plain64',
'control_location': 'back-end'}
self.admin_encryption_types_client.update_encryption_type(
- encrypt_type_id, **update_kwargs)
+ encrypt_type_id, encryption_id, **update_kwargs)
updated_encryption_type = (
self.admin_encryption_types_client.show_encryption_type(
encrypt_type_id))
@@ -174,7 +175,7 @@
# Delete encryption type
self.admin_encryption_types_client.delete_encryption_type(
- encrypt_type_id)
+ encrypt_type_id, encryption_id)
self.admin_encryption_types_client.wait_for_resource_deletion(
encrypt_type_id)
deleted_encryption_type = (
diff --git a/tempest/lib/services/object_storage/account_client.py b/tempest/lib/services/object_storage/account_client.py
index d7ce526..7bf0dcd 100644
--- a/tempest/lib/services/object_storage/account_client.py
+++ b/tempest/lib/services/object_storage/account_client.py
@@ -39,11 +39,13 @@
headers = {}
if create_update_metadata:
for key in create_update_metadata:
- metadata_header_name = create_update_metadata_prefix + key
+ metadata_header_name = create_update_metadata_prefix + \
+ key.replace('_', '-')
headers[metadata_header_name] = create_update_metadata[key]
if delete_metadata:
for key in delete_metadata:
- headers[delete_metadata_prefix + key] = delete_metadata[key]
+ headers[delete_metadata_prefix + key.replace(
+ '_', '-')] = delete_metadata[key]
resp, body = self.post('', headers=headers, body=None)
self.expected_success([200, 204], resp.status)
diff --git a/tempest/lib/services/object_storage/container_client.py b/tempest/lib/services/object_storage/container_client.py
index 47edf70..641c084 100644
--- a/tempest/lib/services/object_storage/container_client.py
+++ b/tempest/lib/services/object_storage/container_client.py
@@ -41,7 +41,12 @@
"""
url = str(container_name)
- resp, body = self.put(url, body=None, headers=headers)
+ new_headers = {}
+ for key in headers:
+ new_key = key.replace('_', '-')
+ new_headers[new_key] = headers[key]
+
+ resp, body = self.put(url, body=None, headers=new_headers)
self.expected_success([201, 202, 204], resp.status)
return resp, body
@@ -74,11 +79,13 @@
headers = {}
if create_update_metadata:
for key in create_update_metadata:
- metadata_header_name = create_update_metadata_prefix + key
+ metadata_header_name = create_update_metadata_prefix + \
+ key.replace('_', '-')
headers[metadata_header_name] = create_update_metadata[key]
if delete_metadata:
for key in delete_metadata:
- headers[delete_metadata_prefix + key] = delete_metadata[key]
+ headers[delete_metadata_prefix + key.replace(
+ '_', '-')] = delete_metadata[key]
resp, body = self.post(url, headers=headers, body=None)
self.expected_success(204, resp.status)
diff --git a/tempest/lib/services/volume/v3/encryption_types_client.py b/tempest/lib/services/volume/v3/encryption_types_client.py
index 7cced57..f6f2fd5 100644
--- a/tempest/lib/services/volume/v3/encryption_types_client.py
+++ b/tempest/lib/services/volume/v3/encryption_types_client.py
@@ -69,21 +69,21 @@
self.validate_response(schema.create_encryption_type, resp, body)
return rest_client.ResponseBody(resp, body)
- def delete_encryption_type(self, volume_type_id):
+ def delete_encryption_type(self, volume_type_id, encryption_id):
"""Delete the encryption type for the specified volume-type."""
resp, body = self.delete(
- "/types/%s/encryption/provider" % volume_type_id)
+ "/types/%s/encryption/%s" % (volume_type_id, encryption_id))
self.validate_response(schema.delete_encryption_type, resp, body)
return rest_client.ResponseBody(resp, body)
- def update_encryption_type(self, volume_type_id, **kwargs):
+ def update_encryption_type(self, volume_type_id, encryption_id, **kwargs):
"""Update an encryption type for an existing volume type.
For a full list of available parameters, please refer to the official
API reference:
https://docs.openstack.org/api-ref/block-storage/v3/index.html#update-an-encryption-type
"""
- url = "/types/%s/encryption/provider" % volume_type_id
+ url = "/types/%s/encryption/%s" % (volume_type_id, encryption_id)
put_body = json.dumps({'encryption': kwargs})
resp, body = self.put(url, put_body)
body = json.loads(body)
diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py
index be2b2d6..57bc2e9 100644
--- a/tempest/scenario/manager.py
+++ b/tempest/scenario/manager.py
@@ -1199,14 +1199,15 @@
except (KeyError, IndexError):
return None
- def associate_floating_ip(self, floating_ip, server):
+ def associate_floating_ip(self, floating_ip, server, ip_addr=None,
+ **kwargs):
"""Associate floating ip to server
This wrapper utility attaches the floating_ip for
the respective port_id of server
"""
- port_id, _ = self.get_server_port_id_and_ip4(server)
- kwargs = dict(port_id=port_id)
+ port_id, _ = self.get_server_port_id_and_ip4(server, ip_addr=ip_addr)
+ kwargs.update({"port_id": port_id})
floating_ip = self.floating_ips_client.update_floatingip(
floating_ip['id'], **kwargs)['floatingip']
self.assertEqual(port_id, floating_ip['port_id'])
diff --git a/tempest/tests/lib/services/volume/v3/test_encryption_types_client.py b/tempest/tests/lib/services/volume/v3/test_encryption_types_client.py
index 7218224..8164ea6 100644
--- a/tempest/tests/lib/services/volume/v3/test_encryption_types_client.py
+++ b/tempest/tests/lib/services/volume/v3/test_encryption_types_client.py
@@ -106,6 +106,7 @@
'tempest.lib.common.rest_client.RestClient.delete',
{},
volume_type_id="cbc36478b0bd8e67e89",
+ encryption_id="test_id",
status=202)
def test_update_encryption_type_with_str_body(self):
@@ -119,4 +120,5 @@
self.client.update_encryption_type,
'tempest.lib.common.rest_client.RestClient.put',
self.FAKE_UPDATE_ENCRYPTION_TYPE,
- bytes_body, volume_type_id="cbc36478b0bd8e67e89")
+ bytes_body, volume_type_id="cbc36478b0bd8e67e89",
+ encryption_id="test_id")
diff --git a/tools/tempest-extra-tests-list.txt b/tools/tempest-extra-tests-list.txt
index 9c88109..03cf7e9 100644
--- a/tools/tempest-extra-tests-list.txt
+++ b/tools/tempest-extra-tests-list.txt
@@ -16,5 +16,10 @@
tempest.api.image.admin
tempest.api.network.admin
+# This also run cinder-tempest-plugin tests so that we can avoid any
+# breaking change to plugins (cinder-tempest-plugins uses most of the
+# Tempest interface) but we can add more plugins tests here if needed.
+cinder_tempest_plugin
+
# All negative tests
negative
diff --git a/zuul.d/integrated-gate.yaml b/zuul.d/integrated-gate.yaml
index a9aa384..47b7812 100644
--- a/zuul.d/integrated-gate.yaml
+++ b/zuul.d/integrated-gate.yaml
@@ -42,11 +42,18 @@
description: |
This job runs the extra tests mentioned in
tools/tempest-extra-tests-list.txt.
+ # NOTE(gmann): We need c-t-p as this job run c-t-p tests also.
+ required-projects:
+ - opendev.org/openstack/cinder-tempest-plugin
vars:
tox_envlist: extra-tests
+ tempest_plugins:
+ - cinder-tempest-plugin
run_tempest_cleanup: true
run_tempest_cleanup_resource_list: true
run_tempest_dry_cleanup: true
+ devstack_localrc:
+ CINDER_ENFORCE_SCOPE: true
devstack_local_conf:
test-config:
$TEMPEST_CONFIG: