Merge "Add negative test for live migration"

This commit is contained in:
Jenkins 2017-07-11 06:17:39 +00:00 committed by Gerrit Code Review
commit da11e52416
3 changed files with 47 additions and 37 deletions

View File

@ -29,13 +29,13 @@ CONF = config.CONF
LOG = logging.getLogger(__name__)
class LiveBlockMigrationTestJSON(base.BaseV2ComputeAdminTest):
class LiveMigrationTest(base.BaseV2ComputeAdminTest):
max_microversion = '2.24'
block_migration = None
@classmethod
def skip_checks(cls):
super(LiveBlockMigrationTestJSON, cls).skip_checks()
super(LiveMigrationTest, cls).skip_checks()
if not CONF.compute_feature_enabled.live_migration:
skip_msg = ("%s skipped as live-migration is "
@ -47,26 +47,10 @@ class LiveBlockMigrationTestJSON(base.BaseV2ComputeAdminTest):
@classmethod
def setup_clients(cls):
super(LiveBlockMigrationTestJSON, cls).setup_clients()
super(LiveMigrationTest, cls).setup_clients()
cls.admin_hosts_client = cls.os_admin.hosts_client
cls.admin_migration_client = cls.os_admin.migrations_client
@classmethod
def _get_compute_hostnames(cls):
body = cls.admin_hosts_client.list_hosts()['hosts']
return [
host_record['host_name']
for host_record in body
if host_record['service'] == 'compute'
]
def _get_server_details(self, server_id):
body = self.admin_servers_client.show_server(server_id)['server']
return body
def _get_host_for_server(self, server_id):
return self._get_server_details(server_id)['OS-EXT-SRV-ATTR:host']
def _migrate_server_to(self, server_id, dest_host, volume_backed=False):
kwargs = dict()
block_migration = getattr(self, 'block_migration', None)
@ -79,11 +63,6 @@ class LiveBlockMigrationTestJSON(base.BaseV2ComputeAdminTest):
server_id, host=dest_host, block_migration=block_migration,
**kwargs)
def _get_host_other_than(self, host):
for target_host in self._get_compute_hostnames():
if host != target_host:
return target_host
def _live_migrate(self, server_id, target_host, state,
volume_backed=False):
self._migrate_server_to(server_id, target_host, volume_backed)
@ -97,7 +76,7 @@ class LiveBlockMigrationTestJSON(base.BaseV2ComputeAdminTest):
if (live_migration['instance_uuid'] == server_id):
msg += "\n%s" % live_migration
msg += "]"
self.assertEqual(target_host, self._get_host_for_server(server_id),
self.assertEqual(target_host, self.get_host_for_server(server_id),
msg)
def _test_live_migration(self, state='ACTIVE', volume_backed=False):
@ -114,8 +93,8 @@ class LiveBlockMigrationTestJSON(base.BaseV2ComputeAdminTest):
# Live migrate an instance to another host
server_id = self.create_test_server(wait_until="ACTIVE",
volume_backed=volume_backed)['id']
source_host = self._get_host_for_server(server_id)
destination_host = self._get_host_other_than(source_host)
source_host = self.get_host_for_server(server_id)
destination_host = self.get_host_other_than(server_id)
if state == 'PAUSED':
self.admin_servers_client.pause_server(server_id)
@ -158,8 +137,7 @@ class LiveBlockMigrationTestJSON(base.BaseV2ComputeAdminTest):
def test_iscsi_volume(self):
server = self.create_test_server(wait_until="ACTIVE")
server_id = server['id']
actual_host = self._get_host_for_server(server_id)
target_host = self._get_host_other_than(actual_host)
target_host = self.get_host_other_than(server_id)
volume = self.create_volume()
@ -174,11 +152,11 @@ class LiveBlockMigrationTestJSON(base.BaseV2ComputeAdminTest):
server = self.admin_servers_client.show_server(server_id)['server']
volume_id2 = server["os-extended-volumes:volumes_attached"][0]["id"]
self.assertEqual(target_host, self._get_host_for_server(server_id))
self.assertEqual(target_host, self.get_host_for_server(server_id))
self.assertEqual(volume_id1, volume_id2)
class LiveBlockMigrationRemoteConsolesV26TestJson(LiveBlockMigrationTestJSON):
class LiveMigrationRemoteConsolesV26Test(LiveMigrationTest):
min_microversion = '2.6'
max_microversion = 'latest'
@ -201,8 +179,8 @@ class LiveBlockMigrationRemoteConsolesV26TestJson(LiveBlockMigrationTestJSON):
hints = {'different_host': server01_id}
server02_id = self.create_test_server(scheduler_hints=hints,
wait_until='ACTIVE')['id']
host01_id = self._get_host_for_server(server01_id)
host02_id = self._get_host_for_server(server02_id)
host01_id = self.get_host_for_server(server01_id)
host02_id = self.get_host_for_server(server02_id)
self.assertNotEqual(host01_id, host02_id)
# At this step we have 2 instances on different hosts, both with
@ -216,7 +194,7 @@ class LiveBlockMigrationRemoteConsolesV26TestJson(LiveBlockMigrationTestJSON):
self._migrate_server_to(server01_id, host02_id)
waiters.wait_for_server_status(self.servers_client,
server01_id, 'ACTIVE')
self.assertEqual(host02_id, self._get_host_for_server(server01_id))
self.assertEqual(host02_id, self.get_host_for_server(server01_id))
self._verify_console_interaction(server01_id)
# At this point, both instances have a valid serial console
# connection, which means the ports got updated.
@ -252,7 +230,7 @@ class LiveBlockMigrationRemoteConsolesV26TestJson(LiveBlockMigrationTestJSON):
self.assertIn(data, console_output)
class LiveAutoBlockMigrationV225TestJSON(LiveBlockMigrationTestJSON):
class LiveAutoBlockMigrationV225Test(LiveMigrationTest):
min_microversion = '2.25'
max_microversion = 'latest'
block_migration = 'auto'

View File

@ -23,10 +23,10 @@ from tempest.lib import exceptions as lib_exc
CONF = config.CONF
class LiveBlockMigrationNegativeTestJSON(base.BaseV2ComputeAdminTest):
class LiveMigrationNegativeTest(base.BaseV2ComputeAdminTest):
@classmethod
def skip_checks(cls):
super(LiveBlockMigrationNegativeTestJSON, cls).skip_checks()
super(LiveMigrationNegativeTest, cls).skip_checks()
if not CONF.compute_feature_enabled.live_migration:
raise cls.skipException("Live migration is not enabled")
@ -47,3 +47,17 @@ class LiveBlockMigrationNegativeTestJSON(base.BaseV2ComputeAdminTest):
server['id'], target_host)
waiters.wait_for_server_status(self.servers_client, server['id'],
'ACTIVE')
@decorators.attr(type=['negative'])
@decorators.idempotent_id('6e2f94f5-2ee8-4830-bef5-5bc95bb0795b')
def test_live_block_migration_suspended(self):
server = self.create_test_server(wait_until="ACTIVE")
self.admin_servers_client.suspend_server(server['id'])
waiters.wait_for_server_status(self.servers_client,
server['id'], 'SUSPENDED')
destination_host = self.get_host_other_than(server['id'])
self.assertRaises(lib_exc.Conflict, self._migrate_server_to,
server['id'], destination_host)

View File

@ -487,3 +487,21 @@ class BaseV2ComputeAdminTest(BaseV2ComputeTest):
self.addCleanup(client.wait_for_resource_deletion, flavor['id'])
self.addCleanup(client.delete_flavor, flavor['id'])
return flavor
def get_host_for_server(self, server_id):
server_details = self.admin_servers_client.show_server(server_id)
return server_details['server']['OS-EXT-SRV-ATTR:host']
def get_host_other_than(self, server_id):
source_host = self.get_host_for_server(server_id)
list_hosts_resp = self.os_admin.hosts_client.list_hosts()['hosts']
hosts = [
host_record['host_name']
for host_record in list_hosts_resp
if host_record['service'] == 'compute'
]
for target_host in hosts:
if source_host != target_host:
return target_host