Restore "Add new scenario test cases for live migration""

This reverts commit a655a71c7d.

Change-Id: Iac2ee8b42366ba9ff67107c9e5c3b7ab2c86f6e9
This commit is contained in:
Federico Ressi 2021-05-20 12:01:29 +02:00
parent d2bbd9395c
commit 3b6283d233
3 changed files with 53 additions and 15 deletions

View File

@ -41,6 +41,7 @@ WaitForServerStatusTimeout = _client.WaitForServerStatusTimeout
shutoff_server = _client.shutoff_server
activate_server = _client.activate_server
ensure_server_status = _client.ensure_server_status
live_migrate_server = _client.live_migrate_server
migrate_server = _client.migrate_server
confirm_resize = _client.confirm_resize
reboot_server = _client.reboot_server

View File

@ -150,6 +150,22 @@ def migrate_server(server: typing.Optional[ServerType] = None,
info=params)
def live_migrate_server(server: typing.Optional[ServerType] = None,
server_id: typing.Optional[str] = None,
host: typing.Optional[str] = None,
block_migration: typing.Union[str, bool] = True,
disk_over_commit: bool = False,
client: NovaClientType = None,
**params):
server_id = get_server_id(server=server, server_id=server_id)
LOG.debug(f"Start server live migration (server_id='{server_id}', "
f"host={host}, block_migration={block_migration}, "
f"disk_over_commit={disk_over_commit}, info={params})")
return nova_client(client).servers.live_migrate(
server=server_id, host=host, block_migration=block_migration,
disk_over_commit=disk_over_commit, **params)
def confirm_resize(server: typing.Optional[ServerType] = None,
server_id: typing.Optional[str] = None,
client: NovaClientType = None, **params):

View File

@ -77,19 +77,20 @@ class MigrateServerStack(stacks.CirrosServerStackFixture):
class MigrateServerTest(testtools.TestCase):
stack = tobiko.required_setup_fixture(MigrateServerStack)
peer_stack = tobiko.required_setup_fixture(stacks.CirrosServerStackFixture)
def test_migrate_server(self):
def test_migrate_server(self, live=False):
"""Tests cold migration actually changes hypervisor
"""
server = self.setup_server()
initial_hypervisor = nova.get_server_hypervisor(server)
server = self.migrate_server(server)
server = self.migrate_server(server, live=live)
final_hypervisor = nova.get_server_hypervisor(server)
self.assertNotEqual(initial_hypervisor, final_hypervisor)
def test_migrate_server_with_host(self):
def test_migrate_server_with_host(self, live=False):
"""Tests cold migration actually ends on target hypervisor
"""
server = self.setup_server()
@ -99,30 +100,50 @@ class MigrateServerTest(testtools.TestCase):
target_hypervisor = hypervisor.hypervisor_hostname
break
else:
target_hypervisor = None
self.skipTest("Cannot find a valid hypervisor host to migrate "
"server to")
server = self.migrate_server(server=server, host=target_hypervisor)
server = self.migrate_server(server=server, host=target_hypervisor,
live=live)
final_hypervisor = nova.get_server_hypervisor(server)
self.assertEqual(target_hypervisor, final_hypervisor)
def test_live_migrate_server(self):
self.test_migrate_server(live=True)
@tobiko.skip("Expected to create problems on compute nodes")
def test_live_migrate_server_with_host(self):
self.test_migrate_server_with_host(live=True)
def setup_server(self):
server = self.stack.ensure_server_status('ACTIVE')
self.assertEqual('ACTIVE', server.status)
return server
def migrate_server(self, server, **params):
self.assertEqual('ACTIVE', server.status)
nova.migrate_server(server, **params)
server = nova.wait_for_server_status(server, 'VERIFY_RESIZE')
self.assertEqual('VERIFY_RESIZE', server.status)
nova.confirm_resize(server)
server = nova.wait_for_server_status(
server, 'ACTIVE', transient_status={'VERIFY_RESIZE'})
def migrate_server(self, server, live=False, **params):
self.assertEqual('ACTIVE', server.status)
ping.ping_until_received(self.stack.ip_address).assert_replied()
if live:
nova.live_migrate_server(server, **params)
server = nova.wait_for_server_status(
server, 'ACTIVE', transient_status=['MIGRATING'])
else:
nova.migrate_server(server, **params)
server = nova.wait_for_server_status(server, 'VERIFY_RESIZE')
self.assertEqual('VERIFY_RESIZE', server.status)
nova.confirm_resize(server)
server = nova.wait_for_server_status(
server, 'ACTIVE', transient_status=['VERIFY_RESIZE'])
self.assertEqual('ACTIVE', server.status)
# wait until all VM fixed IPs are reachable
ping.assert_reachable_hosts(self.stack.list_fixed_ips(),
timeout=900.,
ssh_client=self.peer_stack.ssh_client)
# check floating IP is reachable
ping.assert_reachable_hosts([self.stack.floating_ip_address])
return server