Add a cpr-reboot qtest that enables x-ignore-shared and asserts the amount
of RAM transferred stays far below the guest RAM size.
This covers the shared RAM behavior: device state is saved while shared
RAM is preserved in place.
Signed-off-by: Li Chen <me@linux.beauty>
---
tests/qtest/migration/cpr-tests.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/tests/qtest/migration/cpr-tests.c b/tests/qtest/migration/cpr-tests.c
index 5eafc4d678..6fa09b54ee 100644
--- a/tests/qtest/migration/cpr-tests.c
+++ b/tests/qtest/migration/cpr-tests.c
@@ -52,6 +52,23 @@ static void test_mem_backend_file_fdset(void)
}
#endif
+static void test_ignore_shared_end(QTestState *from, QTestState *to,
+ void *opaque)
+{
+ int64_t transferred;
+ int64_t total;
+ int64_t limit;
+
+ transferred = read_ram_property_int(from, "transferred");
+ total = read_ram_property_int(from, "total");
+ limit = total / 32;
+ limit = MIN(limit, 8 * 1024 * 1024);
+ limit = MAX(limit, 2 * 1024 * 1024);
+ g_test_message("ram.transferred=%" PRId64 " ram.total=%" PRId64
+ " limit=%" PRId64, transferred, total, limit);
+ g_assert_cmpint(transferred, <, limit);
+}
+
static void *migrate_hook_start_mode_reboot(QTestState *from, QTestState *to)
{
migrate_set_parameter_str(from, "mode", "cpr-reboot");
@@ -69,6 +86,7 @@ static void test_mode_reboot(void)
.connect_uri = uri,
.listen_uri = "defer",
.start_hook = migrate_hook_start_mode_reboot,
+ .end_hook = test_ignore_shared_end,
.start = {
.caps[MIGRATION_CAPABILITY_X_IGNORE_SHARED] = true,
},
--
2.52.0