aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/fp/meson.build3
-rw-r--r--tests/qtest/migration-helpers.c14
-rw-r--r--tests/qtest/migration-test.c59
-rw-r--r--tests/unit/test-cutils.c42
4 files changed, 75 insertions, 43 deletions
diff --git a/tests/fp/meson.build b/tests/fp/meson.build
index 8bd0979f67..2b4f00b916 100644
--- a/tests/fp/meson.build
+++ b/tests/fp/meson.build
@@ -1,3 +1,6 @@
+if 'CONFIG_TCG' not in config_all
+ subdir_done()
+endif
# There are namespace pollution issues on Windows, due to osdep.h
# bringing in Windows headers that define a FLOAT128 type.
if targetos == 'windows'
diff --git a/tests/qtest/migration-helpers.c b/tests/qtest/migration-helpers.c
index a6aa59e4e6..e81e831c85 100644
--- a/tests/qtest/migration-helpers.c
+++ b/tests/qtest/migration-helpers.c
@@ -15,6 +15,14 @@
#include "migration-helpers.h"
+/*
+ * Number of seconds we wait when looking for migration
+ * status changes, to avoid test suite hanging forever
+ * when things go wrong. Needs to be higher enough to
+ * avoid false positives on loaded hosts.
+ */
+#define MIGRATION_STATUS_WAIT_TIMEOUT 120
+
bool got_stop;
static void check_stop_event(QTestState *who)
@@ -166,8 +174,11 @@ static bool check_migration_status(QTestState *who, const char *goal,
void wait_for_migration_status(QTestState *who,
const char *goal, const char **ungoals)
{
+ g_test_timer_start();
while (!check_migration_status(who, goal, ungoals)) {
usleep(1000);
+
+ g_assert(g_test_timer_elapsed() < MIGRATION_STATUS_WAIT_TIMEOUT);
}
}
@@ -178,6 +189,7 @@ void wait_for_migration_complete(QTestState *who)
void wait_for_migration_fail(QTestState *from, bool allow_active)
{
+ g_test_timer_start();
QDict *rsp_return;
char *status;
bool failed;
@@ -193,6 +205,8 @@ void wait_for_migration_fail(QTestState *from, bool allow_active)
g_assert(result);
failed = !strcmp(status, "failed");
g_free(status);
+
+ g_assert(g_test_timer_elapsed() < MIGRATION_STATUS_WAIT_TIMEOUT);
} while (!failed);
/* Is the machine currently running? */
diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c
index d33e8060f9..9e64125f02 100644
--- a/tests/qtest/migration-test.c
+++ b/tests/qtest/migration-test.c
@@ -46,9 +46,6 @@ unsigned start_address;
unsigned end_address;
static bool uffd_feature_thread_id;
-/* A downtime where the test really should converge */
-#define CONVERGE_DOWNTIME 1000
-
#if defined(__linux__)
#include <sys/syscall.h>
#include <sys/vfs.h>
@@ -402,6 +399,20 @@ static void migrate_set_parameter_str(QTestState *who, const char *parameter,
migrate_check_parameter_str(who, parameter, value);
}
+static void migrate_ensure_non_converge(QTestState *who)
+{
+ /* Can't converge with 1ms downtime + 30 mbs bandwidth limit */
+ migrate_set_parameter_int(who, "max-bandwidth", 30 * 1000 * 1000);
+ migrate_set_parameter_int(who, "downtime-limit", 1);
+}
+
+static void migrate_ensure_converge(QTestState *who)
+{
+ /* Should converge with 30s downtime + 1 gbs bandwidth limit */
+ migrate_set_parameter_int(who, "max-bandwidth", 1 * 1000 * 1000 * 1000);
+ migrate_set_parameter_int(who, "downtime-limit", 30 * 1000);
+}
+
static void migrate_pause(QTestState *who)
{
QDict *rsp;
@@ -984,12 +995,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
migrate_set_capability(to, "postcopy-ram", true);
migrate_set_capability(to, "postcopy-blocktime", true);
- /* 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.
- */
- migrate_set_parameter_int(from, "max-bandwidth", 30000000);
- migrate_set_parameter_int(from, "downtime-limit", 1);
+ migrate_ensure_non_converge(from);
/* Wait for the first serial output from the source */
wait_for_serial("src_serial");
@@ -1188,15 +1194,7 @@ static void test_precopy_common(MigrateCommon *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_ensure_non_converge(from);
if (args->start_hook) {
data_hook = args->start_hook(from, to);
@@ -1230,7 +1228,11 @@ static void test_precopy_common(MigrateCommon *args)
wait_for_migration_pass(from);
}
- migrate_set_parameter_int(from, "downtime-limit", CONVERGE_DOWNTIME);
+ migrate_ensure_converge(from);
+
+ /* We do this first, as it has a timeout to stop us
+ * hanging forever if migration didn't converge */
+ wait_for_migration_complete(from);
if (!got_stop) {
qtest_qmp_eventwait(from, "STOP");
@@ -1239,7 +1241,6 @@ static void test_precopy_common(MigrateCommon *args)
qtest_qmp_eventwait(to, "RESUME");
wait_for_serial("dest_serial");
- wait_for_migration_complete(from);
}
if (args->finish_hook) {
@@ -1691,8 +1692,7 @@ static void test_migrate_auto_converge(void)
* Set the initial parameters so that the migration could not converge
* without throttling.
*/
- migrate_set_parameter_int(from, "downtime-limit", 1);
- migrate_set_parameter_int(from, "max-bandwidth", 100000000); /* ~100Mb/s */
+ migrate_ensure_non_converge(from);
/* To check remaining size after precopy */
migrate_set_capability(from, "pause-before-switchover", true);
@@ -1997,15 +1997,7 @@ static void test_multifd_tcp_cancel(void)
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);
- /* 300MB/s */
- migrate_set_parameter_int(from, "max-bandwidth", 30000000);
+ migrate_ensure_non_converge(from);
migrate_set_parameter_int(from, "multifd-channels", 16);
migrate_set_parameter_int(to, "multifd-channels", 16);
@@ -2051,10 +2043,7 @@ static void test_multifd_tcp_cancel(void)
wait_for_migration_status(from, "cancelled", NULL);
- /* 300ms it should converge */
- migrate_set_parameter_int(from, "downtime-limit", 300);
- /* 1GB/s */
- migrate_set_parameter_int(from, "max-bandwidth", 1000000000);
+ migrate_ensure_converge(from);
migrate_qmp(from, uri, "{}");
diff --git a/tests/unit/test-cutils.c b/tests/unit/test-cutils.c
index f5b780f012..86caddcf64 100644
--- a/tests/unit/test-cutils.c
+++ b/tests/unit/test-cutils.c
@@ -2452,18 +2452,44 @@ static void test_qemu_strtosz_metric(void)
static void test_freq_to_str(void)
{
- g_assert_cmpstr(freq_to_str(999), ==, "999 Hz");
- g_assert_cmpstr(freq_to_str(1000), ==, "1 KHz");
- g_assert_cmpstr(freq_to_str(1010), ==, "1.01 KHz");
+ char *str;
+
+ str = freq_to_str(999);
+ g_assert_cmpstr(str, ==, "999 Hz");
+ g_free(str);
+
+ str = freq_to_str(1000);
+ g_assert_cmpstr(str, ==, "1 KHz");
+ g_free(str);
+
+ str = freq_to_str(1010);
+ g_assert_cmpstr(str, ==, "1.01 KHz");
+ g_free(str);
}
static void test_size_to_str(void)
{
- g_assert_cmpstr(size_to_str(0), ==, "0 B");
- g_assert_cmpstr(size_to_str(1), ==, "1 B");
- g_assert_cmpstr(size_to_str(1016), ==, "0.992 KiB");
- g_assert_cmpstr(size_to_str(1024), ==, "1 KiB");
- g_assert_cmpstr(size_to_str(512ull << 20), ==, "512 MiB");
+ char *str;
+
+ str = size_to_str(0);
+ g_assert_cmpstr(str, ==, "0 B");
+ g_free(str);
+
+ str = size_to_str(1);
+ g_assert_cmpstr(str, ==, "1 B");
+ g_free(str);
+
+ str = size_to_str(1016);
+ g_assert_cmpstr(str, ==, "0.992 KiB");
+ g_free(str);
+
+ str = size_to_str(1024);
+ g_assert_cmpstr(str, ==, "1 KiB");
+ g_free(str);
+
+ str = size_to_str(512ull << 20);
+ g_assert_cmpstr(str, ==, "512 MiB");
+ g_free(str);
}
static void test_iec_binary_prefix(void)