[{"id":3673587,"web_url":"http://patchwork.ozlabs.org/comment/3673587/","msgid":"<20260405201133.6f04b585@tpx1>","list_archive_url":null,"date":"2026-04-05T18:11:35","subject":"Re: [PATCH 4/5] tests/qtest: add tests for dynamic monitor add/remove","submitter":{"id":92808,"url":"http://patchwork.ozlabs.org/api/people/92808/","name":"Thomas Huth","email":"th.huth+qemu@posteo.eu"},"content":"Am Thu, 02 Apr 2026 23:19:19 +0200\nschrieb Christian Brauner <brauner@kernel.org>:\n\n> Test the monitor-add, monitor-remove, and query-monitors QMP commands:\n> \n> - Basic lifecycle: chardev-add -> monitor-add -> query-monitors ->\n>   monitor-remove -> chardev-remove\n> - Error: duplicate monitor id\n> - Error: monitor-remove on nonexistent id\n> - Error: monitor-add with nonexistent chardev\n> - Re-add after remove: same id and chardev reusable after removal\n> \n> Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>\n> ---\n>  tests/qtest/qmp-test.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++\n>  1 file changed, 101 insertions(+)\n> \n> diff --git a/tests/qtest/qmp-test.c b/tests/qtest/qmp-test.c\n> index edf0886787..9dbd3a6103 100644\n> --- a/tests/qtest/qmp-test.c\n> +++ b/tests/qtest/qmp-test.c\n> @@ -337,6 +337,105 @@ static void test_qmp_missing_any_arg(void)\n>      qtest_quit(qts);\n>  }\n>  \n> +static void test_qmp_monitor_add_remove(void)\n> +{\n> +    QTestState *qts;\n> +    QDict *resp;\n> +\n> +    qts = qtest_init(common_args);\n> +\n> +    /* Create a null chardev for the dynamic monitor */\n> +    resp = qtest_qmp(qts,\n> +                     \"{'execute': 'chardev-add',\"\n> +                     \" 'arguments': {'id': 'monitor-chardev',\"\n> +                     \"               'backend': {'type': 'null',\"\n> +                     \"                           'data': {}}}}\");\n> +    g_assert(qdict_haskey(resp, \"return\"));\n> +    qobject_unref(resp);\n> +\n> +    /* Add a dynamic monitor */\n> +    resp = qtest_qmp(qts,\n> +                     \"{'execute': 'monitor-add',\"\n> +                     \" 'arguments': {'id': 'dyn-mon',\"\n> +                     \"               'chardev': 'monitor-chardev'}}\");\n> +    g_assert(qdict_haskey(resp, \"return\"));\n> +    qobject_unref(resp);\n> +\n> +    /* Verify it shows up in query-monitors */\n> +    resp = qtest_qmp(qts, \"{'execute': 'query-monitors'}\");\n> +    g_assert(!qdict_haskey(resp, \"error\"));\n> +    qobject_unref(resp);\n> +\n> +    /* Error: duplicate id */\n> +    resp = qtest_qmp(qts,\n> +                     \"{'execute': 'monitor-add',\"\n> +                     \" 'arguments': {'id': 'dyn-mon',\"\n> +                     \"               'chardev': 'monitor-chardev'}}\");\n> +    qmp_expect_error_and_unref(resp, \"GenericError\");\n> +\n> +    /* Remove the dynamic monitor */\n> +    resp = qtest_qmp(qts,\n> +                     \"{'execute': 'monitor-remove',\"\n> +                     \" 'arguments': {'id': 'dyn-mon'}}\");\n> +    g_assert(qdict_haskey(resp, \"return\"));\n> +    qobject_unref(resp);\n> +\n> +    /* Error: remove nonexistent */\n> +    resp = qtest_qmp(qts,\n> +                     \"{'execute': 'monitor-remove',\"\n> +                     \" 'arguments': {'id': 'dyn-mon'}}\");\n> +    qmp_expect_error_and_unref(resp, \"GenericError\");\n> +\n> +    /* Error: remove CLI monitor (the default one) -- find its id first.\n> +     * CLI monitors typically have no id, so use a bogus id to test. */\n\nPlease check coding style with scripts/checkpatch.pl - I guess it will\ncomplain about the multiline comment here.\n\nApart from that, the patch looks fine to me. But I think either a qtest or\na functional test should be enough, you don't need both. I'd maybe\nrecommend to just keep the qtest, since these tests are often run more\nfrequently than the functional tests.\n\n Thomas","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 (2048-bit key;\n secure) header.d=posteo.eu header.i=@posteo.eu header.a=rsa-sha256\n header.s=2017 header.b=El644tHi;\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=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists.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 4fpgX85D4nz1yCs\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 06 Apr 2026 04:11:52 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1w9Rwi-0001pV-UF; Sun, 05 Apr 2026 14:11:40 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <th.huth+qemu@posteo.eu>)\n id 1w9Rwh-0001p7-GH\n for qemu-devel@nongnu.org; Sun, 05 Apr 2026 14:11:39 -0400","from mout01.posteo.de ([185.67.36.65])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <th.huth+qemu@posteo.eu>)\n id 1w9Rwf-00046K-La\n for qemu-devel@nongnu.org; Sun, 05 Apr 2026 14:11:39 -0400","from submission (posteo.de [185.67.36.169])\n by mout01.posteo.de (Postfix) with ESMTPS id 90A2B240028\n for <qemu-devel@nongnu.org>; Sun,  5 Apr 2026 20:11:35 +0200 (CEST)","from customer (localhost [127.0.0.1])\n by submission (posteo.de) with ESMTPSA id 4fpgWp04cgz6tsb;\n Sun,  5 Apr 2026 20:11:33 +0200 (CEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.eu; s=2017;\n t=1775412695; bh=FQm69UZGcGbkg4PG7Mm3WDMpFxwnuJJu0T5Ppef6F4M=;\n h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type:\n Content-Transfer-Encoding:From;\n b=El644tHioNziMQxbZ96EMETjN3QS6mWJSH3RKirKtLNk6MOI9ZU2x4d8Tv/SQD1N6\n zA5k5WClMZ3BswOqDk7/d+uociGvMnDsGEwxP9GVnRiBik0OeKHTKuTjsDjT8BNxPj\n dLuQXM12FoerK57ZaX0UrPRBdKyiIPVMauBH/SHFhjtraQnc14RagfH2zpdml2fQh0\n 87OwGGJELWeZBREQa4cnLd6i74xBIltXbqo6ych9IIbTOfCkpf8VDDkbM7DqQ5bdnI\n IF70ADMYdYLrNdDCTOu5bXPFbMqn93+YBZRgXf2Ytno3JLIcIHOboCjk4tyqom5Er8\n 0XpEBmYGmGjlQ==","Date":"Sun, 05 Apr 2026 18:11:35 +0000","From":"Thomas Huth <th.huth+qemu@posteo.eu>","To":"Christian Brauner <brauner@kernel.org>","Cc":"qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,\n Eric Blake <eblake@redhat.com>, Fabiano Rosas <farosas@suse.de>,\n Laurent Vivier <lvivier@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>,\n Philippe =?utf-8?q?Mathieu-Daud=C3=A9?= <philmd@linaro.org>, \"Daniel P.\n\t=?utf-8?b?QmVycmFuZ8Op?= \" <berrange@redhat.com>","Subject":"Re: [PATCH 4/5] tests/qtest: add tests for dynamic monitor add/remove","Message-ID":"<20260405201133.6f04b585@tpx1>","In-Reply-To":"<20260402-work-qmp-monitor-hotplug-v1-4-6313a5cdd574@kernel.org>","References":"<20260402-work-qmp-monitor-hotplug-v1-0-6313a5cdd574@kernel.org>\n <20260402-work-qmp-monitor-hotplug-v1-4-6313a5cdd574@kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=US-ASCII","Content-Transfer-Encoding":"7bit","Received-SPF":"pass client-ip=185.67.36.65;\n envelope-from=th.huth+qemu@posteo.eu;\n helo=mout01.posteo.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, RCVD_IN_MSPIKE_H2=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001, 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"}}]