From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Yury Kotov <yury-kotov@yandex-team.ru>
Cc: "Laurent Vivier" <lvivier@redhat.com>,
"Thomas Huth" <thuth@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Juan Quintela" <quintela@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
qemu-devel@nongnu.org, yc-core@yandex-team.ru,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 3/3] tests/migration: Add a test for validate-uuid capability
Date: Wed, 11 Sep 2019 11:02:27 +0100 [thread overview]
Message-ID: <20190911100227.GE2894@work-vm> (raw)
In-Reply-To: <20190903162246.18524-4-yury-kotov@yandex-team.ru>
* Yury Kotov (yury-kotov@yandex-team.ru) wrote:
> Signed-off-by: Yury Kotov <yury-kotov@yandex-team.ru>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> tests/migration-test.c | 140 ++++++++++++++++++++++++++++++++---------
> 1 file changed, 110 insertions(+), 30 deletions(-)
>
> diff --git a/tests/migration-test.c b/tests/migration-test.c
> index b87ba99a9e..524caf773f 100644
> --- a/tests/migration-test.c
> +++ b/tests/migration-test.c
> @@ -512,7 +512,8 @@ static void migrate_postcopy_start(QTestState *from, QTestState *to)
>
> static int test_migrate_start(QTestState **from, QTestState **to,
> const char *uri, bool hide_stderr,
> - bool use_shmem)
> + bool use_shmem, const char *opts_src,
> + const char *opts_dst)
> {
> gchar *cmd_src, *cmd_dst;
> char *bootpath = NULL;
> @@ -521,6 +522,9 @@ static int test_migrate_start(QTestState **from, QTestState **to,
> const char *arch = qtest_get_arch();
> const char *accel = "kvm:tcg";
>
> + opts_src = opts_src ? opts_src : "";
> + opts_dst = opts_dst ? opts_dst : "";
> +
> if (use_shmem) {
> if (!g_file_test("/dev/shm", G_FILE_TEST_IS_DIR)) {
> g_test_skip("/dev/shm is not supported");
> @@ -539,16 +543,16 @@ static int test_migrate_start(QTestState **from, QTestState **to,
> cmd_src = g_strdup_printf("-machine accel=%s -m 150M"
> " -name source,debug-threads=on"
> " -serial file:%s/src_serial"
> - " -drive file=%s,format=raw %s",
> + " -drive file=%s,format=raw %s %s",
> accel, tmpfs, bootpath,
> - extra_opts ? extra_opts : "");
> + extra_opts ? extra_opts : "", opts_src);
> cmd_dst = g_strdup_printf("-machine accel=%s -m 150M"
> " -name target,debug-threads=on"
> " -serial file:%s/dest_serial"
> " -drive file=%s,format=raw"
> - " -incoming %s %s",
> + " -incoming %s %s %s",
> accel, tmpfs, bootpath, uri,
> - extra_opts ? extra_opts : "");
> + extra_opts ? extra_opts : "", opts_dst);
> start_address = X86_TEST_MEM_START;
> end_address = X86_TEST_MEM_END;
> } else if (g_str_equal(arch, "s390x")) {
> @@ -556,15 +560,15 @@ static int test_migrate_start(QTestState **from, QTestState **to,
> extra_opts = use_shmem ? get_shmem_opts("128M", shmem_path) : NULL;
> cmd_src = g_strdup_printf("-machine accel=%s -m 128M"
> " -name source,debug-threads=on"
> - " -serial file:%s/src_serial -bios %s %s",
> + " -serial file:%s/src_serial -bios %s %s %s",
> accel, tmpfs, bootpath,
> - extra_opts ? extra_opts : "");
> + extra_opts ? extra_opts : "", opts_src);
> cmd_dst = g_strdup_printf("-machine accel=%s -m 128M"
> " -name target,debug-threads=on"
> " -serial file:%s/dest_serial -bios %s"
> - " -incoming %s %s",
> + " -incoming %s %s %s",
> accel, tmpfs, bootpath, uri,
> - extra_opts ? extra_opts : "");
> + extra_opts ? extra_opts : "", opts_dst);
> start_address = S390_TEST_MEM_START;
> end_address = S390_TEST_MEM_END;
> } else if (strcmp(arch, "ppc64") == 0) {
> @@ -575,14 +579,15 @@ static int test_migrate_start(QTestState **from, QTestState **to,
> " -prom-env 'use-nvramrc?=true' -prom-env "
> "'nvramrc=hex .\" _\" begin %x %x "
> "do i c@ 1 + i c! 1000 +loop .\" B\" 0 "
> - "until' %s", accel, tmpfs, end_address,
> - start_address, extra_opts ? extra_opts : "");
> + "until' %s %s", accel, tmpfs, end_address,
> + start_address, extra_opts ? extra_opts : "",
> + opts_src);
> cmd_dst = g_strdup_printf("-machine accel=%s -m 256M"
> " -name target,debug-threads=on"
> " -serial file:%s/dest_serial"
> - " -incoming %s %s",
> + " -incoming %s %s %s",
> accel, tmpfs, uri,
> - extra_opts ? extra_opts : "");
> + extra_opts ? extra_opts : "", opts_dst);
>
> start_address = PPC_TEST_MEM_START;
> end_address = PPC_TEST_MEM_END;
> @@ -592,16 +597,16 @@ static int test_migrate_start(QTestState **from, QTestState **to,
> cmd_src = g_strdup_printf("-machine virt,accel=%s,gic-version=max "
> "-name vmsource,debug-threads=on -cpu max "
> "-m 150M -serial file:%s/src_serial "
> - "-kernel %s %s",
> + "-kernel %s %s %s",
> accel, tmpfs, bootpath,
> - extra_opts ? extra_opts : "");
> + extra_opts ? extra_opts : "", opts_src);
> cmd_dst = g_strdup_printf("-machine virt,accel=%s,gic-version=max "
> "-name vmdest,debug-threads=on -cpu max "
> "-m 150M -serial file:%s/dest_serial "
> "-kernel %s "
> - "-incoming %s %s",
> + "-incoming %s %s %s",
> accel, tmpfs, bootpath, uri,
> - extra_opts ? extra_opts : "");
> + extra_opts ? extra_opts : "", opts_dst);
>
> start_address = ARM_TEST_MEM_START;
> end_address = ARM_TEST_MEM_END;
> @@ -731,7 +736,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
> char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
> QTestState *from, *to;
>
> - if (test_migrate_start(&from, &to, uri, hide_error, false)) {
> + if (test_migrate_start(&from, &to, uri, hide_error, false, NULL, NULL)) {
> return -1;
> }
>
> @@ -841,20 +846,16 @@ static void test_postcopy_recovery(void)
> migrate_postcopy_complete(from, to);
> }
>
> -static void test_baddest(void)
> +static void wait_for_migration_fail(QTestState *from, bool allow_active)
> {
> - QTestState *from, *to;
> QDict *rsp_return;
> char *status;
> bool failed;
>
> - if (test_migrate_start(&from, &to, "tcp:0:0", true, false)) {
> - return;
> - }
> - migrate(from, "tcp:0:0", "{}");
> do {
> status = migrate_query_status(from);
> - g_assert(!strcmp(status, "setup") || !(strcmp(status, "failed")));
> + g_assert(!strcmp(status, "setup") || !strcmp(status, "failed") ||
> + (allow_active && !strcmp(status, "active")));
> failed = !strcmp(status, "failed");
> g_free(status);
> } while (!failed);
> @@ -864,7 +865,17 @@ static void test_baddest(void)
> g_assert(qdict_haskey(rsp_return, "running"));
> g_assert(qdict_get_bool(rsp_return, "running"));
> qobject_unref(rsp_return);
> +}
> +
> +static void test_baddest(void)
> +{
> + QTestState *from, *to;
>
> + if (test_migrate_start(&from, &to, "tcp:0:0", true, false, NULL, NULL)) {
> + return;
> + }
> + migrate(from, "tcp:0:0", "{}");
> + wait_for_migration_fail(from, false);
> test_migrate_end(from, to, false);
> }
>
> @@ -873,7 +884,7 @@ static void test_precopy_unix(void)
> char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
> QTestState *from, *to;
>
> - if (test_migrate_start(&from, &to, uri, false, false)) {
> + if (test_migrate_start(&from, &to, uri, false, false, NULL, NULL)) {
> return;
> }
>
> @@ -916,7 +927,7 @@ static void test_ignore_shared(void)
> char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
> QTestState *from, *to;
>
> - if (test_migrate_start(&from, &to, uri, false, true)) {
> + if (test_migrate_start(&from, &to, uri, false, true, NULL, NULL)) {
> return;
> }
>
> @@ -951,7 +962,7 @@ static void test_xbzrle(const char *uri)
> {
> QTestState *from, *to;
>
> - if (test_migrate_start(&from, &to, uri, false, false)) {
> + if (test_migrate_start(&from, &to, uri, false, false, NULL, NULL)) {
> return;
> }
>
> @@ -1003,7 +1014,8 @@ static void test_precopy_tcp(void)
> char *uri;
> QTestState *from, *to;
>
> - if (test_migrate_start(&from, &to, "tcp:127.0.0.1:0", false, false)) {
> + if (test_migrate_start(&from, &to, "tcp:127.0.0.1:0", false, false,
> + NULL, NULL)) {
> return;
> }
>
> @@ -1049,7 +1061,7 @@ static void test_migrate_fd_proto(void)
> QDict *rsp;
> const char *error_desc;
>
> - if (test_migrate_start(&from, &to, "defer", false, false)) {
> + if (test_migrate_start(&from, &to, "defer", false, false, NULL, NULL)) {
> return;
> }
>
> @@ -1125,6 +1137,68 @@ static void test_migrate_fd_proto(void)
> test_migrate_end(from, to, true);
> }
>
> +static void do_test_validate_uuid(const char *uuid_arg_src,
> + const char *uuid_arg_dst,
> + bool should_fail, bool hide_stderr)
> +{
> + char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
> + QTestState *from, *to;
> +
> + if (test_migrate_start(&from, &to, uri, hide_stderr, false,
> + uuid_arg_src, uuid_arg_dst)) {
> + return;
> + }
> +
> + /*
> + * UUID validation is at the begin of migration. So, the main process of
> + * migration is not interesting for us here. Thus, set huge downtime for
> + * very fast migration.
> + */
> + migrate_set_parameter_int(from, "downtime-limit", 1000000);
> + migrate_set_capability(from, "validate-uuid", true);
> +
> + /* Wait for the first serial output from the source */
> + wait_for_serial("src_serial");
> +
> + migrate(from, uri, "{}");
> +
> + if (should_fail) {
> + qtest_set_expected_status(to, 1);
> + wait_for_migration_fail(from, true);
> + } else {
> + wait_for_migration_complete(from);
> + }
> +
> + test_migrate_end(from, to, false);
> + g_free(uri);
> +}
> +
> +static void test_validate_uuid(void)
> +{
> + do_test_validate_uuid("-uuid 11111111-1111-1111-1111-111111111111",
> + "-uuid 11111111-1111-1111-1111-111111111111",
> + false, false);
> +}
> +
> +static void test_validate_uuid_error(void)
> +{
> + do_test_validate_uuid("-uuid 11111111-1111-1111-1111-111111111111",
> + "-uuid 22222222-2222-2222-2222-222222222222",
> + true, true);
> +}
> +
> +static void test_validate_uuid_src_not_set(void)
> +{
> + do_test_validate_uuid(NULL, "-uuid 11111111-1111-1111-1111-111111111111",
> + false, true);
> +}
> +
> +static void test_validate_uuid_dst_not_set(void)
> +{
> + do_test_validate_uuid("-uuid 11111111-1111-1111-1111-111111111111", NULL,
> + false, true);
> +}
> +
> int main(int argc, char **argv)
> {
> char template[] = "/tmp/migration-test-XXXXXX";
> @@ -1180,6 +1254,12 @@ int main(int argc, char **argv)
> /* qtest_add_func("/migration/ignore_shared", test_ignore_shared); */
> qtest_add_func("/migration/xbzrle/unix", test_xbzrle_unix);
> qtest_add_func("/migration/fd_proto", test_migrate_fd_proto);
> + qtest_add_func("/migration/validate_uuid", test_validate_uuid);
> + qtest_add_func("/migration/validate_uuid_error", test_validate_uuid_error);
> + qtest_add_func("/migration/validate_uuid_src_not_set",
> + test_validate_uuid_src_not_set);
> + qtest_add_func("/migration/validate_uuid_dst_not_set",
> + test_validate_uuid_dst_not_set);
>
> ret = g_test_run();
>
> --
> 2.17.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2019-09-11 10:03 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-03 16:22 [Qemu-devel] [PATCH v2 0/3] UUID validation during migration Yury Kotov
2019-09-03 16:22 ` [Qemu-devel] [PATCH v2 1/3] migration: Add validate-uuid capability Yury Kotov
2019-09-11 9:15 ` Dr. David Alan Gilbert
2019-09-03 16:22 ` [Qemu-devel] [PATCH v2 2/3] tests/libqtest: Allow setting expected exit status Yury Kotov
2019-09-04 4:19 ` Thomas Huth
2019-09-11 9:46 ` Dr. David Alan Gilbert
2019-09-03 16:22 ` [Qemu-devel] [PATCH v2 3/3] tests/migration: Add a test for validate-uuid capability Yury Kotov
2019-09-11 10:02 ` Dr. David Alan Gilbert [this message]
2019-09-12 10:20 ` [Qemu-devel] [PATCH v2 0/3] UUID validation during migration Dr. David Alan Gilbert
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=20190911100227.GE2894@work-vm \
--to=dgilbert@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=lvivier@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=thuth@redhat.com \
--cc=yc-core@yandex-team.ru \
--cc=yury-kotov@yandex-team.ru \
/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.