tests: convert XBZRLE migration test to use common helper

Most of the XBZRLE migration test logic is common with the rest of the
precopy tests, so it can use the helper with just one small tweak.

Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20220426160048.812266-6-berrange@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2022-04-26 17:00:44 +01:00 committed by Dr. David Alan Gilbert
parent d47b83b118
commit 83bcba1ec1
1 changed files with 25 additions and 42 deletions

View File

@ -1174,6 +1174,9 @@ typedef struct {
/* This test should fail, dest qemu should fail with abnormal status */
MIG_TEST_FAIL_DEST_QUIT_ERR,
} result;
/* Optional: set number of migration passes to wait for */
unsigned int iterations;
} MigrateCommon;
static void test_precopy_common(MigrateCommon *args)
@ -1219,7 +1222,13 @@ static void test_precopy_common(MigrateCommon *args)
qtest_set_expected_status(to, 1);
}
} else {
wait_for_migration_pass(from);
if (args->iterations) {
while (args->iterations--) {
wait_for_migration_pass(from);
}
} else {
wait_for_migration_pass(from);
}
migrate_set_parameter_int(from, "downtime-limit", CONVERGE_DOWNTIME);
@ -1350,57 +1359,31 @@ static void test_ignore_shared(void)
}
#endif
static void test_xbzrle(const char *uri)
static void *
test_migrate_xbzrle_start(QTestState *from,
QTestState *to)
{
MigrateStart args = {};
QTestState *from, *to;
if (test_migrate_start(&from, &to, uri, &args)) {
return;
}
/*
* We want to pick a speed slow enough that the test completes
* quickly, but that it doesn't complete precopy even on a slow
* machine, so also set the downtime.
*/
/* 1 ms should make it not converge*/
migrate_set_parameter_int(from, "downtime-limit", 1);
/* 1GB/s */
migrate_set_parameter_int(from, "max-bandwidth", 1000000000);
migrate_set_parameter_int(from, "xbzrle-cache-size", 33554432);
migrate_set_capability(from, "xbzrle", true);
migrate_set_capability(to, "xbzrle", true);
/* Wait for the first serial output from the source */
wait_for_serial("src_serial");
migrate_qmp(from, uri, "{}");
wait_for_migration_pass(from);
/* Make sure we have 2 passes, so the xbzrle cache gets a workout */
wait_for_migration_pass(from);
/* 1000ms should converge */
migrate_set_parameter_int(from, "downtime-limit", 1000);
if (!got_stop) {
qtest_qmp_eventwait(from, "STOP");
}
qtest_qmp_eventwait(to, "RESUME");
wait_for_serial("dest_serial");
wait_for_migration_complete(from);
test_migrate_end(from, to, true);
return NULL;
}
static void test_xbzrle_unix(void)
static void test_precopy_unix_xbzrle(void)
{
g_autofree char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
MigrateCommon args = {
.connect_uri = uri,
.listen_uri = uri,
test_xbzrle(uri);
.start_hook = test_migrate_xbzrle_start,
.iterations = 2,
};
test_precopy_common(&args);
}
static void test_precopy_tcp_plain(void)
@ -1994,6 +1977,7 @@ int main(int argc, char **argv)
qtest_add_func("/migration/postcopy/recovery", test_postcopy_recovery);
qtest_add_func("/migration/bad_dest", test_baddest);
qtest_add_func("/migration/precopy/unix/plain", test_precopy_unix_plain);
qtest_add_func("/migration/precopy/unix/xbzrle", test_precopy_unix_xbzrle);
#ifdef CONFIG_GNUTLS
qtest_add_func("/migration/precopy/unix/tls/psk",
test_precopy_unix_tls_psk);
@ -2030,7 +2014,6 @@ int main(int argc, char **argv)
#endif /* CONFIG_GNUTLS */
/* qtest_add_func("/migration/ignore_shared", test_ignore_shared); */
qtest_add_func("/migration/xbzrle/unix", test_xbzrle_unix);
qtest_add_func("/migration/fd_proto", test_migrate_fd_proto);
qtest_add_func("/migration/validate_uuid", test_validate_uuid);
qtest_add_func("/migration/validate_uuid_error", test_validate_uuid_error);