qtest/migration-test.c: Add tests with compress enabled

There has never been tests for migration with compress enabled.

Add suitable tests, testing with compress-wait-thread = false
too.

Signed-off-by: Lukas Straub <lukasstraub2@web.de>
Acked-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
Lukas Straub 2023-04-04 14:35:27 +00:00 committed by Juan Quintela
parent 792f77f376
commit 1536d1da5d
1 changed files with 109 additions and 0 deletions

View File

@ -406,6 +406,41 @@ static void migrate_set_parameter_str(QTestState *who, const char *parameter,
migrate_check_parameter_str(who, parameter, value);
}
static long long migrate_get_parameter_bool(QTestState *who,
const char *parameter)
{
QDict *rsp;
int result;
rsp = wait_command(who, "{ 'execute': 'query-migrate-parameters' }");
result = qdict_get_bool(rsp, parameter);
qobject_unref(rsp);
return !!result;
}
static void migrate_check_parameter_bool(QTestState *who, const char *parameter,
int value)
{
int result;
result = migrate_get_parameter_bool(who, parameter);
g_assert_cmpint(result, ==, value);
}
static void migrate_set_parameter_bool(QTestState *who, const char *parameter,
int value)
{
QDict *rsp;
rsp = qtest_qmp(who,
"{ 'execute': 'migrate-set-parameters',"
"'arguments': { %s: %i } }",
parameter, value);
g_assert(qdict_haskey(rsp, "return"));
qobject_unref(rsp);
migrate_check_parameter_bool(who, parameter, value);
}
static void migrate_ensure_non_converge(QTestState *who)
{
/* Can't converge with 1ms downtime + 3 mbs bandwidth limit */
@ -1524,6 +1559,70 @@ static void test_precopy_unix_xbzrle(void)
test_precopy_common(&args);
}
static void *
test_migrate_compress_start(QTestState *from,
QTestState *to)
{
migrate_set_parameter_int(from, "compress-level", 1);
migrate_set_parameter_int(from, "compress-threads", 4);
migrate_set_parameter_bool(from, "compress-wait-thread", true);
migrate_set_parameter_int(to, "decompress-threads", 4);
migrate_set_capability(from, "compress", true);
migrate_set_capability(to, "compress", true);
return NULL;
}
static void test_precopy_unix_compress(void)
{
g_autofree char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
MigrateCommon args = {
.connect_uri = uri,
.listen_uri = uri,
.start_hook = test_migrate_compress_start,
/*
* Test that no invalid thread state is left over from
* the previous iteration.
*/
.iterations = 2,
};
test_precopy_common(&args);
}
static void *
test_migrate_compress_nowait_start(QTestState *from,
QTestState *to)
{
migrate_set_parameter_int(from, "compress-level", 9);
migrate_set_parameter_int(from, "compress-threads", 1);
migrate_set_parameter_bool(from, "compress-wait-thread", false);
migrate_set_parameter_int(to, "decompress-threads", 1);
migrate_set_capability(from, "compress", true);
migrate_set_capability(to, "compress", true);
return NULL;
}
static void test_precopy_unix_compress_nowait(void)
{
g_autofree char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
MigrateCommon args = {
.connect_uri = uri,
.listen_uri = uri,
.start_hook = test_migrate_compress_nowait_start,
/*
* Test that no invalid thread state is left over from
* the previous iteration.
*/
.iterations = 2,
};
test_precopy_common(&args);
}
static void test_precopy_tcp_plain(void)
{
MigrateCommon args = {
@ -2537,6 +2636,16 @@ int main(int argc, char **argv)
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);
/*
* Compression fails from time to time.
* Put test here but don't enable it until everything is fixed.
*/
if (getenv("QEMU_TEST_FLAKY_TESTS")) {
qtest_add_func("/migration/precopy/unix/compress/wait",
test_precopy_unix_compress);
qtest_add_func("/migration/precopy/unix/compress/nowait",
test_precopy_unix_compress_nowait);
}
#ifdef CONFIG_GNUTLS
qtest_add_func("/migration/precopy/unix/tls/psk",
test_precopy_unix_tls_psk);