Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2230490/?format=api
{ "id": 2230490, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2230490/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260429190550.20122-2-farosas@suse.de/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.1/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260429190550.20122-2-farosas@suse.de>", "date": "2026-04-29T19:05:46", "name": "[v1,1/5] tests/qtest/dbus-vmstate: Bring the test up-to-date", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d58621d0fa6d21f90c91632ed987363ad7608466", "submitter": { "id": 85343, "url": "http://patchwork.ozlabs.org/api/1.1/people/85343/?format=api", "name": "Fabiano Rosas", "email": "farosas@suse.de" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260429190550.20122-2-farosas@suse.de/mbox/", "series": [ { "id": 502137, "url": "http://patchwork.ozlabs.org/api/1.1/series/502137/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=502137", "date": "2026-04-29T19:05:45", "name": "tests/qtest: Re-enable dbus-vmstate", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/502137/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2230490/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2230490/checks/", "tags": {}, "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=pkwV8D+e;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=1If5pFj+;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=1B8+HuC3;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=bME7acoI;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)", "smtp-out1.suse.de;\n dkim=pass header.d=suse.de header.s=susede2_rsa header.b=1B8+HuC3;\n dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=bME7acoI" ], "Received": [ "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5Rds1C7Kz1xqf\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 05:08:01 +1000 (AEST)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wIAEV-0001lU-BQ; Wed, 29 Apr 2026 15:06:03 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <farosas@suse.de>) id 1wIAET-0001k0-1c\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 15:06:01 -0400", "from smtp-out1.suse.de ([195.135.223.130])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <farosas@suse.de>) id 1wIAEQ-0000LF-5o\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 15:06:00 -0400", "from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org\n [IPv6:2a07:de40:b281:104:10:150:64:97])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-out1.suse.de (Postfix) with ESMTPS id 4EC176A815;\n Wed, 29 Apr 2026 19:05:55 +0000 (UTC)", "from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id EA272593B0;\n Wed, 29 Apr 2026 19:05:53 +0000 (UTC)", "from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])\n by imap1.dmz-prg2.suse.org with ESMTPSA id ELK6LZFW8mm/eQAAD6G6ig\n (envelope-from <farosas@suse.de>); Wed, 29 Apr 2026 19:05:53 +0000" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1777489556;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=eUxDq/SnIjAGROivgUJT7M70dRNJv1YG66xD1uHbj4c=;\n b=pkwV8D+es/Mq2FDs3LFf3Xn6L5FYJ5EqRhO8wqPH86alJD1MsnVGUvZDvIu3I7JxYWO7h4\n m2Bo3+AzkaM291W9XM3AOGJ3HzHeBEbH9BsXp0pFdqxA1LmWhrOZyaeRNVUtZxw0loZ023\n OBFuvyu+vP9ZiZnfSbhbGxeRqmL0Wlg=", "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1777489556;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=eUxDq/SnIjAGROivgUJT7M70dRNJv1YG66xD1uHbj4c=;\n b=1If5pFj+dtSPaBRyH3HLT1QCV6IXLeG30k2uyKDlnkHnkkMFxWateXobdVsrrtcVO9ZcNS\n RZP29h2Yp/6NcNBg==", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1777489555;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=eUxDq/SnIjAGROivgUJT7M70dRNJv1YG66xD1uHbj4c=;\n b=1B8+HuC3k7/rbbhTdO1yZjVFm4X77j14GOXDfOeTq8KpppTiMPemio+69/Ar4t5XJyfq7r\n qTXwaWwBbdEvifr5IDtPvp2p6HwzlG2jlQqbkNk5HXBpJ66mHduxj+7wLr8R/GvZDBvvUj\n Y0Xa2zTM/FhZLUjzmEoMCR5hJe01R6E=", "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1777489555;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=eUxDq/SnIjAGROivgUJT7M70dRNJv1YG66xD1uHbj4c=;\n b=bME7acoIXKngUIVFdLcyg9RETTp+zRWMDqS7xAkQz4SiznduE2MLn2oR0mXXGOf3aPOece\n oqh6DFjMKVMgmkCQ==" ], "From": "Fabiano Rosas <farosas@suse.de>", "To": "qemu-devel@nongnu.org", "Cc": "Peter Xu <peterx@redhat.com>, marcandre.lureau@redhat.com,\n Laurent Vivier <lvivier@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>", "Subject": "[PATCH v1 1/5] tests/qtest/dbus-vmstate: Bring the test up-to-date", "Date": "Wed, 29 Apr 2026 16:05:46 -0300", "Message-ID": "<20260429190550.20122-2-farosas@suse.de>", "X-Mailer": "git-send-email 2.51.0", "In-Reply-To": "<20260429190550.20122-1-farosas@suse.de>", "References": "<20260429190550.20122-1-farosas@suse.de>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-Rspamd-Action": "no action", "X-Rspamd-Server": "rspamd2.dmz-prg2.suse.org", "X-Spamd-Result": "default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%];\n MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000];\n R_MISSING_CHARSET(0.50)[];\n R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain];\n MX_GOOD(-0.01)[]; TO_DN_SOME(0.00)[]; ARC_NA(0.00)[];\n FUZZY_RATELIMITED(0.00)[rspamd.com];\n SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from];\n MIME_TRACE(0.00)[0:+]; RCVD_VIA_SMTP_AUTH(0.00)[];\n DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from];\n DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[];\n RCPT_COUNT_FIVE(0.00)[5]; RCVD_TLS_ALL(0.00)[];\n DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns,suse.de:dkim,suse.de:mid,suse.de:email];\n RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[];\n DKIM_TRACE(0.00)[suse.de:+]", "X-Rspamd-Queue-Id": "4EC176A815", "X-Spam-Score": "-3.01", "Received-SPF": "pass client-ip=195.135.223.130; envelope-from=farosas@suse.de;\n helo=smtp-out1.suse.de", "X-Spam_score_int": "-43", "X-Spam_score": "-4.4", "X-Spam_bar": "----", "X-Spam_report": "(-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "The dbus-vmstate-test has been disabled for years. Here's the things\nthat have changed in the meantime and how to update the test:\n\n- Migration tests got new headers.\nUpdate the includes.\n\n- migrate_qmp got new parameters.\nUpdate the caller.\n\n- migrate_incoming_qmp is now used instead of -incoming URL.\nUse -incoming defer.\n\n- Tests expecting failure should not check non-zero return code.\nCheck for failed migration state instead.\n\n- The test result enum was introduced.\nReplace the migration_fail flag with the enum.\n\n- The DEVICE state was added.\nReplace wait_for_migration_complete with migration_event_wait, which\nwon't trip on intermediary states.\n\n- Migration completion was reworked.\nExplicitly wait for the RESUME event before asserting runstate is\nRUNNING to avoid checking too quickly and seeing FINISH_MIGRATE\ninstead.\n\n- The FAILING state was added.\nWait for it before waiting for the RESUME event.\n\n- Sanity checks were added to migration_get_env().\nStart calling that function in main.\n\n- qtest_add_func now has a wrapper.\nReplace qtest_add_func with migration_test_add. Update tests'\nsignatures to take MigrationCommon, although it's unused.\n\n- meson now sets up G_TEST_DBUS_DAEMON.\nRemove the logic around it.\n\nSigned-off-by: Fabiano Rosas <farosas@suse.de>\n---\n tests/qtest/dbus-vmstate-test.c | 71 +++++++++++++++++++--------------\n tests/qtest/meson.build | 7 +++-\n 2 files changed, 46 insertions(+), 32 deletions(-)", "diff": "diff --git a/tests/qtest/dbus-vmstate-test.c b/tests/qtest/dbus-vmstate-test.c\nindex 0a82cc9f93..90c050b448 100644\n--- a/tests/qtest/dbus-vmstate-test.c\n+++ b/tests/qtest/dbus-vmstate-test.c\n@@ -2,8 +2,8 @@\n #include <glib/gstdio.h>\n #include <gio/gio.h>\n #include \"libqtest.h\"\n+#include \"migration/migration-qmp.h\"\n #include \"dbus-vmstate1.h\"\n-#include \"migration-helpers.h\"\n \n static char *workdir;\n \n@@ -29,7 +29,7 @@ typedef struct TestServer {\n \n typedef struct Test {\n const char *id_list;\n- bool migrate_fail;\n+ int result;\n bool without_dst_b;\n TestServer srcA;\n TestServer dstA;\n@@ -190,6 +190,7 @@ test_dbus_vmstate(Test *test)\n g_autofree char *uri = NULL;\n QTestState *src_qemu = NULL, *dst_qemu = NULL;\n guint ownsrcA, ownsrcB, owndstA, owndstB;\n+ QTestMigrationState src_state = { };\n \n uri = g_strdup_printf(\"unix:%s/migsocket\", workdir);\n \n@@ -224,17 +225,33 @@ test_dbus_vmstate(Test *test)\n \n src_qemu = qtest_init(src_qemu_args);\n dst_qemu = qtest_init(dst_qemu_args);\n+\n+ migrate_set_capability(src_qemu, \"events\", true);\n+ qtest_qmp_set_event_callback(src_qemu, migrate_watch_for_events,\n+ &src_state);\n+\n set_id_list(test, src_qemu);\n set_id_list(test, dst_qemu);\n \n thread = g_thread_new(\"dbus-vmstate-thread\", dbus_vmstate_thread, loop);\n \n migrate_incoming_qmp(dst_qemu, uri, NULL, \"{}\");\n- migrate_qmp(src_qemu, uri, \"{}\");\n+ migrate_ensure_converge(src_qemu);\n+ migrate_qmp(src_qemu, NULL, uri, NULL, \"{}\");\n test->src_qemu = src_qemu;\n- if (test->migrate_fail) {\n- wait_for_migration_fail(src_qemu, true);\n- qtest_set_expected_status(dst_qemu, EXIT_FAILURE);\n+\n+ if (test->result != MIG_TEST_SUCCEED) {\n+ QDict *rsp;\n+\n+ migration_event_wait(src_qemu, \"failing\");\n+ wait_for_resume(src_qemu, &src_state);\n+ migration_event_wait(src_qemu, \"failed\");\n+\n+ rsp = qtest_qmp_assert_success_ref(src_qemu,\n+ \"{ 'execute': 'query-status' }\");\n+ g_assert(qdict_haskey(rsp, \"running\"));\n+ g_assert(qdict_get_bool(rsp, \"running\"));\n+ qobject_unref(rsp);\n } else {\n wait_for_migration_complete(src_qemu);\n }\n@@ -270,7 +287,7 @@ check_migrated(TestServer *s, TestServer *d)\n }\n \n static void\n-test_dbus_vmstate_without_list(void)\n+test_dbus_vmstate_without_list(char *name, MigrateCommon *args)\n {\n Test test = { 0, };\n \n@@ -281,7 +298,7 @@ test_dbus_vmstate_without_list(void)\n }\n \n static void\n-test_dbus_vmstate_with_list(void)\n+test_dbus_vmstate_with_list(char *name, MigrateCommon *args)\n {\n Test test = { .id_list = \"idA,idB\" };\n \n@@ -292,7 +309,7 @@ test_dbus_vmstate_with_list(void)\n }\n \n static void\n-test_dbus_vmstate_only_a(void)\n+test_dbus_vmstate_only_a(char *name, MigrateCommon *args)\n {\n Test test = { .id_list = \"idA\" };\n \n@@ -303,9 +320,10 @@ test_dbus_vmstate_only_a(void)\n }\n \n static void\n-test_dbus_vmstate_missing_src(void)\n+test_dbus_vmstate_missing_src(char *name, MigrateCommon *args)\n {\n- Test test = { .id_list = \"idA,idC\", .migrate_fail = true };\n+ Test test = { .id_list = \"idA,idC\",\n+ .result = MIG_TEST_FAIL };\n \n /* run in subprocess to silence QEMU error reporting */\n if (g_test_subprocess()) {\n@@ -320,11 +338,11 @@ test_dbus_vmstate_missing_src(void)\n }\n \n static void\n-test_dbus_vmstate_missing_dst(void)\n+test_dbus_vmstate_missing_dst(char *name, MigrateCommon *args)\n {\n Test test = { .id_list = \"idA,idB\",\n .without_dst_b = true,\n- .migrate_fail = true };\n+ .result = MIG_TEST_FAIL };\n \n /* run in subprocess to silence QEMU error reporting */\n if (g_test_subprocess()) {\n@@ -343,15 +361,8 @@ int\n main(int argc, char **argv)\n {\n GError *err = NULL;\n- g_autofree char *dbus_daemon = NULL;\n int ret;\n \n- dbus_daemon = g_build_filename(G_STRINGIFY(SRCDIR),\n- \"tests\",\n- \"dbus-vmstate-daemon.sh\",\n- NULL);\n- g_setenv(\"G_TEST_DBUS_DAEMON\", dbus_daemon, true);\n-\n g_test_init(&argc, &argv, NULL);\n \n workdir = g_dir_make_tmp(\"dbus-vmstate-test-XXXXXX\", &err);\n@@ -362,16 +373,16 @@ main(int argc, char **argv)\n \n g_setenv(\"DBUS_VMSTATE_TEST_TMPDIR\", workdir, true);\n \n- qtest_add_func(\"/dbus-vmstate/without-list\",\n- test_dbus_vmstate_without_list);\n- qtest_add_func(\"/dbus-vmstate/with-list\",\n- test_dbus_vmstate_with_list);\n- qtest_add_func(\"/dbus-vmstate/only-a\",\n- test_dbus_vmstate_only_a);\n- qtest_add_func(\"/dbus-vmstate/missing-src\",\n- test_dbus_vmstate_missing_src);\n- qtest_add_func(\"/dbus-vmstate/missing-dst\",\n- test_dbus_vmstate_missing_dst);\n+ migration_test_add(\"/dbus-vmstate/without-list\",\n+ test_dbus_vmstate_without_list);\n+ migration_test_add(\"/dbus-vmstate/with-list\",\n+ test_dbus_vmstate_with_list);\n+ migration_test_add(\"/dbus-vmstate/only-a\",\n+ test_dbus_vmstate_only_a);\n+ migration_test_add(\"/dbus-vmstate/missing-src\",\n+ test_dbus_vmstate_missing_src);\n+ migration_test_add(\"/dbus-vmstate/missing-dst\",\n+ test_dbus_vmstate_missing_dst);\n \n ret = g_test_run();\n \ndiff --git a/tests/qtest/meson.build b/tests/qtest/meson.build\nindex b735f55fc4..0d04e2cbaa 100644\n--- a/tests/qtest/meson.build\n+++ b/tests/qtest/meson.build\n@@ -126,10 +126,12 @@ if dbus_daemon.found() and gdbus_codegen.found()\n # Temporarily disabled due to Patchew failures:\n #qtests_i386 += ['dbus-vmstate-test']\n dbus_vmstate1 = custom_target('dbus-vmstate description',\n- output: ['dbus-vmstate1.h', 'dbus-vmstate1.c'],\n+ build_by_default: true,\n+ output: [ 'dbus-vmstate1.h', 'dbus-vmstate1.c'],\n input: meson.project_source_root() / 'backends/dbus-vmstate1.xml',\n command: [gdbus_codegen, '@INPUT@',\n '--interface-prefix', 'org.qemu',\n+ '--output-directory', meson.current_build_dir(),\n '--generate-c-code', '@BASENAME@']).to_list()\n else\n dbus_vmstate1 = []\n@@ -385,7 +387,8 @@ qtests = {\n 'bios-tables-test': [io, 'boot-sector.c', 'acpi-utils.c', 'tpm-emu.c'],\n 'cdrom-test': files('boot-sector.c'),\n 'dbus-vmstate-test': files('migration/migration-qmp.c',\n- 'migration/migration-util.c') + dbus_vmstate1,\n+ 'migration/migration-util.c') + dbus_vmstate1 +\n+ [gio],\n 'erst-test': files('erst-test.c'),\n 'ivshmem-test': [rt, '../../contrib/ivshmem-server/ivshmem-server.c'],\n 'migration-test': test_migration_files + migration_tls_files + migration_colo_files,\n", "prefixes": [ "v1", "1/5" ] }