Skip to content

Commit 873ac49

Browse files
Add functional confirm_migration_error test
This test checks if allocations have been successfully cleaned up upon the driver failing during "confirm_migration". Change-Id: I9d6478f492351b58aa87b8f56e907ee633d6d1c6 Related-bug: #1821594
1 parent 56fef7c commit 873ac49

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

nova/tests/functional/test_servers.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2497,6 +2497,59 @@ def _resize_and_check_allocations(self, server, old_flavor, new_flavor,
24972497
new_flavor=new_flavor, source_rp_uuid=source_rp_uuid,
24982498
dest_rp_uuid=dest_rp_uuid)
24992499

2500+
def test_migration_confirm_resize_error(self):
2501+
source_hostname = self.compute1.host
2502+
dest_hostname = self.compute2.host
2503+
2504+
source_rp_uuid = self._get_provider_uuid_by_host(source_hostname)
2505+
dest_rp_uuid = self._get_provider_uuid_by_host(dest_hostname)
2506+
2507+
server = self._boot_and_check_allocations(self.flavor1,
2508+
source_hostname)
2509+
2510+
self._move_and_check_allocations(
2511+
server, request={'migrate': None}, old_flavor=self.flavor1,
2512+
new_flavor=self.flavor1, source_rp_uuid=source_rp_uuid,
2513+
dest_rp_uuid=dest_rp_uuid)
2514+
2515+
# Mock failure
2516+
def fake_confirm_migration(context, migration, instance, network_info):
2517+
raise exception.MigrationPreCheckError(
2518+
reason='test_migration_confirm_resize_error')
2519+
2520+
with mock.patch('nova.virt.fake.FakeDriver.'
2521+
'confirm_migration',
2522+
side_effect=fake_confirm_migration):
2523+
2524+
# Confirm the migration/resize and check the usages
2525+
post = {'confirmResize': None}
2526+
self.api.post_server_action(
2527+
server['id'], post, check_response_status=[204])
2528+
server = self._wait_for_state_change(self.api, server, 'ERROR')
2529+
2530+
# After confirming and error, we should have an allocation only on the
2531+
# destination host
2532+
2533+
self.assertFlavorMatchesUsage(dest_rp_uuid, self.flavor1)
2534+
self.assertRequestMatchesUsage({'VCPU': 0,
2535+
'MEMORY_MB': 0,
2536+
'DISK_GB': 0}, source_rp_uuid)
2537+
self.assertFlavorMatchesAllocation(self.flavor1, server['id'],
2538+
dest_rp_uuid)
2539+
2540+
self._run_periodics()
2541+
2542+
# Check we're still accurate after running the periodics
2543+
2544+
self.assertFlavorMatchesUsage(dest_rp_uuid, self.flavor1)
2545+
self.assertRequestMatchesUsage({'VCPU': 0,
2546+
'MEMORY_MB': 0,
2547+
'DISK_GB': 0}, source_rp_uuid)
2548+
self.assertFlavorMatchesAllocation(self.flavor1, server['id'],
2549+
dest_rp_uuid)
2550+
2551+
self._delete_and_check_allocations(server)
2552+
25002553
def _test_resize_revert(self, dest_hostname):
25012554
source_hostname = self._other_hostname(dest_hostname)
25022555
source_rp_uuid = self._get_provider_uuid_by_host(source_hostname)

0 commit comments

Comments
 (0)