Merge "tests: Add helpers for rebuild, cold migrate, and shelve/unshelve"

This commit is contained in:
Zuul 2020-08-26 12:16:01 +00:00 committed by Gerrit Code Review
commit 8ca9b7254b
3 changed files with 36 additions and 30 deletions

View File

@ -401,6 +401,20 @@ class InstanceHelperMixin:
fake_notifier.wait_for_versioned_notifications('instance.reboot.end')
return self._wait_for_state_change(server, expected_state)
def _rebuild_server(self, server, image_uuid, expected_state='ACTIVE'):
"""Rebuild a server."""
self.api.post_server_action(
server['id'], {'rebuild': {'imageRef': image_uuid}},
)
fake_notifier.wait_for_versioned_notifications('instance.rebuild.end')
return self._wait_for_state_change(server, expected_state)
def _migrate_server(self, server, host=None):
"""Cold migrate a server."""
body = {'host': host} if host else None
self.api.post_server_action(server['id'], {'migrate': body})
return self._wait_for_state_change(server, 'VERIFY_RESIZE')
def _resize_server(self, server, flavor_id):
self.api.post_server_action(
server['id'], {'resize': {'flavorRef': flavor_id}})
@ -429,14 +443,18 @@ class InstanceHelperMixin:
'instance.resize_revert.end')
return server
def _live_migrate(self, server, migration_expected_state,
server_expected_state='ACTIVE'):
def _live_migrate(
self, server, migration_expected_state='completed',
server_expected_state='ACTIVE',
):
self.api.post_server_action(
server['id'],
{'os-migrateLive': {'host': None, 'block_migration': 'auto'}})
self._wait_for_state_change(server, server_expected_state)
self._wait_for_migration_status(server, [migration_expected_state])
_live_migrate_server = _live_migrate
def _suspend_server(self, server, expected_state='SUSPENDED'):
"""Suspend a server."""
self.api.post_server_action(server['id'], {'suspend': {}})
@ -449,6 +467,16 @@ class InstanceHelperMixin:
fake_notifier.wait_for_versioned_notifications('instance.resume.end')
return self._wait_for_state_change(server, expected_state)
def _shelve_server(self, server, expected_state='SHELVED_OFFLOADED'):
"""Shelve a server."""
self.api.post_server_action(server['id'], {'shelve': {}})
return self._wait_for_state_change(server, expected_state)
def _unshelve_server(self, server, expected_state='ACTIVE'):
"""Unshelve a server."""
self.api.post_server_action(server['id'], {'unshelve': {}})
return self._wait_for_state_change(server, expected_state)
class PlacementHelperMixin:
"""A helper mixin for interacting with placement."""

View File

@ -1157,13 +1157,6 @@ class NUMAServersRebuildTests(NUMAServersTestBase):
server = self.api.post_server({'server': basic_server})
return self._wait_for_state_change(server, 'ACTIVE')
def _rebuild_server(self, active_server, image_ref):
args = {"rebuild": {"imageRef": image_ref}}
self.api.api_post(
'servers/%s/action' % active_server['id'], args)
fake_notifier.wait_for_versioned_notifications('instance.rebuild.end')
return self._wait_for_state_change(active_server, 'ACTIVE')
def test_rebuild_server_with_numa(self):
"""Create a NUMA instance and ensure it can be rebuilt.
"""

View File

@ -20,8 +20,8 @@ from nova.tests.unit import policy_fixture
class RegressionTest1835822(
test.TestCase, integrated_helpers.InstanceHelperMixin):
# ---------------------------- setup ----------------------------
test.TestCase, integrated_helpers.InstanceHelperMixin,
):
def setUp(self):
super(RegressionTest1835822, self).setUp()
@ -44,7 +44,6 @@ class RegressionTest1835822(
fake_notifier.stub_notifier(self)
self.addCleanup(fake_notifier.reset)
# ---------------------------- helpers ----------------------------
def _create_active_server(self, server_args=None):
basic_server = {
'flavorRef': 1,
@ -59,22 +58,6 @@ class RegressionTest1835822(
server = self.api.post_server({'server': basic_server})
return self._wait_for_state_change(server, 'ACTIVE')
def _rebuild_server(self, active_server):
args = {"rebuild": {"imageRef": self.image_ref_1}}
self.api.api_post('servers/%s/action' %
active_server['id'], args)
fake_notifier.wait_for_versioned_notifications('instance.rebuild.end')
return self._wait_for_state_change(active_server, 'ACTIVE')
def _shelve_server(self, active_server):
self.api.post_server_action(active_server['id'], {'shelve': {}})
return self._wait_for_state_change(active_server, 'SHELVED_OFFLOADED')
def _unshelve_server(self, shelved_server):
self.api.post_server_action(shelved_server['id'], {'unshelve': {}})
return self._wait_for_state_change(shelved_server, 'ACTIVE')
# ---------------------------- tests ----------------------------
def test_create_server_with_config_drive(self):
"""Verify that we can create a server with a config drive.
"""
@ -149,13 +132,15 @@ class RegressionTest1835822(
# this server was created with force_config_drive=true
# so assert now that force_config_drive is false it does
# not override the value it was booted with.
with_config_drive = self._rebuild_server(with_config_drive)
with_config_drive = self._rebuild_server(
with_config_drive, self.image_ref_1)
self.assertTrue(with_config_drive['config_drive'])
# this server was booted with force_config_drive=False so
# assert that it's config drive setting is not overridden
self.flags(force_config_drive=True)
without_config_drive = self._rebuild_server(without_config_drive)
without_config_drive = self._rebuild_server(
without_config_drive, self.image_ref_1)
self.assertEqual('', without_config_drive['config_drive'])
def test_create_server_config_drive_shelve_unshelve_conf_change(self):