From nobody Fri Mar 29 01:13:29 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1560180824; cv=none; d=zoho.com; s=zohoarc; b=mYlAPjqTKUHmeVv8NSYtkYV0rirfuerVU+iHnqPu53zFL4aq7iIPHjg0jNPnUJQ2KExhVWiRWaOOgwMvezL0TPuXg6RncrFtrSpaz/M017AOL3pGwW6UNQ1PLrkrwiITdBUeXv7aXjw1xO3XZwsLICB0CX5f5zwRKFlOEyAeje4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1560180824; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To:ARC-Authentication-Results; bh=b8A+9dKgg5o/iZ48yHDC/E7Oz/P5eBvVBfZe/oxNoHA=; b=jNoNwDmZdazTiEMpzh6CxY0MpVQRKogeoCfAjzUJVd4TStI23cYsd/p9ns8GcGRIqG34gZKdRWHXPPlOfFAwF2gKuQv0YRHFiyoQD4WrBm43ZEG9CDQEvanYprUIqAGvW4u5gHYJPdk4RJGhYy1lZmNkLAAUdVtoKAKP29M52Rw= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1560180824454127.87404895241093; Mon, 10 Jun 2019 08:33:44 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7640A308219E; Mon, 10 Jun 2019 15:33:11 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0D32F60BF1; Mon, 10 Jun 2019 15:32:52 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D5D2E1806B15; Mon, 10 Jun 2019 15:32:30 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x5AFUtFC018003 for ; Mon, 10 Jun 2019 11:30:55 -0400 Received: by smtp.corp.redhat.com (Postfix) id E8BCD60A35; Mon, 10 Jun 2019 15:30:55 +0000 (UTC) Received: from blue.redhat.com (ovpn-116-85.phx2.redhat.com [10.3.116.85]) by smtp.corp.redhat.com (Postfix) with ESMTP id 622F3608CD; Mon, 10 Jun 2019 15:30:53 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Mon, 10 Jun 2019 10:30:44 -0500 Message-Id: <20190610153044.7357-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH] qemumonitorjsontest: Validate more commands against schema X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Mon, 10 Jun 2019 15:33:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The DO_TEST() macro in qemumonitorjsontest.c was not passing the schema through, which meant that we were not validating any of those tests for correct usage according to the schema. Tested by using this hack, where the test mistakenly passed pre-patch, but correctly diagnosed the garbage post-patch: | diff --git i/src/qemu/qemu_monitor_json.c w/src/qemu/qemu_monitor_json.c | index 53a7de8b77..86d8450814 100644 | --- i/src/qemu/qemu_monitor_json.c | +++ w/src/qemu/qemu_monitor_json.c | @@ -1532,7 +1532,8 @@ qemuMonitorJSONGetStatus(qemuMonitorPtr mon, | if (reason) | *reason =3D VIR_DOMAIN_PAUSED_UNKNOWN; | | - if (!(cmd =3D qemuMonitorJSONMakeCommand("query-status", NULL))) | + if (!(cmd =3D qemuMonitorJSONMakeCommand("query-status", | + "s:garbage", "foo", NULL))) | return -1; | | if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) Suggested-by: Peter Krempa Signed-off-by: Eric Blake --- tests/qemumonitorjsontest.c | 251 +++++++++++++++++++++--------------- 1 file changed, 149 insertions(+), 102 deletions(-) diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 0894e748ae..a7f64058d4 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -48,6 +48,12 @@ struct _testQemuMonitorJSONSimpleFuncData { virHashTablePtr schema; }; +typedef struct _testGenericData testGenericData; +struct _testGenericData { + virDomainXMLOptionPtr xmlopt; + virHashTablePtr schema; +}; + const char *queryBlockReply =3D "{" " \"return\": [" @@ -142,10 +148,11 @@ const char *queryBlockReply =3D "}"; static int -testQemuMonitorJSONGetStatus(const void *data) +testQemuMonitorJSONGetStatus(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; bool running =3D false; virDomainPausedReason reason =3D 0; @@ -236,10 +243,11 @@ testQemuMonitorJSONGetStatus(const void *data) } static int -testQemuMonitorJSONGetVersion(const void *data) +testQemuMonitorJSONGetVersion(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; int major; int minor; @@ -339,10 +347,11 @@ testQemuMonitorJSONGetVersion(const void *data) } static int -testQemuMonitorJSONGetMachines(const void *data) +testQemuMonitorJSONGetMachines(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; qemuMonitorMachineInfoPtr *info; int ninfo =3D 0; @@ -421,10 +430,11 @@ testQemuMonitorJSONGetMachines(const void *data) static int -testQemuMonitorJSONGetCPUDefinitions(const void *data) +testQemuMonitorJSONGetCPUDefinitions(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; qemuMonitorCPUDefInfoPtr *cpus =3D NULL; int ncpus =3D 0; @@ -504,10 +514,11 @@ testQemuMonitorJSONGetCPUDefinitions(const void *data) static int -testQemuMonitorJSONGetCommands(const void *data) +testQemuMonitorJSONGetCommands(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; char **commands =3D NULL; int ncommands =3D 0; @@ -569,10 +580,11 @@ testQemuMonitorJSONGetCommands(const void *data) static int -testQemuMonitorJSONGetTPMModels(const void *data) +testQemuMonitorJSONGetTPMModels(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; char **tpmmodels =3D NULL; int ntpmmodels =3D 0; @@ -622,10 +634,11 @@ testQemuMonitorJSONGetTPMModels(const void *data) static int -testQemuMonitorJSONGetCommandLineOptionParameters(const void *data) +testQemuMonitorJSONGetCommandLineOptionParameters(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; char **params =3D NULL; int nparams =3D 0; @@ -776,6 +789,7 @@ testQemuMonitorJSONAttachChardev(const void *opaque) static int qemuMonitorJSONTestAttachOneChardev(virDomainXMLOptionPtr xmlopt, + virHashTablePtr schema, const char *label, virDomainChrSourceDefPtr chr, const char *expectargs, @@ -801,7 +815,7 @@ qemuMonitorJSONTestAttachOneChardev(virDomainXMLOptionP= tr xmlopt, data.chr =3D chr; data.fail =3D fail; data.expectPty =3D expectPty; - if (!(data.test =3D qemuMonitorTestNewSimple(true, xmlopt))) + if (!(data.test =3D qemuMonitorTestNewSchema(xmlopt, schema))) goto cleanup; if (qemuMonitorTestAddItemExpect(data.test, "chardev-add", @@ -821,14 +835,15 @@ qemuMonitorJSONTestAttachOneChardev(virDomainXMLOptio= nPtr xmlopt, } static int -qemuMonitorJSONTestAttachChardev(virDomainXMLOptionPtr xmlopt) +qemuMonitorJSONTestAttachChardev(virDomainXMLOptionPtr xmlopt, + virHashTablePtr schema) { virDomainChrSourceDef chr; int ret =3D 0; #define CHECK(label, fail, expectargs) \ - if (qemuMonitorJSONTestAttachOneChardev(xmlopt, label, &chr, expectarg= s, \ - NULL, NULL, fail) < 0) \ + if (qemuMonitorJSONTestAttachOneChardev(xmlopt, schema, label, &chr, \ + expectargs, NULL, NULL, fail) = < 0) \ ret =3D -1 chr =3D (virDomainChrSourceDef) { .type =3D VIR_DOMAIN_CHR_TYPE_NULL }; @@ -840,7 +855,7 @@ qemuMonitorJSONTestAttachChardev(virDomainXMLOptionPtr = xmlopt) "{'id':'alias','backend':{'type':'null','data':{}}}"); chr =3D (virDomainChrSourceDef) { .type =3D VIR_DOMAIN_CHR_TYPE_PTY }; - if (qemuMonitorJSONTestAttachOneChardev(xmlopt, "pty", &chr, + if (qemuMonitorJSONTestAttachOneChardev(xmlopt, schema, "pty", &chr, "{'id':'alias'," "'backend':{'type':'pty'," "'data':{}}}", @@ -938,10 +953,11 @@ qemuMonitorJSONTestAttachChardev(virDomainXMLOptionPt= r xmlopt) static int -testQemuMonitorJSONDetachChardev(const void *data) +testQemuMonitorJSONDetachChardev(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; if (!test) @@ -971,10 +987,11 @@ testQemuMonitorJSONDetachChardev(const void *data) * {"name": "type", "type": "string"}]} */ static int -testQemuMonitorJSONGetListPaths(const void *data) +testQemuMonitorJSONGetListPaths(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; qemuMonitorJSONListPathPtr *paths; int npaths =3D 0; @@ -1049,10 +1066,11 @@ testQemuMonitorJSONGetListPaths(const void *data) * {"return": true} */ static int -testQemuMonitorJSONGetObjectProperty(const void *data) +testQemuMonitorJSONGetObjectProperty(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; qemuMonitorJSONObjectProperty prop; @@ -1092,10 +1110,11 @@ testQemuMonitorJSONGetObjectProperty(const void *da= ta) * false is not a good idea... */ static int -testQemuMonitorJSONSetObjectProperty(const void *data) +testQemuMonitorJSONSetObjectProperty(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; qemuMonitorJSONObjectProperty prop; @@ -1144,10 +1163,11 @@ testQemuMonitorJSONSetObjectProperty(const void *da= ta) static int -testQemuMonitorJSONGetDeviceAliases(const void *data) +testQemuMonitorJSONGetDeviceAliases(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; char **aliases =3D NULL; const char **alias; @@ -1204,10 +1224,11 @@ testQemuMonitorJSONGetDeviceAliases(const void *dat= a) } static int -testQemuMonitorJSONCPU(const void *data) +testQemuMonitorJSONCPU(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; bool running =3D false; virDomainPausedReason reason =3D 0; @@ -1407,10 +1428,11 @@ testQEMUMonitorJSONqemuMonitorJSONQueryCPUsHelper(q= emuMonitorTestPtr test, static int -testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data) +testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; struct qemuMonitorQueryCpusEntry expect_slow[] =3D { {0, 17622, (char *) "/machine/unattached/device[0]", true}, @@ -1501,10 +1523,11 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const v= oid *data) } static int -testQemuMonitorJSONqemuMonitorJSONGetBalloonInfo(const void *data) +testQemuMonitorJSONqemuMonitorJSONGetBalloonInfo(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; unsigned long long currmem; @@ -1537,10 +1560,11 @@ testQemuMonitorJSONqemuMonitorJSONGetBalloonInfo(co= nst void *data) } static int -testQemuMonitorJSONqemuMonitorJSONGetVirtType(const void *data) +testQemuMonitorJSONqemuMonitorJSONGetVirtType(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; virDomainVirtType virtType; @@ -1614,10 +1638,11 @@ testHashEqualQemuDomainDiskInfo(const void *value1,= const void *value2) } static int -testQemuMonitorJSONqemuMonitorJSONGetBlockInfo(const void *data) +testQemuMonitorJSONqemuMonitorJSONGetBlockInfo(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; virHashTablePtr blockDevices =3D NULL, expectedBlockDevices =3D NULL; struct qemuDomainDiskInfo *info; @@ -1693,10 +1718,11 @@ testQemuMonitorJSONqemuMonitorJSONGetBlockInfo(cons= t void *data) } static int -testQemuMonitorJSONqemuMonitorJSONGetAllBlockStatsInfo(const void *data) +testQemuMonitorJSONqemuMonitorJSONGetAllBlockStatsInfo(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); virHashTablePtr blockstats =3D NULL; qemuBlockStatsPtr stats; int ret =3D -1; @@ -1855,10 +1881,11 @@ testQemuMonitorJSONqemuMonitorJSONGetAllBlockStatsI= nfo(const void *data) static int -testQemuMonitorJSONqemuMonitorJSONGetMigrationCacheSize(const void *data) +testQemuMonitorJSONqemuMonitorJSONGetMigrationCacheSize(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; unsigned long long cacheSize; @@ -1891,10 +1918,11 @@ testQemuMonitorJSONqemuMonitorJSONGetMigrationCache= Size(const void *data) } static int -testQemuMonitorJSONqemuMonitorJSONGetMigrationStats(const void *data) +testQemuMonitorJSONqemuMonitorJSONGetMigrationStats(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; qemuMonitorMigrationStats stats, expectedStats; char *error =3D NULL; @@ -1986,10 +2014,11 @@ testHashEqualChardevInfo(const void *value1, const = void *value2) static int -testQemuMonitorJSONqemuMonitorJSONGetChardevInfo(const void *data) +testQemuMonitorJSONqemuMonitorJSONGetChardevInfo(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; virHashTablePtr info =3D NULL, expectedInfo =3D NULL; qemuMonitorChardevInfo info0 =3D { NULL, VIR_DOMAIN_CHR_DEVICE_STATE_D= EFAULT }; @@ -2107,10 +2136,11 @@ testValidateGetBlockIoThrottle(const virDomainBlock= IoTuneInfo *info, static int -testQemuMonitorJSONqemuMonitorJSONSetBlockIoThrottle(const void *data) +testQemuMonitorJSONqemuMonitorJSONSetBlockIoThrottle(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; virDomainBlockIoTuneInfo info, expectedInfo; @@ -2162,10 +2192,11 @@ testQemuMonitorJSONqemuMonitorJSONSetBlockIoThrottl= e(const void *data) } static int -testQemuMonitorJSONqemuMonitorJSONGetTargetArch(const void *data) +testQemuMonitorJSONqemuMonitorJSONGetTargetArch(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; char *arch; @@ -2199,10 +2230,11 @@ testQemuMonitorJSONqemuMonitorJSONGetTargetArch(con= st void *data) } static int -testQemuMonitorJSONqemuMonitorJSONGetMigrationCapabilities(const void *dat= a) +testQemuMonitorJSONqemuMonitorJSONGetMigrationCapabilities(const void *opa= que) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; const char *cap; char **caps =3D NULL; @@ -2259,10 +2291,11 @@ testQemuMonitorJSONqemuMonitorJSONGetMigrationCapab= ilities(const void *data) } static int -testQemuMonitorJSONqemuMonitorJSONSendKey(const void *data) +testQemuMonitorJSONqemuMonitorJSONSendKey(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; unsigned int keycodes[] =3D {43, 26, 46, 32}; @@ -2284,10 +2317,11 @@ testQemuMonitorJSONqemuMonitorJSONSendKey(const voi= d *data) } static int -testQemuMonitorJSONqemuMonitorJSONSendKeyHoldtime(const void *data) +testQemuMonitorJSONqemuMonitorJSONSendKeyHoldtime(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; unsigned int keycodes[] =3D {43, 26, 46, 32}; @@ -2316,10 +2350,11 @@ testQemuMonitorJSONqemuMonitorJSONSendKeyHoldtime(c= onst void *data) } static int -testQemuMonitorJSONqemuMonitorSupportsActiveCommit(const void *data) +testQemuMonitorJSONqemuMonitorSupportsActiveCommit(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; const char *error1 =3D "{" @@ -2362,10 +2397,11 @@ testQemuMonitorJSONqemuMonitorSupportsActiveCommit(= const void *data) } static int -testQemuMonitorJSONqemuMonitorJSONGetDumpGuestMemoryCapability(const void = *data) +testQemuMonitorJSONqemuMonitorJSONGetDumpGuestMemoryCapability(const void = *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); int ret =3D -1; int cap; const char *reply =3D @@ -2407,6 +2443,7 @@ testQemuMonitorJSONqemuMonitorJSONGetDumpGuestMemoryC= apability(const void *data) struct testCPUData { const char *name; virDomainXMLOptionPtr xmlopt; + virHashTablePtr schema; }; @@ -2414,7 +2451,8 @@ static int testQemuMonitorJSONGetCPUData(const void *opaque) { const struct testCPUData *data =3D opaque; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, data->xmlop= t); + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(data->xmlopt, + data->schema); virCPUDataPtr cpuData =3D NULL; char *jsonFile =3D NULL; char *dataFile =3D NULL; @@ -2480,8 +2518,9 @@ testQemuMonitorJSONGetCPUData(const void *opaque) static int testQemuMonitorJSONGetNonExistingCPUData(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr) opaque; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); virCPUDataPtr cpuData =3D NULL; int rv, ret =3D -1; @@ -2522,10 +2561,11 @@ testQemuMonitorJSONGetNonExistingCPUData(const void= *opaque) } static int -testQemuMonitorJSONGetIOThreads(const void *data) +testQemuMonitorJSONGetIOThreads(const void *opaque) { - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr)data; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, xmlopt); + const testGenericData *data =3D opaque; + virDomainXMLOptionPtr xmlopt =3D data->xmlopt; + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(xmlopt, data->sch= ema); qemuMonitorIOThreadInfoPtr *info; int ninfo =3D 0; int ret =3D -1; @@ -2596,6 +2636,7 @@ struct testCPUInfoData { size_t maxvcpus; virDomainXMLOptionPtr xmlopt; bool fast; + virHashTablePtr schema; }; @@ -2664,7 +2705,8 @@ static int testQemuMonitorCPUInfo(const void *opaque) { const struct testCPUInfoData *data =3D opaque; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(true, data->xmlop= t); + qemuMonitorTestPtr test =3D qemuMonitorTestNewSchema(data->xmlopt, + data->schema); virDomainObjPtr vm =3D NULL; char *queryCpusFile =3D NULL; char *queryHotpluggableFile =3D NULL; @@ -2921,8 +2963,11 @@ mymain(void) } #define DO_TEST(name) \ - if (virTestRun(# name, testQemuMonitorJSON ## name, driver.xmlopt) < 0= ) \ - ret =3D -1 + do { \ + testGenericData data =3D { driver.xmlopt, qapiData.schema }; \ + if (virTestRun(# name, testQemuMonitorJSON ## name, &data) < 0) \ + ret =3D -1; \ + } while (0) #define DO_TEST_SIMPLE(CMD, FNC, ...) \ simpleFunc =3D (testQemuMonitorJSONSimpleFuncData) {.cmd =3D CMD, .fun= c =3D FNC, \ @@ -2941,7 +2986,7 @@ mymain(void) #define DO_TEST_CPU_DATA(name) \ do { \ - struct testCPUData data =3D { name, driver.xmlopt }; \ + struct testCPUData data =3D { name, driver.xmlopt, qapiData.schema= }; \ const char *label =3D "GetCPUData(" name ")"; \ if (virTestRun(label, testQemuMonitorJSONGetCPUData, &data) < 0) \ ret =3D -1; \ @@ -2949,7 +2994,8 @@ mymain(void) #define DO_TEST_CPU_INFO(name, maxvcpus) \ do { \ - struct testCPUInfoData data =3D {name, maxvcpus, driver.xmlopt, fa= lse}; \ + struct testCPUInfoData data =3D {name, maxvcpus, driver.xmlopt, fa= lse, \ + qapiData.schema}; \ if (virTestRun("GetCPUInfo(" name ")", testQemuMonitorCPUInfo, \ &data) < 0) \ ret =3D -1; \ @@ -2957,7 +3003,8 @@ mymain(void) #define DO_TEST_CPU_INFO_FAST(name, maxvcpus) \ do { \ - struct testCPUInfoData data =3D {name, maxvcpus, driver.xmlopt, tr= ue}; \ + struct testCPUInfoData data =3D {name, maxvcpus, driver.xmlopt, tr= ue, \ + qapiData.schema }; \ if (virTestRun("GetCPUInfo(" name ")", testQemuMonitorCPUInfo, \ &data) < 0) \ ret =3D -1; \ @@ -2970,7 +3017,7 @@ mymain(void) DO_TEST(GetCommands); DO_TEST(GetTPMModels); DO_TEST(GetCommandLineOptionParameters); - if (qemuMonitorJSONTestAttachChardev(driver.xmlopt) < 0) + if (qemuMonitorJSONTestAttachChardev(driver.xmlopt, qapiData.schema) <= 0) ret =3D -1; DO_TEST(DetachChardev); DO_TEST(GetListPaths); --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list