From: Fabiano Rosas <farosas@suse.de>
To: Takeru Hayasaka <hayatake396@gmail.com>, qemu-devel@nongnu.org
Cc: Takeru Hayasaka <hayatake396@gmail.com>,
Peter Xu <peterx@redhat.com>, Laurent Vivier <lvivier@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH] tests/qtest/migration: Add mapped-ram/postcopy validation test
Date: Fri, 27 Mar 2026 11:44:47 -0300 [thread overview]
Message-ID: <874im1ib6o.fsf@suse.de> (raw)
In-Reply-To: <20260327030404.1840571-1-hayatake396@gmail.com>
Takeru Hayasaka <hayatake396@gmail.com> writes:
> The migration capability checks reject enabling postcopy-ram together
> with mapped-ram, but there is no qtest covering this incompatibility.
>
> Add a validation test that verifies QMP rejects the combination in
> both capability ordering cases and returns the expected error.
>
> This keeps the existing capability boundary covered without changing
> migration behavior.
>
> Signed-off-by: Takeru Hayasaka <hayatake396@gmail.com>
> ---
> Built with:
> ./configure --target-list=x86_64-softmmu --disable-werror
> ninja -C build tests/qtest/migration-test qemu-system-x86_64
>
> Tested with:
> QTEST_QEMU_BINARY=./build/qemu-system-x86_64 \
> ./build/tests/qtest/migration-test --full \
> -p /x86_64/migration/validate_caps/mapped_ram_postcopy
> ---
> tests/qtest/migration/misc-tests.c | 45 ++++++++++++++++++++++++++++++
> 1 file changed, 45 insertions(+)
>
> diff --git a/tests/qtest/migration/misc-tests.c b/tests/qtest/migration/misc-tests.c
> index 196f1ca84287..ae247250713b 100644
> --- a/tests/qtest/migration/misc-tests.c
> +++ b/tests/qtest/migration/misc-tests.c
> @@ -215,6 +215,49 @@ static void do_test_validate_uri_channel(MigrateCommon *args)
> migrate_end(from, to, false);
> }
>
> +static void do_test_validate_capability_pair(MigrateCommon *args,
You could choose a shorter name here to make it easier on the eyes when
calling this multiple times. "do_test" is certainly superfluous.
> + const char *first_capability,
> + const char *second_capability,
> + const char *expected_error)
> +{
> + QTestState *from, *to;
> + QDict *rsp;
> + const char *error_desc;
> +
> + args->start.hide_stderr = true;
Could set args->start.only_source here to save a bit of time.
> +
> + if (migrate_start(&from, &to, "defer", &args->start)) {
> + return;
> + }
If you move the start and end into the caller, we could use this
function to test several pairs of capabilities without having to start a
new QEMU instance every time.
> +
> + migrate_set_capability(from, first_capability, true);
> +
> + rsp = qtest_qmp_assert_failure_ref(
> + from,
> + "{ 'execute': 'migrate-set-capabilities',"
> + " 'arguments': { 'capabilities': [ { "
> + " 'capability': %s, 'state': true } ] } }",
> + second_capability);
> +
> + error_desc = qdict_get_str(rsp, "desc");
> + g_assert_cmpstr(error_desc, ==, expected_error);
> + qobject_unref(rsp);
> +
> + migrate_end(from, to, false);
> +}
> +
> +static void test_validate_caps_mapped_ram_postcopy(char *name,
> + MigrateCommon *args)
> +{
I think this would be more useful if it were not restricted to just
mapped-ram and postcopy. Take a look at migration_test_add_suffix() and
test_cancel_src_after_status() on how to define a test that can be
applied to multiple strings. Something roughly like this:
g_autofree char *cap_pair = g_path_get_basename(test_path);
if (g_str_equal(cap_pair, "mapped_ram_postcopy")) {
const char *error =
"Mapped-ram migration is incompatible with postcopy";
validate_caps_pair(args, "mapped-ram", "postcopy-ram", error);
validate_caps_pair(args, "postcopy-ram", "mapped-ram", error);
}
> + const char *error =
> + "Mapped-ram migration is incompatible with postcopy";
> +
> + do_test_validate_capability_pair(args, "mapped-ram", "postcopy-ram",
> + error);
> + do_test_validate_capability_pair(args, "postcopy-ram", "mapped-ram",
> + error);
> +}
> +
> static void test_validate_uri_channels_both_set(char *name, MigrateCommon *args)
> {
> args->listen_uri = "defer",
> @@ -276,4 +319,6 @@ void migration_test_add_misc(MigrationTestEnv *env)
> test_validate_uri_channels_both_set);
> migration_test_add("/migration/validate_uri/channels/none_set",
> test_validate_uri_channels_none_set);
> + migration_test_add("/migration/validate_caps/mapped_ram_postcopy",
> + test_validate_caps_mapped_ram_postcopy);
> }
next prev parent reply other threads:[~2026-03-27 14:45 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-27 3:04 [PATCH] tests/qtest/migration: Add mapped-ram/postcopy validation test Takeru Hayasaka
2026-03-27 14:44 ` Fabiano Rosas [this message]
2026-03-27 15:53 ` Takeru Hayasaka
2026-03-27 16:46 ` [PATCH v2] " Takeru Hayasaka
2026-03-30 14:20 ` Fabiano Rosas
2026-03-30 16:19 ` Takeru Hayasaka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=874im1ib6o.fsf@suse.de \
--to=farosas@suse.de \
--cc=hayatake396@gmail.com \
--cc=lvivier@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.