aboutsummaryrefslogtreecommitdiff
path: root/tests/qtest/migration-test.c
diff options
context:
space:
mode:
authorDaniel P. Berrangé <berrange@redhat.com>2022-03-10 17:18:14 +0000
committerDr. David Alan Gilbert <dgilbert@redhat.com>2022-04-21 19:36:46 +0100
commit00fbe7f6add0ac58556e9fe3354d300294e6c3ef (patch)
tree8807943285a91e1a811b41a3c1a0fb9fc6d9df7c /tests/qtest/migration-test.c
parent243e006686f51f076536b5e61efbefa8f2e92ab6 (diff)
tests: expand the migration precopy helper to support failures
The migration precopy testing helper function always expects the migration to run to a completion state. There will be test scenarios for TLS where expect either the client or server to fail the migration. This expands the helper to cope with these scenarios. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20220310171821.3724080-12-berrange@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Diffstat (limited to 'tests/qtest/migration-test.c')
-rw-r--r--tests/qtest/migration-test.c51
1 files changed, 42 insertions, 9 deletions
diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c
index 04f749aaa1..2af36c16a3 100644
--- a/tests/qtest/migration-test.c
+++ b/tests/qtest/migration-test.c
@@ -821,6 +821,30 @@ typedef struct {
TestMigrateStartHook start_hook;
/* Optional: callback to run at finish to cleanup */
TestMigrateFinishHook finish_hook;
+
+ /*
+ * Optional: normally we expect the migration process to complete.
+ *
+ * There can be a variety of reasons and stages in which failure
+ * can happen during tests.
+ *
+ * If a failure is expected to happen at time of establishing
+ * the connection, then MIG_TEST_FAIL will indicate that the dst
+ * QEMU is expected to stay running and accept future migration
+ * connections.
+ *
+ * If a failure is expected to happen while processing the
+ * migration stream, then MIG_TEST_FAIL_DEST_QUIT_ERR will indicate
+ * that the dst QEMU is expected to quit with non-zero exit status
+ */
+ enum {
+ /* This test should succeed, the default */
+ MIG_TEST_SUCCEED = 0,
+ /* This test should fail, dest qemu should keep alive */
+ MIG_TEST_FAIL,
+ /* This test should fail, dest qemu should fail with abnormal status */
+ MIG_TEST_FAIL_DEST_QUIT_ERR,
+ } result;
} MigrateCommon;
static void test_precopy_common(MigrateCommon *args)
@@ -858,24 +882,33 @@ static void test_precopy_common(MigrateCommon *args)
}
- wait_for_migration_pass(from);
+ if (args->result != MIG_TEST_SUCCEED) {
+ bool allow_active = args->result == MIG_TEST_FAIL;
+ wait_for_migration_fail(from, allow_active);
- migrate_set_parameter_int(from, "downtime-limit", CONVERGE_DOWNTIME);
+ if (args->result == MIG_TEST_FAIL_DEST_QUIT_ERR) {
+ qtest_set_expected_status(to, 1);
+ }
+ } else {
+ wait_for_migration_pass(from);
- if (!got_stop) {
- qtest_qmp_eventwait(from, "STOP");
- }
+ migrate_set_parameter_int(from, "downtime-limit", CONVERGE_DOWNTIME);
- qtest_qmp_eventwait(to, "RESUME");
+ if (!got_stop) {
+ qtest_qmp_eventwait(from, "STOP");
+ }
- wait_for_serial("dest_serial");
- wait_for_migration_complete(from);
+ qtest_qmp_eventwait(to, "RESUME");
+
+ wait_for_serial("dest_serial");
+ wait_for_migration_complete(from);
+ }
if (args->finish_hook) {
args->finish_hook(from, to, data_hook);
}
- test_migrate_end(from, to, true);
+ test_migrate_end(from, to, args->result == MIG_TEST_SUCCEED);
}
static void test_precopy_unix(void)