Skip to content

Commit

Permalink
tests/qtest/migration: Add channels parameter in migrate_qmp
Browse files Browse the repository at this point in the history
Alter migrate_qmp() to allow use of channels parameter, but only
fill the uri with correct port number if there are no channels.
Here we don't want to allow the wrong cases of having both or
none (ex: migrate_qmp_fail).

Signed-off-by: Het Gala <het.gala@nutanix.com>
Suggested-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
Link: https://lore.kernel.org/r/20240312202634.63349-7-het.gala@nutanix.com
Signed-off-by: Peter Xu <peterx@redhat.com>
  • Loading branch information
hetgala99 authored and xzpeter committed Apr 23, 2024
1 parent 2a49e3c commit d5ee387
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 25 deletions.
22 changes: 13 additions & 9 deletions tests/qtest/migration-helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,6 @@ static void migrate_set_ports(QTestState *to, QList *channel_list)
QListEntry *entry;
const char *addr_port = NULL;

if (channel_list == NULL) {
return;
}

addr = migrate_get_connect_qdict(to);

QLIST_FOREACH_ENTRY(channel_list, entry) {
Expand Down Expand Up @@ -208,23 +204,31 @@ void migrate_qmp_fail(QTestState *who, const char *uri,
* qobject_from_jsonf_nofail()) with "uri": @uri spliced in.
*/
void migrate_qmp(QTestState *who, QTestState *to, const char *uri,
const char *fmt, ...)
const char *channels, const char *fmt, ...)
{
va_list ap;
QDict *args;
QList *channel_list = NULL;
g_autofree char *connect_uri = NULL;

va_start(ap, fmt);
args = qdict_from_vjsonf_nofail(fmt, ap);
va_end(ap);

g_assert(!qdict_haskey(args, "uri"));
if (!uri) {
if (uri) {
qdict_put_str(args, "uri", uri);
} else if (!channels) {
connect_uri = migrate_get_connect_uri(to);
qdict_put_str(args, "uri", connect_uri);
}

g_assert(!qdict_haskey(args, "channels"));
if (channels) {
QObject *channels_obj = qobject_from_json(channels, &error_abort);
QList *channel_list = qobject_to(QList, channels_obj);
migrate_set_ports(to, channel_list);
qdict_put_obj(args, "channels", channels_obj);
}
migrate_set_ports(to, channel_list);
qdict_put_str(args, "uri", uri ? uri : connect_uri);

qtest_qmp_assert_success(who,
"{ 'execute': 'migrate', 'arguments': %p}", args);
Expand Down
4 changes: 2 additions & 2 deletions tests/qtest/migration-helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ typedef struct QTestMigrationState {
bool migrate_watch_for_events(QTestState *who, const char *name,
QDict *event, void *opaque);

G_GNUC_PRINTF(4, 5)
G_GNUC_PRINTF(5, 6)
void migrate_qmp(QTestState *who, QTestState *to, const char *uri,
const char *fmt, ...);
const char *channels, const char *fmt, ...);

G_GNUC_PRINTF(3, 4)
void migrate_incoming_qmp(QTestState *who, const char *uri,
Expand Down
28 changes: 14 additions & 14 deletions tests/qtest/migration-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -1301,7 +1301,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
wait_for_serial("src_serial");
wait_for_suspend(from, &src_state);

migrate_qmp(from, to, NULL, "{}");
migrate_qmp(from, to, NULL, NULL, "{}");

migrate_wait_for_dirty_mem(from, to);

Expand Down Expand Up @@ -1451,7 +1451,7 @@ static void postcopy_recover_fail(QTestState *from, QTestState *to)
g_assert_cmpint(ret, ==, 1);

migrate_recover(to, "fd:fd-mig");
migrate_qmp(from, to, "fd:fd-mig", "{'resume': true}");
migrate_qmp(from, to, "fd:fd-mig", NULL, "{'resume': true}");

/*
* Make sure both QEMU instances will go into RECOVER stage, then test
Expand Down Expand Up @@ -1539,7 +1539,7 @@ static void test_postcopy_recovery_common(MigrateCommon *args)
* Try to rebuild the migration channel using the resume flag and
* the newly created channel
*/
migrate_qmp(from, to, uri, "{'resume': true}");
migrate_qmp(from, to, uri, NULL, "{'resume': true}");

/* Restore the postcopy bandwidth to unlimited */
migrate_set_parameter_int(from, "max-postcopy-bandwidth", 0);
Expand Down Expand Up @@ -1620,7 +1620,7 @@ static void test_baddest(void)
if (test_migrate_start(&from, &to, "tcp:127.0.0.1:0", &args)) {
return;
}
migrate_qmp(from, to, "tcp:127.0.0.1:0", "{}");
migrate_qmp(from, to, "tcp:127.0.0.1:0", NULL, "{}");
wait_for_migration_fail(from, false);
test_migrate_end(from, to, false);
}
Expand Down Expand Up @@ -1659,7 +1659,7 @@ static void test_analyze_script(void)
uri = g_strdup_printf("exec:cat > %s", file);

migrate_ensure_converge(from);
migrate_qmp(from, to, uri, "{}");
migrate_qmp(from, to, uri, NULL, "{}");
wait_for_migration_complete(from);

pid = fork();
Expand Down Expand Up @@ -1721,7 +1721,7 @@ static void test_precopy_common(MigrateCommon *args)
goto finish;
}

migrate_qmp(from, to, args->connect_uri, "{}");
migrate_qmp(from, to, args->connect_uri, NULL, "{}");

if (args->result != MIG_TEST_SUCCEED) {
bool allow_active = args->result == MIG_TEST_FAIL;
Expand Down Expand Up @@ -1816,7 +1816,7 @@ static void test_file_common(MigrateCommon *args, bool stop_src)
goto finish;
}

migrate_qmp(from, to, args->connect_uri, "{}");
migrate_qmp(from, to, args->connect_uri, NULL, "{}");
wait_for_migration_complete(from);

/*
Expand Down Expand Up @@ -1972,7 +1972,7 @@ static void test_ignore_shared(void)
/* Wait for the first serial output from the source */
wait_for_serial("src_serial");

migrate_qmp(from, to, uri, "{}");
migrate_qmp(from, to, uri, NULL, "{}");

migrate_wait_for_dirty_mem(from, to);

Expand Down Expand Up @@ -2511,7 +2511,7 @@ static void do_test_validate_uuid(MigrateStart *args, bool should_fail)
/* Wait for the first serial output from the source */
wait_for_serial("src_serial");

migrate_qmp(from, to, uri, "{}");
migrate_qmp(from, to, uri, NULL, "{}");

if (should_fail) {
qtest_set_expected_status(to, EXIT_FAILURE);
Expand Down Expand Up @@ -2614,7 +2614,7 @@ static void test_migrate_auto_converge(void)
/* Wait for the first serial output from the source */
wait_for_serial("src_serial");

migrate_qmp(from, to, uri, "{}");
migrate_qmp(from, to, uri, NULL, "{}");

/* Wait for throttling begins */
percentage = 0;
Expand Down Expand Up @@ -2980,7 +2980,7 @@ static void test_multifd_tcp_cancel(void)
/* Wait for the first serial output from the source */
wait_for_serial("src_serial");

migrate_qmp(from, to, NULL, "{}");
migrate_qmp(from, to, NULL, NULL, "{}");

migrate_wait_for_dirty_mem(from, to);

Expand Down Expand Up @@ -3009,7 +3009,7 @@ static void test_multifd_tcp_cancel(void)

migrate_ensure_non_converge(from);

migrate_qmp(from, to2, NULL, "{}");
migrate_qmp(from, to2, NULL, NULL, "{}");

migrate_wait_for_dirty_mem(from, to2);

Expand Down Expand Up @@ -3342,7 +3342,7 @@ static void test_migrate_dirty_limit(void)
migrate_dirty_limit_wait_showup(from, dirtylimit_period, dirtylimit_value);

/* Start migrate */
migrate_qmp(from, to, args.connect_uri, "{}");
migrate_qmp(from, to, args.connect_uri, NULL, "{}");

/* Wait for dirty limit throttle begin */
throttle_us_per_full = 0;
Expand Down Expand Up @@ -3383,7 +3383,7 @@ static void test_migrate_dirty_limit(void)
}

/* Start migrate */
migrate_qmp(from, to, args.connect_uri, "{}");
migrate_qmp(from, to, args.connect_uri, NULL, "{}");

/* Wait for dirty limit throttle begin */
throttle_us_per_full = 0;
Expand Down

0 comments on commit d5ee387

Please sign in to comment.