Merge "Move wait_for_server_termination from servers_client"
This commit is contained in:
@@ -129,7 +129,8 @@ class BaseComputeTest(tempest.test.BaseTestCase):
|
||||
|
||||
for server in cls.servers:
|
||||
try:
|
||||
cls.servers_client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(cls.servers_client,
|
||||
server['id'])
|
||||
except Exception:
|
||||
LOG.exception('Waiting for deletion of server %s failed'
|
||||
% server['id'])
|
||||
@@ -150,7 +151,8 @@ class BaseComputeTest(tempest.test.BaseTestCase):
|
||||
except Exception as exc:
|
||||
LOG.exception(exc)
|
||||
cls.servers_client.delete_server(cls.server_id)
|
||||
cls.servers_client.wait_for_server_termination(cls.server_id)
|
||||
waiters.wait_for_server_termination(cls.servers_client,
|
||||
cls.server_id)
|
||||
cls.server_id = None
|
||||
raise
|
||||
|
||||
@@ -300,7 +302,8 @@ class BaseComputeTest(tempest.test.BaseTestCase):
|
||||
if server_id:
|
||||
try:
|
||||
cls.servers_client.delete_server(server_id)
|
||||
cls.servers_client.wait_for_server_termination(server_id)
|
||||
waiters.wait_for_server_termination(cls.servers_client,
|
||||
server_id)
|
||||
except Exception:
|
||||
LOG.exception('Failed to delete server %s' % server_id)
|
||||
|
||||
@@ -316,7 +319,8 @@ class BaseComputeTest(tempest.test.BaseTestCase):
|
||||
"""Deletes an existing server and waits for it to be gone."""
|
||||
try:
|
||||
cls.servers_client.delete_server(server_id)
|
||||
cls.servers_client.wait_for_server_termination(server_id)
|
||||
waiters.wait_for_server_termination(cls.servers_client,
|
||||
server_id)
|
||||
except Exception:
|
||||
LOG.exception('Failed to delete server %s' % server_id)
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ class ImagesNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
# Delete server before trying to create server
|
||||
self.servers_client.delete_server(server['id'])
|
||||
self.servers_client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.servers_client, server['id'])
|
||||
# Create a new image after server is deleted
|
||||
name = data_utils.rand_name('image')
|
||||
meta = {'image_type': 'test'}
|
||||
|
||||
@@ -123,7 +123,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
|
||||
# Shutdown the server and then verify we can destroy the
|
||||
# security groups, since no active server instance is using them
|
||||
self.servers_client.delete_server(server_id)
|
||||
self.servers_client.wait_for_server_termination(server_id)
|
||||
waiters.wait_for_server_termination(self.servers_client, server_id)
|
||||
|
||||
self.client.delete_security_group(sg['id'])
|
||||
self.client.delete_security_group(sg2['id'])
|
||||
|
||||
@@ -21,6 +21,7 @@ import testtools
|
||||
from tempest.api.compute import base
|
||||
from tempest.common.utils import data_utils
|
||||
from tempest.common.utils.linux import remote_client
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest import test
|
||||
|
||||
@@ -178,7 +179,8 @@ class ServersTestJSON(base.BaseV2ComputeTest):
|
||||
# we're OK.
|
||||
def cleanup_server():
|
||||
self.client.delete_server(server_multi_nics['id'])
|
||||
self.client.wait_for_server_termination(server_multi_nics['id'])
|
||||
waiters.wait_for_server_termination(self.client,
|
||||
server_multi_nics['id'])
|
||||
|
||||
self.addCleanup(cleanup_server)
|
||||
|
||||
@@ -218,7 +220,8 @@ class ServersTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
def cleanup_server():
|
||||
self.client.delete_server(server_multi_nics['id'])
|
||||
self.client.wait_for_server_termination(server_multi_nics['id'])
|
||||
waiters.wait_for_server_termination(self.client,
|
||||
server_multi_nics['id'])
|
||||
|
||||
self.addCleanup(cleanup_server)
|
||||
|
||||
|
||||
@@ -38,14 +38,14 @@ class DeleteServersTestJSON(base.BaseV2ComputeTest):
|
||||
# Delete a server while it's VM state is Building
|
||||
server = self.create_test_server(wait_until='BUILD')
|
||||
self.client.delete_server(server['id'])
|
||||
self.client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.client, server['id'])
|
||||
|
||||
@test.idempotent_id('925fdfb4-5b13-47ea-ac8a-c36ae6fddb05')
|
||||
def test_delete_active_server(self):
|
||||
# Delete a server while it's VM state is Active
|
||||
server = self.create_test_server(wait_until='ACTIVE')
|
||||
self.client.delete_server(server['id'])
|
||||
self.client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.client, server['id'])
|
||||
|
||||
@test.idempotent_id('546d368c-bb6c-4645-979a-83ed16f3a6be')
|
||||
def test_delete_server_while_in_shutoff_state(self):
|
||||
@@ -54,7 +54,7 @@ class DeleteServersTestJSON(base.BaseV2ComputeTest):
|
||||
self.client.stop(server['id'])
|
||||
waiters.wait_for_server_status(self.client, server['id'], 'SHUTOFF')
|
||||
self.client.delete_server(server['id'])
|
||||
self.client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.client, server['id'])
|
||||
|
||||
@test.idempotent_id('943bd6e8-4d7a-4904-be83-7a6cc2d4213b')
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.pause,
|
||||
@@ -65,7 +65,7 @@ class DeleteServersTestJSON(base.BaseV2ComputeTest):
|
||||
self.client.pause_server(server['id'])
|
||||
waiters.wait_for_server_status(self.client, server['id'], 'PAUSED')
|
||||
self.client.delete_server(server['id'])
|
||||
self.client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.client, server['id'])
|
||||
|
||||
@test.idempotent_id('1f82ebd3-8253-4f4e-b93f-de9b7df56d8b')
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.suspend,
|
||||
@@ -76,7 +76,7 @@ class DeleteServersTestJSON(base.BaseV2ComputeTest):
|
||||
self.client.suspend_server(server['id'])
|
||||
waiters.wait_for_server_status(self.client, server['id'], 'SUSPENDED')
|
||||
self.client.delete_server(server['id'])
|
||||
self.client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.client, server['id'])
|
||||
|
||||
@test.idempotent_id('bb0cb402-09dd-4947-b6e5-5e7e1cfa61ad')
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.shelve,
|
||||
@@ -95,7 +95,7 @@ class DeleteServersTestJSON(base.BaseV2ComputeTest):
|
||||
waiters.wait_for_server_status(self.client, server['id'],
|
||||
'SHELVED')
|
||||
self.client.delete_server(server['id'])
|
||||
self.client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.client, server['id'])
|
||||
|
||||
@test.idempotent_id('ab0c38b4-cdd8-49d3-9b92-0cb898723c01')
|
||||
@testtools.skipIf(not CONF.compute_feature_enabled.resize,
|
||||
@@ -107,7 +107,7 @@ class DeleteServersTestJSON(base.BaseV2ComputeTest):
|
||||
waiters.wait_for_server_status(self.client, server['id'],
|
||||
'VERIFY_RESIZE')
|
||||
self.client.delete_server(server['id'])
|
||||
self.client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.client, server['id'])
|
||||
|
||||
@test.idempotent_id('d0f3f0d6-d9b6-4a32-8da4-23015dcab23c')
|
||||
@test.services('volume')
|
||||
@@ -128,7 +128,7 @@ class DeleteServersTestJSON(base.BaseV2ComputeTest):
|
||||
volume['id'], 'in-use')
|
||||
|
||||
self.client.delete_server(server['id'])
|
||||
self.client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.client, server['id'])
|
||||
waiters.wait_for_volume_status(volumes_client,
|
||||
volume['id'], 'available')
|
||||
|
||||
@@ -152,12 +152,13 @@ class DeleteServersAdminTestJSON(base.BaseV2ComputeAdminTest):
|
||||
server = self.non_admin_client.show_server(server['id'])
|
||||
self.assertEqual(server['status'], 'ERROR')
|
||||
self.non_admin_client.delete_server(server['id'])
|
||||
self.servers_client.wait_for_server_termination(server['id'],
|
||||
ignore_error=True)
|
||||
waiters.wait_for_server_termination(self.servers_client,
|
||||
server['id'],
|
||||
ignore_error=True)
|
||||
|
||||
@test.idempotent_id('73177903-6737-4f27-a60c-379e8ae8cf48')
|
||||
def test_admin_delete_servers_of_others(self):
|
||||
# Administrator can delete servers of others
|
||||
server = self.create_test_server(wait_until='ACTIVE')
|
||||
self.admin_client.delete_server(server['id'])
|
||||
self.servers_client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.servers_client, server['id'])
|
||||
|
||||
@@ -17,6 +17,7 @@ from six import moves
|
||||
from tempest_lib import exceptions as lib_exc
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import waiters
|
||||
from tempest import test
|
||||
|
||||
|
||||
@@ -47,8 +48,8 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
# be put into ERROR status on a quick spawn, then delete,
|
||||
# as the compute node expects the instance local status
|
||||
# to be spawning, not deleted. See LP Bug#1061167
|
||||
cls.client.wait_for_server_termination(srv['id'],
|
||||
ignore_error=True)
|
||||
waiters.wait_for_server_termination(cls.client, srv['id'],
|
||||
ignore_error=True)
|
||||
cls.deleted_fixtures.append(srv)
|
||||
|
||||
@test.attr(type=['negative'])
|
||||
|
||||
@@ -171,7 +171,7 @@ class ServersNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
# Rebuild and Reboot a deleted server
|
||||
server = self.create_test_server()
|
||||
self.client.delete_server(server['id'])
|
||||
self.client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.client, server['id'])
|
||||
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
self.client.rebuild,
|
||||
|
||||
@@ -53,7 +53,8 @@ class VolumesV2ActionsTest(base.BaseVolumeTest):
|
||||
def resource_cleanup(cls):
|
||||
# Delete the test instance
|
||||
cls.servers_client.delete_server(cls.server['id'])
|
||||
cls.servers_client.wait_for_server_termination(cls.server['id'])
|
||||
waiters.wait_for_server_termination(cls.servers_client,
|
||||
cls.server['id'])
|
||||
|
||||
super(VolumesV2ActionsTest, cls).resource_cleanup()
|
||||
|
||||
|
||||
@@ -181,8 +181,8 @@ class VolumesV2NegativeTest(base.BaseVolumeTest):
|
||||
def test_attach_volumes_with_nonexistent_volume_id(self):
|
||||
srv_name = data_utils.rand_name('Instance')
|
||||
server = self.create_server(srv_name)
|
||||
self.addCleanup(self.servers_client.wait_for_server_termination,
|
||||
server['id'])
|
||||
self.addCleanup(waiters.wait_for_server_termination,
|
||||
self.servers_client, server['id'])
|
||||
self.addCleanup(self.servers_client.delete_server, server['id'])
|
||||
waiters.wait_for_server_status(self.servers_client, server['id'],
|
||||
'ACTIVE')
|
||||
|
||||
@@ -119,6 +119,7 @@ from tempest_lib import auth
|
||||
from tempest_lib import exceptions as lib_exc
|
||||
import yaml
|
||||
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.services.compute.json import flavors_client
|
||||
from tempest.services.compute.json import floating_ips_client
|
||||
@@ -896,8 +897,8 @@ def destroy_servers(servers):
|
||||
|
||||
# TODO(EmilienM): disassociate floating IP from server and release it.
|
||||
client.servers.delete_server(response['id'])
|
||||
client.servers.wait_for_server_termination(response['id'],
|
||||
ignore_error=True)
|
||||
waiters.wait_for_server_termination(client.servers, response['id'],
|
||||
ignore_error=True)
|
||||
|
||||
|
||||
def create_secgroups(secgroups):
|
||||
|
||||
@@ -15,6 +15,7 @@ import time
|
||||
|
||||
from oslo_log import log as logging
|
||||
from tempest_lib.common.utils import misc as misc_utils
|
||||
from tempest_lib import exceptions as lib_exc
|
||||
|
||||
from tempest import config
|
||||
from tempest import exceptions
|
||||
@@ -96,6 +97,25 @@ def wait_for_server_status(client, server_id, status, ready_wait=True,
|
||||
old_task_state = task_state
|
||||
|
||||
|
||||
def wait_for_server_termination(client, server_id, ignore_error=False):
|
||||
"""Waits for server to reach termination."""
|
||||
start_time = int(time.time())
|
||||
while True:
|
||||
try:
|
||||
body = client.show_server(server_id)
|
||||
except lib_exc.NotFound:
|
||||
return
|
||||
|
||||
server_status = body['status']
|
||||
if server_status == 'ERROR' and not ignore_error:
|
||||
raise exceptions.BuildErrorException(server_id=server_id)
|
||||
|
||||
if int(time.time()) - start_time >= client.build_timeout:
|
||||
raise exceptions.TimeoutException
|
||||
|
||||
time.sleep(client.build_interval)
|
||||
|
||||
|
||||
def wait_for_image_status(client, image_id, status):
|
||||
"""Waits for an image to reach a given status.
|
||||
|
||||
|
||||
@@ -96,10 +96,11 @@ class ScenarioTest(tempest.test.BaseTestCase):
|
||||
|
||||
def addCleanup_with_wait(self, waiter_callable, thing_id, thing_id_param,
|
||||
cleanup_callable, cleanup_args=None,
|
||||
cleanup_kwargs=None):
|
||||
cleanup_kwargs=None, waiter_client=None):
|
||||
"""Adds wait for async resource deletion at the end of cleanups
|
||||
|
||||
@param waiter_callable: callable to wait for the resource to delete
|
||||
with the following waiter_client if specified.
|
||||
@param thing_id: the id of the resource to be cleaned-up
|
||||
@param thing_id_param: the name of the id param in the waiter
|
||||
@param cleanup_callable: method to load pass to self.addCleanup with
|
||||
@@ -115,6 +116,8 @@ class ScenarioTest(tempest.test.BaseTestCase):
|
||||
'waiter_callable': waiter_callable,
|
||||
thing_id_param: thing_id
|
||||
}
|
||||
if waiter_client:
|
||||
wait_dict['client'] = waiter_client
|
||||
self.cleanup_waits.append(wait_dict)
|
||||
|
||||
def _wait_for_cleanups(self):
|
||||
@@ -172,13 +175,15 @@ class ScenarioTest(tempest.test.BaseTestCase):
|
||||
server = self.servers_client.create_server(name, image, flavor,
|
||||
**create_kwargs)
|
||||
if wait_on_delete:
|
||||
self.addCleanup(self.servers_client.wait_for_server_termination,
|
||||
self.addCleanup(waiters.wait_for_server_termination,
|
||||
self.servers_client,
|
||||
server['id'])
|
||||
self.addCleanup_with_wait(
|
||||
waiter_callable=self.servers_client.wait_for_server_termination,
|
||||
waiter_callable=waiters.wait_for_server_termination,
|
||||
thing_id=server['id'], thing_id_param='server_id',
|
||||
cleanup_callable=self.delete_wrapper,
|
||||
cleanup_args=[self.servers_client.delete_server, server['id']])
|
||||
cleanup_args=[self.servers_client.delete_server, server['id']],
|
||||
waiter_client=self.servers_client)
|
||||
if wait_on_boot:
|
||||
waiters.wait_for_server_status(self.servers_client,
|
||||
server_id=server['id'],
|
||||
|
||||
@@ -109,8 +109,8 @@ class TestLargeOpsScenario(manager.ScenarioTest):
|
||||
for server in self.servers:
|
||||
# after deleting all servers - wait for all servers to clear
|
||||
# before cleanup continues
|
||||
self.addCleanupClass(self.servers_client.
|
||||
wait_for_server_termination,
|
||||
self.addCleanupClass(waiters.wait_for_server_termination,
|
||||
self.servers_client,
|
||||
server['id'])
|
||||
for server in self.servers:
|
||||
self.addCleanupClass(self.servers_client.delete_server,
|
||||
|
||||
@@ -20,6 +20,7 @@ from oslo_log import log as logging
|
||||
import testtools
|
||||
|
||||
from tempest.common.utils import data_utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest import exceptions
|
||||
from tempest.scenario import manager
|
||||
@@ -643,7 +644,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
self.assertEqual(self.port_id, port_list[0]['id'])
|
||||
# Delete the server.
|
||||
self.servers_client.delete_server(server['id'])
|
||||
self.servers_client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.servers_client, server['id'])
|
||||
# Assert the port still exists on the network but is unbound from
|
||||
# the deleted server.
|
||||
port = self.network_client.show_port(self.port_id)['port']
|
||||
|
||||
@@ -122,7 +122,7 @@ class TestVolumeBootPattern(manager.ScenarioTest):
|
||||
|
||||
def _delete_server(self, server):
|
||||
self.servers_client.delete_server(server['id'])
|
||||
self.servers_client.wait_for_server_termination(server['id'])
|
||||
waiters.wait_for_server_termination(self.servers_client, server['id'])
|
||||
|
||||
def _check_content_of_written_file(self, ssh_client, expected):
|
||||
actual = self._get_content(ssh_client)
|
||||
|
||||
@@ -14,15 +14,11 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import time
|
||||
|
||||
from oslo_serialization import jsonutils as json
|
||||
from six.moves.urllib import parse as urllib
|
||||
from tempest_lib import exceptions as lib_exc
|
||||
|
||||
from tempest.api_schema.response.compute.v2_1 import servers as schema
|
||||
from tempest.common import service_client
|
||||
from tempest import exceptions
|
||||
|
||||
|
||||
class ServersClient(service_client.ServiceClient):
|
||||
@@ -165,24 +161,6 @@ class ServersClient(service_client.ServiceClient):
|
||||
self.validate_response(_schema, resp, body)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def wait_for_server_termination(self, server_id, ignore_error=False):
|
||||
"""Waits for server to reach termination."""
|
||||
start_time = int(time.time())
|
||||
while True:
|
||||
try:
|
||||
body = self.show_server(server_id)
|
||||
except lib_exc.NotFound:
|
||||
return
|
||||
|
||||
server_status = body['status']
|
||||
if server_status == 'ERROR' and not ignore_error:
|
||||
raise exceptions.BuildErrorException(server_id=server_id)
|
||||
|
||||
if int(time.time()) - start_time >= self.build_timeout:
|
||||
raise exceptions.TimeoutException
|
||||
|
||||
time.sleep(self.build_interval)
|
||||
|
||||
def list_addresses(self, server_id):
|
||||
"""Lists all addresses for a server."""
|
||||
resp, body = self.get("servers/%s/ips" % server_id)
|
||||
|
||||
@@ -37,5 +37,6 @@ class ServerCreateDestroyTest(stressaction.StressAction):
|
||||
self.logger.info("created %s" % server_id)
|
||||
self.logger.info("deleting %s" % name)
|
||||
self.manager.servers_client.delete_server(server_id)
|
||||
self.manager.servers_client.wait_for_server_termination(server_id)
|
||||
waiters.wait_for_server_termination(self.manager.servers_client,
|
||||
server_id)
|
||||
self.logger.info("deleted %s" % server_id)
|
||||
|
||||
@@ -86,7 +86,8 @@ class FloatingStress(stressaction.StressAction):
|
||||
def _destroy_vm(self):
|
||||
self.logger.info("deleting %s" % self.server_id)
|
||||
self.manager.servers_client.delete_server(self.server_id)
|
||||
self.manager.servers_client.wait_for_server_termination(self.server_id)
|
||||
waiters.wait_for_server_termination(self.manager.servers_client,
|
||||
self.server_id)
|
||||
self.logger.info("deleted %s" % self.server_id)
|
||||
|
||||
def _create_sec_group(self):
|
||||
|
||||
@@ -59,7 +59,8 @@ class VolumeAttachDeleteTest(stressaction.StressAction):
|
||||
# Step 4: delete vm
|
||||
self.logger.info("deleting vm: %s" % vm_name)
|
||||
self.manager.servers_client.delete_server(server_id)
|
||||
self.manager.servers_client.wait_for_server_termination(server_id)
|
||||
waiters.wait_for_server_termination(self.manager.servers_client,
|
||||
server_id)
|
||||
self.logger.info("deleted vm: %s" % server_id)
|
||||
|
||||
# Step 5: delete volume
|
||||
|
||||
@@ -48,7 +48,8 @@ class VolumeVerifyStress(stressaction.StressAction):
|
||||
def _destroy_vm(self):
|
||||
self.logger.info("deleting server: %s" % self.server_id)
|
||||
self.manager.servers_client.delete_server(self.server_id)
|
||||
self.manager.servers_client.wait_for_server_termination(self.server_id)
|
||||
waiters.wait_for_server_termination(self.manager.servers_client,
|
||||
self.server_id)
|
||||
self.logger.info("deleted server: %s" % self.server_id)
|
||||
|
||||
def _create_sec_group(self):
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
from oslo_log import log as logging
|
||||
|
||||
from tempest import clients
|
||||
from tempest.common import waiters
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
@@ -34,7 +35,8 @@ def cleanup():
|
||||
|
||||
for s in body['servers']:
|
||||
try:
|
||||
admin_manager.servers_client.wait_for_server_termination(s['id'])
|
||||
waiters.wait_for_server_termination(admin_manager.servers_client,
|
||||
s['id'])
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user