Skip to content

Commit

Permalink
tests: expand the migration precopy helper to support failures
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
berrange authored and dagrh committed Apr 21, 2022
1 parent 243e006 commit 00fbe7f
Showing 1 changed file with 42 additions and 9 deletions.
51 changes: 42 additions & 9 deletions tests/qtest/migration-test.c
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 00fbe7f

Please sign in to comment.