Add functional for live migrate delete

Related-Bug: #1714237
Change-Id: I3bf0032f8cecf098fd941e5e5b41c9ff3d8336e4
This commit is contained in:
Lajos Katona 2017-08-28 14:10:46 +02:00 committed by Balazs Gibizer
parent 98fe520d96
commit 143fe79c9e
2 changed files with 80 additions and 2 deletions

View File

@ -454,3 +454,7 @@ class TestOpenStackClient(object):
return self.api_post(
'/servers/%s/migrations/%s/action' % (server_id, migration_id),
{'force_complete': None})
def delete_migration(self, server_id, migration_id):
return self.api_delete(
'/servers/%s/migrations/%s' % (server_id, migration_id))

View File

@ -2290,15 +2290,24 @@ class ServerMovingTests(ProviderUsageBaseTestCase):
def _mock_live_migration(self, context, instance, dest,
post_method, recover_method,
block_migration=False, migrate_data=None):
self._abort_migration = False
self._migrating = True
while self._migrating:
time.sleep(0.5)
post_method(context, instance, dest, block_migration,
migrate_data)
if self._abort_migration:
recover_method(context, instance, dest)
else:
post_method(context, instance, dest, block_migration,
migrate_data)
def _mock_force_complete(self, instance):
self._migrating = False
def _mock_live_migration_abort(self, instance):
self._abort_migration = True
self._migrating = False
@mock.patch('nova.virt.fake.FakeDriver.live_migration')
@mock.patch('nova.virt.fake.FakeDriver.live_migration_force_complete')
def test_live_migrate_force_complete(self, mock_force_complete,
@ -2351,6 +2360,71 @@ class ServerMovingTests(ProviderUsageBaseTestCase):
self._delete_and_check_allocations(
server, source_rp_uuid, dest_rp_uuid)
@mock.patch('nova.virt.fake.FakeDriver.live_migration')
@mock.patch('nova.virt.fake.FakeDriver.live_migration_abort')
def test_live_migrate_delete(self, mock_live_migration_abort,
mock_live_migration):
mock_live_migration.side_effect = self._mock_live_migration
mock_live_migration_abort.side_effect = self._mock_live_migration_abort
source_hostname = self.compute1.host
dest_hostname = self.compute2.host
source_rp_uuid = self._get_provider_uuid_by_host(source_hostname)
dest_rp_uuid = self._get_provider_uuid_by_host(dest_hostname)
server = self._boot_and_check_allocations(
self.flavor1, source_hostname)
post = {
'os-migrateLive': {
'host': dest_hostname,
'block_migration': True,
}
}
self.api.post_server_action(server['id'], post)
migration = self._wait_for_migration_status(server, 'running')
self.api.delete_migration(server['id'], migration['id'])
self._wait_for_server_parameter(self.api, server,
{'OS-EXT-SRV-ATTR:host': source_hostname,
'status': 'ACTIVE'})
self._run_periodics()
allocations = self._get_allocations_by_server_uuid(server['id'])
# Note(lajos katona): After solving bug #1714237 there should be
# only 1 allocation:
# self.assertEqual(1, len(allocations))
self.assertEqual(2, len(allocations))
# Note(lajos katona): After solving bug #1714237 the destination
# resource provider should not be among the allocations:
# self.assertNotIn(dest_rp_uuid, allocations)
source_usages = self._get_provider_usages(source_rp_uuid)
self.assertFlavorMatchesAllocation(self.flavor1, source_usages)
source_allocation = allocations[source_rp_uuid]['resources']
self.assertFlavorMatchesAllocation(self.flavor1, source_allocation)
dest_usages = self._get_provider_usages(dest_rp_uuid)
# Note(lajos katona): After solving bug #1714237 on the destination
# there should be zero usage:
# self.assertFlavorMatchesAllocation(
# {'ram': 0, 'disk': 0, 'vcpus': 0}, dest_usages)
self.assertFlavorMatchesAllocation(self.flavor1, dest_usages)
dest_allocation = allocations[dest_rp_uuid]['resources']
# Note(lajos katona): After solving bug #1714237 on the destination
# there should be zero allocation:
# self.assertFlavorMatchesAllocation(
# {'ram': 0, 'disk': 0, 'vcpus': 0}, dest_allocation)
self.assertFlavorMatchesAllocation(self.flavor1, dest_allocation)
self._delete_and_check_allocations(
server, source_rp_uuid, dest_rp_uuid)
class ServerRescheduleTests(ProviderUsageBaseTestCase):
"""Tests server create scenarios which trigger a reschedule during