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 shutoff_server = _client.shutoff_server
activate_server = _client.activate_server activate_server = _client.activate_server
ensure_server_status = _client.ensure_server_status ensure_server_status = _client.ensure_server_status
live_migrate_server = _client.live_migrate_server
migrate_server = _client.migrate_server migrate_server = _client.migrate_server
confirm_resize = _client.confirm_resize confirm_resize = _client.confirm_resize
reboot_server = _client.reboot_server reboot_server = _client.reboot_server

View File

@ -150,6 +150,22 @@ def migrate_server(server: typing.Optional[ServerType] = None,
info=params) 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, def confirm_resize(server: typing.Optional[ServerType] = None,
server_id: typing.Optional[str] = None, server_id: typing.Optional[str] = None,
client: NovaClientType = None, **params): client: NovaClientType = None, **params):

View File

@ -77,19 +77,20 @@ class MigrateServerStack(stacks.CirrosServerStackFixture):
class MigrateServerTest(testtools.TestCase): class MigrateServerTest(testtools.TestCase):
stack = tobiko.required_setup_fixture(MigrateServerStack) 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 """Tests cold migration actually changes hypervisor
""" """
server = self.setup_server() server = self.setup_server()
initial_hypervisor = nova.get_server_hypervisor(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) final_hypervisor = nova.get_server_hypervisor(server)
self.assertNotEqual(initial_hypervisor, final_hypervisor) 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 """Tests cold migration actually ends on target hypervisor
""" """
server = self.setup_server() server = self.setup_server()
@ -99,21 +100,36 @@ class MigrateServerTest(testtools.TestCase):
target_hypervisor = hypervisor.hypervisor_hostname target_hypervisor = hypervisor.hypervisor_hostname
break break
else: else:
target_hypervisor = None
self.skipTest("Cannot find a valid hypervisor host to migrate " self.skipTest("Cannot find a valid hypervisor host to migrate "
"server to") "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) final_hypervisor = nova.get_server_hypervisor(server)
self.assertEqual(target_hypervisor, final_hypervisor) 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): def setup_server(self):
server = self.stack.ensure_server_status('ACTIVE') server = self.stack.ensure_server_status('ACTIVE')
self.assertEqual('ACTIVE', server.status) self.assertEqual('ACTIVE', server.status)
return server return server
def migrate_server(self, server, **params): def migrate_server(self, server, live=False, **params):
self.assertEqual('ACTIVE', server.status) self.assertEqual('ACTIVE', server.status)
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) nova.migrate_server(server, **params)
server = nova.wait_for_server_status(server, 'VERIFY_RESIZE') server = nova.wait_for_server_status(server, 'VERIFY_RESIZE')
@ -121,8 +137,13 @@ class MigrateServerTest(testtools.TestCase):
nova.confirm_resize(server) nova.confirm_resize(server)
server = nova.wait_for_server_status( server = nova.wait_for_server_status(
server, 'ACTIVE', transient_status={'VERIFY_RESIZE'}) server, 'ACTIVE', transient_status=['VERIFY_RESIZE'])
self.assertEqual('ACTIVE', server.status) self.assertEqual('ACTIVE', server.status)
ping.ping_until_received(self.stack.ip_address).assert_replied() # 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 return server