migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_FAILED);
- qemu_fclose(mis->from_src_file);
-
- multifd_recv_cleanup();
- compress_threads_load_cleanup();
-
- exit(EXIT_FAILURE);
+ migration_incoming_state_destroy();
}
/**
diff --git a/tests/qtest/migration-helpers.c b/tests/qtest/migration-helpers.c
index e451dbdbed..91c13bd566 100644
--- a/tests/qtest/migration-helpers.c
+++ b/tests/qtest/migration-helpers.c
@@ -211,7 +211,8 @@ void wait_for_migration_complete(QTestState *who)
wait_for_migration_status(who, "completed", NULL);
}
-void wait_for_migration_fail(QTestState *from, bool allow_active)
+void wait_for_migration_fail(QTestState *from, bool allow_active,
+ bool is_incoming)
{
g_test_timer_start();
QDict *rsp_return;
@@ -236,8 +237,14 @@ void wait_for_migration_fail(QTestState *from, bool
allow_active)
/* Is the machine currently running? */
rsp_return = qtest_qmp_assert_success_ref(from,
"{ 'execute': 'query-status'
}");
- g_assert(qdict_haskey(rsp_return, "running"));
- g_assert(qdict_get_bool(rsp_return, "running"));
+ if (is_incoming) {
+ if (qdict_haskey(rsp_return, "running")) {
+ g_assert(!qdict_get_bool(rsp_return, "running"));
+ }
+ } else {
+ g_assert(qdict_haskey(rsp_return, "running"));
+ g_assert(qdict_get_bool(rsp_return, "running"));
+ }
qobject_unref(rsp_return);
}
diff --git a/tests/qtest/migration-helpers.h b/tests/qtest/migration-helpers.h
index 3bf7ded1b9..7bd07059ae 100644
--- a/tests/qtest/migration-helpers.h
+++ b/tests/qtest/migration-helpers.h
@@ -46,7 +46,8 @@ void wait_for_migration_status(QTestState *who,
void wait_for_migration_complete(QTestState *who);
-void wait_for_migration_fail(QTestState *from, bool allow_active);
+void wait_for_migration_fail(QTestState *from, bool allow_active,
+ bool is_incoming);
char *find_common_machine_version(const char *mtype, const char *var1,
const char *var2);
diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c
index 1d2cee87ea..e00b755f05 100644
--- a/tests/qtest/migration-test.c
+++ b/tests/qtest/migration-test.c
@@ -1670,7 +1670,7 @@ static void test_baddest(void)
return;
}
migrate_qmp(from, "tcp:127.0.0.1:0", "{}");
- wait_for_migration_fail(from, false);
+ wait_for_migration_fail(from, false, false);
test_migrate_end(from, to, false);
}
@@ -1781,10 +1781,10 @@ static void test_precopy_common(MigrateCommon *args)
if (args->result != MIG_TEST_SUCCEED) {
bool allow_active = args->result == MIG_TEST_FAIL;
- wait_for_migration_fail(from, allow_active);
+ wait_for_migration_fail(from, allow_active, false);
if (args->result == MIG_TEST_FAIL_DEST_QUIT_ERR) {
- qtest_set_expected_status(to, EXIT_FAILURE);
+ wait_for_migration_fail(to, true, true);
}
} else {
if (args->live) {
@@ -2571,8 +2571,8 @@ static void do_test_validate_uuid(MigrateStart *args,
bool should_fail)
migrate_qmp(from, uri, "{}");
if (should_fail) {
- qtest_set_expected_status(to, EXIT_FAILURE);
- wait_for_migration_fail(from, true);
+ wait_for_migration_fail(to, true, true);
+ wait_for_migration_fail(from, true, false);
} else {
wait_for_migration_complete(from);
}
@@ -3047,8 +3047,8 @@ static void test_multifd_tcp_cancel(void)
migrate_cancel(from);
/* Make sure QEMU process "to" exited */
- qtest_set_expected_status(to, EXIT_FAILURE);
- qtest_wait_qemu(to);
+ wait_for_migration_fail(to, true, true);
+ qtest_quit(to);
args = (MigrateStart){
.only_target = true,