tests/qtest: postcopy migration with suspend

Add a test case to verify that the suspended state is handled correctly by
live migration postcopy.  The test suspends the src, migrates, then wakes
the dest.

Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Link: https://lore.kernel.org/r/1704312341-66640-13-git-send-email-steven.sistare@oracle.com
Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
Steve Sistare 2024-01-03 12:05:41 -08:00 committed by Peter Xu
parent b1fdd21e8c
commit 2b58a8b963

View File

@ -1347,6 +1347,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
/* Wait for the first serial output from the source */ /* Wait for the first serial output from the source */
wait_for_serial("src_serial"); wait_for_serial("src_serial");
wait_for_suspend(from, &src_state);
g_autofree char *uri = migrate_get_socket_address(to, "socket-address"); g_autofree char *uri = migrate_get_socket_address(to, "socket-address");
migrate_qmp(from, uri, "{}"); migrate_qmp(from, uri, "{}");
@ -1364,6 +1365,11 @@ static void migrate_postcopy_complete(QTestState *from, QTestState *to,
{ {
wait_for_migration_complete(from); wait_for_migration_complete(from);
if (args->start.suspend_me) {
/* wakeup succeeds only if guest is suspended */
qtest_qmp_assert_success(to, "{'execute': 'system_wakeup'}");
}
/* Make sure we get at least one "B" on destination */ /* Make sure we get at least one "B" on destination */
wait_for_serial("dest_serial"); wait_for_serial("dest_serial");
@ -1397,6 +1403,15 @@ static void test_postcopy(void)
test_postcopy_common(&args); test_postcopy_common(&args);
} }
static void test_postcopy_suspend(void)
{
MigrateCommon args = {
.start.suspend_me = true,
};
test_postcopy_common(&args);
}
static void test_postcopy_compress(void) static void test_postcopy_compress(void)
{ {
MigrateCommon args = { MigrateCommon args = {
@ -3412,7 +3427,10 @@ int main(int argc, char **argv)
qtest_add_func("/migration/postcopy/recovery/double-failures", qtest_add_func("/migration/postcopy/recovery/double-failures",
test_postcopy_recovery_double_fail); test_postcopy_recovery_double_fail);
#endif /* _WIN32 */ #endif /* _WIN32 */
if (is_x86) {
qtest_add_func("/migration/postcopy/suspend",
test_postcopy_suspend);
}
} }
qtest_add_func("/migration/bad_dest", test_baddest); qtest_add_func("/migration/bad_dest", test_baddest);