On Wed, Jun 28, 2023 at 01:55:39PM -0300, Fabiano Rosas wrote: > file-based migration requires the target to initiate its migration after > the source has finished writing out the data in the file. Currently > there's no easy way to initiate 'migrate-incoming', allow this by > introducing migrate_incoming_qmp helper, similarly to migrate_qmp. > > Also make sure migration events are enabled and wait for the incoming > migration to start before returning. This avoid a race when querying > the migration status too soon after issuing the command. > > Signed-off-by: Fabiano Rosas <faro...@suse.de> > --- > tests/qtest/migration-helpers.c | 28 ++++++++++++++++++++++++++++ > tests/qtest/migration-helpers.h | 4 ++++ > 2 files changed, 32 insertions(+) > > diff --git a/tests/qtest/migration-helpers.c b/tests/qtest/migration-helpers.c > index 2df198c99e..bc54b29184 100644 > --- a/tests/qtest/migration-helpers.c > +++ b/tests/qtest/migration-helpers.c > @@ -81,6 +81,34 @@ void migrate_set_capability(QTestState *who, const char > *capability, > capability, value); > } > > +void migrate_incoming_qmp(QTestState *to, const char *uri, const char *fmt, > ...) > +{ > + va_list ap; > + QDict *args, *rsp, *data; > + > + va_start(ap, fmt); > + args = qdict_from_vjsonf_nofail(fmt, ap); > + va_end(ap); > + > + g_assert(!qdict_haskey(args, "uri")); > + qdict_put_str(args, "uri", uri); > + > + migrate_set_capability(to, "events", true); > + > + rsp = qtest_qmp(to, "{ 'execute': 'migrate-incoming', 'arguments': %p}", > + args); > + g_assert(qdict_haskey(rsp, "return"));
rsp leaked? > + > + rsp = qtest_qmp_eventwait_ref(to, "MIGRATION"); > + g_assert(qdict_haskey(rsp, "data")); > + > + data = qdict_get_qdict(rsp, "data"); > + g_assert(qdict_haskey(data, "status")); > + g_assert_cmpstr(qdict_get_str(data, "status"), ==, "setup"); > + > + qobject_unref(rsp); > +} > + > /* > * Note: caller is responsible to free the returned object via > * qobject_unref() after use > diff --git a/tests/qtest/migration-helpers.h b/tests/qtest/migration-helpers.h > index 484d7c960f..57d295a4fe 100644 > --- a/tests/qtest/migration-helpers.h > +++ b/tests/qtest/migration-helpers.h > @@ -23,6 +23,10 @@ bool migrate_watch_for_resume(QTestState *who, const char > *name, > G_GNUC_PRINTF(3, 4) > void migrate_qmp(QTestState *who, const char *uri, const char *fmt, ...); > > +G_GNUC_PRINTF(3, 4) > +void migrate_incoming_qmp(QTestState *who, const char *uri, > + const char *fmt, ...); > + > void migrate_set_capability(QTestState *who, const char *capability, > bool value); > > -- > 2.35.3 > -- Peter Xu