On Thu, Aug 14, 2025 at 12:30:00PM -0300, Fabiano Rosas wrote:
> Peter Xu <pet...@redhat.com> writes:
> 
> > On Mon, Jun 30, 2025 at 04:59:13PM -0300, Fabiano Rosas wrote:
> >> Use the existing file tests to test the new way of passing parameters
> >> to the migration via the config argument to qmp_migrate*.
> >> 
> >> Signed-off-by: Fabiano Rosas <faro...@suse.de>
> >> ---
> >>  tests/qtest/migration/file-tests.c    | 68 +++++++++++----------------
> >>  tests/qtest/migration/framework.c     |  9 ++--
> >>  tests/qtest/migration/precopy-tests.c |  1 +
> >>  3 files changed, 34 insertions(+), 44 deletions(-)
> >> 
> >> diff --git a/tests/qtest/migration/file-tests.c 
> >> b/tests/qtest/migration/file-tests.c
> >> index 4d78ce0855..656d6527e8 100644
> >> --- a/tests/qtest/migration/file-tests.c
> >> +++ b/tests/qtest/migration/file-tests.c
> >> @@ -27,6 +27,7 @@ static void test_precopy_file(void)
> >>      MigrateCommon args = {
> >>          .connect_uri = uri,
> >>          .listen_uri = "defer",
> >> +        .start.config = qdict_new(),
> >>      };
> >>  
> >>      test_file_common(&args, true);
> >> @@ -74,6 +75,7 @@ static void test_precopy_file_offset_fdset(void)
> >>          .connect_uri = uri,
> >>          .listen_uri = "defer",
> >>          .start_hook = migrate_hook_start_file_offset_fdset,
> >> +        .start.config = qdict_new(),
> >>      };
> >>  
> >>      test_file_common(&args, false);
> >> @@ -88,6 +90,7 @@ static void test_precopy_file_offset(void)
> >>      MigrateCommon args = {
> >>          .connect_uri = uri,
> >>          .listen_uri = "defer",
> >> +        .start.config = qdict_new(),
> >>      };
> >>  
> >>      test_file_common(&args, false);
> >> @@ -102,6 +105,7 @@ static void test_precopy_file_offset_bad(void)
> >>          .connect_uri = uri,
> >>          .listen_uri = "defer",
> >>          .result = MIG_TEST_QMP_ERROR,
> >> +        .start.config = qdict_new(),
> >>      };
> >>  
> >>      test_file_common(&args, false);
> >> @@ -114,11 +118,10 @@ static void test_precopy_file_mapped_ram_live(void)
> >>      MigrateCommon args = {
> >>          .connect_uri = uri,
> >>          .listen_uri = "defer",
> >> -        .start = {
> >> -            .caps[MIGRATION_CAPABILITY_MAPPED_RAM] = true,
> >> -        },
> >> +        .start.config = qdict_new(),
> >>      };
> >>  
> >> +    qdict_put_bool(args.start.config, "mapped-ram", true);
> >>      test_file_common(&args, false);
> >>  }
> >>  
> >> @@ -129,11 +132,9 @@ static void test_precopy_file_mapped_ram(void)
> >>      MigrateCommon args = {
> >>          .connect_uri = uri,
> >>          .listen_uri = "defer",
> >> -        .start = {
> >> -            .caps[MIGRATION_CAPABILITY_MAPPED_RAM] = true,
> >> -        },
> >> +        .start.config = qdict_new(),
> >>      };
> >> -
> >> +    qdict_put_bool(args.start.config, "mapped-ram", true);
> >>      test_file_common(&args, true);
> >>  }
> >>  
> >> @@ -144,12 +145,11 @@ static void test_multifd_file_mapped_ram_live(void)
> >>      MigrateCommon args = {
> >>          .connect_uri = uri,
> >>          .listen_uri = "defer",
> >> -        .start = {
> >> -            .caps[MIGRATION_CAPABILITY_MULTIFD] = true,
> >> -            .caps[MIGRATION_CAPABILITY_MAPPED_RAM] = true,
> >> -        },
> >> +        .start.config = qdict_new(),
> >>      };
> >>  
> >> +    qdict_put_bool(args.start.config, "mapped-ram", true);
> >> +    qdict_put_bool(args.start.config, "multifd", true);
> >>      test_file_common(&args, false);
> >>  }
> >>  
> >> @@ -160,24 +160,13 @@ static void test_multifd_file_mapped_ram(void)
> >>      MigrateCommon args = {
> >>          .connect_uri = uri,
> >>          .listen_uri = "defer",
> >> -        .start = {
> >> -            .caps[MIGRATION_CAPABILITY_MULTIFD] = true,
> >> -            .caps[MIGRATION_CAPABILITY_MAPPED_RAM] = true,
> >> -        },
> >> +        .start.config = qdict_new(),
> >>      };
> >> -
> >> +    qdict_put_bool(args.start.config, "mapped-ram", true);
> >> +    qdict_put_bool(args.start.config, "multifd", true);
> >>      test_file_common(&args, true);
> >>  }
> >>  
> >> -static void *migrate_hook_start_multifd_mapped_ram_dio(QTestState *from,
> >> -                                                       QTestState *to)
> >> -{
> >> -    migrate_set_parameter_bool(from, "direct-io", true);
> >> -    migrate_set_parameter_bool(to, "direct-io", true);
> >> -
> >> -    return NULL;
> >> -}
> >> -
> >>  static void test_multifd_file_mapped_ram_dio(void)
> >>  {
> >>      g_autofree char *uri = g_strdup_printf("file:%s/%s", tmpfs,
> >> @@ -185,13 +174,13 @@ static void test_multifd_file_mapped_ram_dio(void)
> >>      MigrateCommon args = {
> >>          .connect_uri = uri,
> >>          .listen_uri = "defer",
> >> -        .start_hook = migrate_hook_start_multifd_mapped_ram_dio,
> >> -        .start = {
> >> -            .caps[MIGRATION_CAPABILITY_MAPPED_RAM] = true,
> >> -            .caps[MIGRATION_CAPABILITY_MULTIFD] = true,
> >> -        },
> >> +        .start.config = qdict_new(),
> >>      };
> >>  
> >> +    qdict_put_bool(args.start.config, "direct-io", true);
> >
> > So the start_hook doesn't take args so we need to duplicate all these
> > direct-io setups in each test.. I assume not a big deal so it's fine, but
> > this is slightly going backward for sure..
> >
> 
> I'm not sure it is. Having to go follow the hooks is confusing,
> specially when hook names start to get similar. Having the test provide
> everything it needs right here is clearer. Also, maintenance of the
> hooks is a pain when it comes to code conflicts. I'd like to see less
> hooks overall.

IMHO it depends.  If a hook can greatly dedup code, then I'll go for it.

This one only contains a dio setup, definitely not a huge deal.

> 
> > What's your plan in mind on the tests?  Looks like you want to keep both
> > ways in tests/, only use it in some tests to cover both paths (and you
> > chose file-tests to start testing config)?  Or is this only an example and
> > you plan to convert more?
> >
> 
> Yes the idea is to cover both paths and I chose file-tests for config
> arbitrarily.

But then file-tests lose the old coverage on using migrate-set-*.

IMHO, we could choose one that will be the officially suggested way, then
let all tests to use it.  With that, we can duplicate one or a few tests to
cover the not-suggested way.

So if "config" is the suggested way, we could make all tests moving over to
"config", then add only one or a few tests to cover migrate-set-parameters?

-- 
Peter Xu


Reply via email to