{"id":812488,"url":"http://patchwork.ozlabs.org/api/patches/812488/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170911172022.4738-23-eblake@redhat.com/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","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":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20170911172022.4738-23-eblake@redhat.com>","list_archive_url":null,"date":"2017-09-11T17:20:06","name":"[v7,22/38] qmp-test: Drop dependence on global_qtest","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"cc9515b21aed0e62abebb09c38a8a63283860a49","submitter":{"id":6591,"url":"http://patchwork.ozlabs.org/api/people/6591/?format=json","name":"Eric Blake","email":"eblake@redhat.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170911172022.4738-23-eblake@redhat.com/mbox/","series":[{"id":2534,"url":"http://patchwork.ozlabs.org/api/series/2534/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=2534","date":"2017-09-11T17:19:47","name":"Preliminary libqtest cleanups","version":7,"mbox":"http://patchwork.ozlabs.org/series/2534/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/812488/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/812488/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx04.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx04.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=eblake@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xrZrC6Jvtz9s81\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 12 Sep 2017 03:37:31 +1000 (AEST)","from localhost ([::1]:59407 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1drSeI-0005Kp-0h\n\tfor incoming@patchwork.ozlabs.org; Mon, 11 Sep 2017 13:37:30 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:38647)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1drSOa-0007YN-Br\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:21:17 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1drSOZ-0001IT-4Q\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:21:16 -0400","from mx1.redhat.com ([209.132.183.28]:39440)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <eblake@redhat.com>) id 1drSOY-0001I9-Rz\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:21:15 -0400","from smtp.corp.redhat.com\n\t(int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id EB39227F343\n\tfor <qemu-devel@nongnu.org>; Mon, 11 Sep 2017 17:21:13 +0000 (UTC)","from red.redhat.com (ovpn-120-44.rdu2.redhat.com [10.10.120.44])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 0CB675D9CA;\n\tMon, 11 Sep 2017 17:21:12 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com EB39227F343","From":"Eric Blake <eblake@redhat.com>","To":"qemu-devel@nongnu.org","Date":"Mon, 11 Sep 2017 12:20:06 -0500","Message-Id":"<20170911172022.4738-23-eblake@redhat.com>","In-Reply-To":"<20170911172022.4738-1-eblake@redhat.com>","References":"<20170911172022.4738-1-eblake@redhat.com>","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.14","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.28]);\n\tMon, 11 Sep 2017 17:21:14 +0000 (UTC)","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","Subject":"[Qemu-devel] [PATCH v7 22/38] qmp-test: Drop dependence on\n\tglobal_qtest","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://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\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"pbonzini@redhat.com, thuth@redhat.com, armbru@redhat.com","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"},"content":"As a general rule, we prefer avoiding implicit global state\nbecause it makes code harder to safely copy and paste without\nthinking about the global state.  Although qmp-test does not\nmaintain parallel qtest connections, it was the last test\nassigning to global_qtest.  It's just as easy to be explicit\nabout the state; once all tests have been cleaned up, a later\npatch can then get rid of global_qtest and a layer of wrappers\nin libqtest.\n\nSigned-off-by: Eric Blake <eblake@redhat.com>\nReviewed-by: Thomas Huth <thuth@redhat.com>\n---\n tests/qmp-test.c | 35 ++++++++++++++++++-----------------\n 1 file changed, 18 insertions(+), 17 deletions(-)","diff":"diff --git a/tests/qmp-test.c b/tests/qmp-test.c\nindex c5a5c10b41..4e6198c9fa 100644\n--- a/tests/qmp-test.c\n+++ b/tests/qmp-test.c\n@@ -41,32 +41,32 @@ static void test_version(QObject *version)\n     visit_free(v);\n }\n\n-static void test_malformed(void)\n+static void test_malformed(QTestState *qts)\n {\n     QDict *resp;\n\n     /* Not even a dictionary */\n-    resp = qmp(\"null\");\n+    resp = qtest_qmp(qts, \"null\");\n     g_assert_cmpstr(get_error_class(resp), ==, \"GenericError\");\n     QDECREF(resp);\n\n     /* No \"execute\" key */\n-    resp = qmp(\"{}\");\n+    resp = qtest_qmp(qts, \"{}\");\n     g_assert_cmpstr(get_error_class(resp), ==, \"GenericError\");\n     QDECREF(resp);\n\n     /* \"execute\" isn't a string */\n-    resp = qmp(\"{ 'execute': true }\");\n+    resp = qtest_qmp(qts, \"{ 'execute': true }\");\n     g_assert_cmpstr(get_error_class(resp), ==, \"GenericError\");\n     QDECREF(resp);\n\n     /* \"arguments\" isn't a dictionary */\n-    resp = qmp(\"{ 'execute': 'no-such-cmd', 'arguments': [] }\");\n+    resp = qtest_qmp(qts, \"{ 'execute': 'no-such-cmd', 'arguments': [] }\");\n     g_assert_cmpstr(get_error_class(resp), ==, \"GenericError\");\n     QDECREF(resp);\n\n     /* extra key */\n-    resp = qmp(\"{ 'execute': 'no-such-cmd', 'extra': true }\");\n+    resp = qtest_qmp(qts, \"{ 'execute': 'no-such-cmd', 'extra': true }\");\n     g_assert_cmpstr(get_error_class(resp), ==, \"GenericError\");\n     QDECREF(resp);\n }\n@@ -75,11 +75,12 @@ static void test_qmp_protocol(void)\n {\n     QDict *resp, *q, *ret;\n     QList *capabilities;\n+    QTestState *qts;\n\n-    global_qtest = qtest_init_without_qmp_handshake(common_args);\n+    qts = qtest_init_without_qmp_handshake(common_args);\n\n     /* Test greeting */\n-    resp = qmp_receive();\n+    resp = qtest_qmp_receive(qts);\n     q = qdict_get_qdict(resp, \"QMP\");\n     g_assert(q);\n     test_version(qdict_get(q, \"version\"));\n@@ -88,46 +89,46 @@ static void test_qmp_protocol(void)\n     QDECREF(resp);\n\n     /* Test valid command before handshake */\n-    resp = qmp(\"{ 'execute': 'query-version' }\");\n+    resp = qtest_qmp(qts, \"{ 'execute': 'query-version' }\");\n     g_assert_cmpstr(get_error_class(resp), ==, \"CommandNotFound\");\n     QDECREF(resp);\n\n     /* Test malformed commands before handshake */\n-    test_malformed();\n+    test_malformed(qts);\n\n     /* Test handshake */\n-    resp = qmp(\"{ 'execute': 'qmp_capabilities' }\");\n+    resp = qtest_qmp(qts, \"{ 'execute': 'qmp_capabilities' }\");\n     ret = qdict_get_qdict(resp, \"return\");\n     g_assert(ret && !qdict_size(ret));\n     QDECREF(resp);\n\n     /* Test repeated handshake */\n-    resp = qmp(\"{ 'execute': 'qmp_capabilities' }\");\n+    resp = qtest_qmp(qts, \"{ 'execute': 'qmp_capabilities' }\");\n     g_assert_cmpstr(get_error_class(resp), ==, \"CommandNotFound\");\n     QDECREF(resp);\n\n     /* Test valid command */\n-    resp = qmp(\"{ 'execute': 'query-version' }\");\n+    resp = qtest_qmp(qts, \"{ 'execute': 'query-version' }\");\n     test_version(qdict_get(resp, \"return\"));\n     QDECREF(resp);\n\n     /* Test malformed commands */\n-    test_malformed();\n+    test_malformed(qts);\n\n     /* Test 'id' */\n-    resp = qmp(\"{ 'execute': 'query-name', 'id': 'cookie#1' }\");\n+    resp = qtest_qmp(qts, \"{ 'execute': 'query-name', 'id': 'cookie#1' }\");\n     ret = qdict_get_qdict(resp, \"return\");\n     g_assert(ret);\n     g_assert_cmpstr(qdict_get_try_str(resp, \"id\"), ==, \"cookie#1\");\n     QDECREF(resp);\n\n     /* Test command failure with 'id' */\n-    resp = qmp(\"{ 'execute': 'human-monitor-command', 'id': 2 }\");\n+    resp = qtest_qmp(qts, \"{ 'execute': 'human-monitor-command', 'id': 2 }\");\n     g_assert_cmpstr(get_error_class(resp), ==, \"GenericError\");\n     g_assert_cmpint(qdict_get_int(resp, \"id\"), ==, 2);\n     QDECREF(resp);\n\n-    qtest_end();\n+    qtest_quit(qts);\n }\n\n static int query_error_class(const char *cmd)\n","prefixes":["v7","22/38"]}