{"id":808935,"url":"http://patchwork.ozlabs.org/api/1.0/patches/808935/?format=json","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.0/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":""},"msgid":"<20170901180340.30009-22-eblake@redhat.com>","date":"2017-09-01T18:03:32","name":"[v6,21/29] qmp-test: Drop dependence on global_qtest","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"2537345a2bd307631281e8adfb446801b50b0489","submitter":{"id":6591,"url":"http://patchwork.ozlabs.org/api/1.0/people/6591/?format=json","name":"Eric Blake","email":"eblake@redhat.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901180340.30009-22-eblake@redhat.com/mbox/","series":[{"id":1089,"url":"http://patchwork.ozlabs.org/api/1.0/series/1089/?format=json","date":"2017-09-01T18:03:12","name":"Preliminary libqtest cleanups","version":6,"mbox":"http://patchwork.ozlabs.org/series/1089/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/808935/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@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-mx01.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx01.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 3xkSKs1BgDz9sNr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat,  2 Sep 2017 04:23:28 +1000 (AEST)","from localhost ([::1]:53441 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 1dnqbG-0000mo-VO\n\tfor incoming@patchwork.ozlabs.org; Fri, 01 Sep 2017 14:23:27 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:56146)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1dnqIo-0007RK-OH\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 14:04:27 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1dnqIj-0001t7-SQ\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 14:04:22 -0400","from mx1.redhat.com ([209.132.183.28]:53526)\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 1dnqIj-0001sP-KJ\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 14:04:17 -0400","from smtp.corp.redhat.com\n\t(int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15])\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 B600281E19\n\tfor <qemu-devel@nongnu.org>; Fri,  1 Sep 2017 18:04:16 +0000 (UTC)","from red.redhat.com (ovpn-121-149.rdu2.redhat.com [10.10.121.149])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id BF40E627DE;\n\tFri,  1 Sep 2017 18:04:15 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com B600281E19","From":"Eric Blake <eblake@redhat.com>","To":"qemu-devel@nongnu.org","Date":"Fri,  1 Sep 2017 13:03:32 -0500","Message-Id":"<20170901180340.30009-22-eblake@redhat.com>","In-Reply-To":"<20170901180340.30009-1-eblake@redhat.com>","References":"<20170901180340.30009-1-eblake@redhat.com>","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.15","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.25]);\n\tFri, 01 Sep 2017 18:04:16 +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 v6 21/29] 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, 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>\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 5d0260b2be..cf523b325e 100644\n--- a/tests/qmp-test.c\n+++ b/tests/qmp-test.c\n@@ -40,32 +40,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@@ -74,11 +74,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@@ -87,46 +88,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 int main(int argc, char *argv[])\n","prefixes":["v6","21/29"]}