* [Qemu-devel] [PATCH 0/6] Get rid of global_qtest in q35-, qom-, numa- and more tests
@ 2019-05-15 17:43 Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 1/6] tests/libqos: Get rid of global_qtest dependency in qvring_init() Thomas Huth
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Thomas Huth @ 2019-05-15 17:43 UTC (permalink / raw)
To: Laurent Vivier, qemu-devel; +Cc: Paolo Bonzini
Here are some more patches that get rid of global_qtest and related
functions in some of the qtests (hacked along the way while waiting
for other compilation and test processes to finish). A global variable
like global_qtest is very problematic in tests that track multiple test
states (like migration tests). But since we often share code between
tests, it is better to avoid these global_qtest related functions
completely - i.e. the plan is to get rid of global_qtest completely
in the long run.
Thomas Huth (6):
tests/libqos: Get rid of global_qtest dependency in qvring_init()
tests/q35-test: Make test independent of global_qtest
tests/numa-test: Use qtest_init() instead of qtest_start()
tests/qom-test: Use qtest_init() instead of qtest_start()
tests/device-introspect: Use qtest_init() instead of qtest_start()
tests/hd-geo-test: Use qtest_init() instead of qtest_start()
tests/device-introspect-test.c | 85 ++++++++++++++++++----------------
tests/hd-geo-test.c | 76 ++++++++++++++++--------------
tests/libqos/virtio-mmio.c | 2 +-
tests/libqos/virtio-pci.c | 3 +-
tests/libqos/virtio.c | 18 +++----
tests/libqos/virtio.h | 3 +-
tests/numa-test.c | 53 ++++++++++++---------
tests/q35-test.c | 39 +++++++---------
tests/qom-test.c | 28 ++++++-----
9 files changed, 163 insertions(+), 144 deletions(-)
--
2.21.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 1/6] tests/libqos: Get rid of global_qtest dependency in qvring_init()
2019-05-15 17:43 [Qemu-devel] [PATCH 0/6] Get rid of global_qtest in q35-, qom-, numa- and more tests Thomas Huth
@ 2019-05-15 17:43 ` Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 2/6] tests/q35-test: Make test independent of global_qtest Thomas Huth
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Thomas Huth @ 2019-05-15 17:43 UTC (permalink / raw)
To: Laurent Vivier, qemu-devel; +Cc: Paolo Bonzini
Library functions should not depend on global_qtest functions like
writew() and writeq(), so that they can also be used in tests that
deal with multiple QTestStates at the same time (like migration tests).
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/libqos/virtio-mmio.c | 2 +-
tests/libqos/virtio-pci.c | 3 ++-
tests/libqos/virtio.c | 18 ++++++++++--------
tests/libqos/virtio.h | 3 ++-
4 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/tests/libqos/virtio-mmio.c b/tests/libqos/virtio-mmio.c
index 3678c07ef0..213a5f9de0 100644
--- a/tests/libqos/virtio-mmio.c
+++ b/tests/libqos/virtio-mmio.c
@@ -148,7 +148,7 @@ static QVirtQueue *qvirtio_mmio_virtqueue_setup(QVirtioDevice *d,
g_assert_cmpint(vq->size & (vq->size - 1), ==, 0);
addr = guest_alloc(alloc, qvring_size(vq->size, dev->page_size));
- qvring_init(alloc, vq, addr);
+ qvring_init(dev->qts, alloc, vq, addr);
qvirtio_mmio_set_queue_address(d, vq->desc / dev->page_size);
return vq;
diff --git a/tests/libqos/virtio-pci.c b/tests/libqos/virtio-pci.c
index 993d347830..a622ca26ca 100644
--- a/tests/libqos/virtio-pci.c
+++ b/tests/libqos/virtio-pci.c
@@ -199,6 +199,7 @@ static QVirtQueue *qvirtio_pci_virtqueue_setup(QVirtioDevice *d,
uint32_t feat;
uint64_t addr;
QVirtQueuePCI *vqpci;
+ QVirtioPCIDevice *qvpcidev = container_of(d, QVirtioPCIDevice, vdev);
vqpci = g_malloc0(sizeof(*vqpci));
feat = qvirtio_pci_get_guest_features(d);
@@ -224,7 +225,7 @@ static QVirtQueue *qvirtio_pci_virtqueue_setup(QVirtioDevice *d,
addr = guest_alloc(alloc, qvring_size(vqpci->vq.size,
VIRTIO_PCI_VRING_ALIGN));
- qvring_init(alloc, &vqpci->vq, addr);
+ qvring_init(qvpcidev->pdev->bus->qts, alloc, &vqpci->vq, addr);
qvirtio_pci_set_queue_address(d, vqpci->vq.desc / VIRTIO_PCI_VRING_ALIGN);
return &vqpci->vq;
diff --git a/tests/libqos/virtio.c b/tests/libqos/virtio.c
index 5e8f39b4d3..b4c01dc0c1 100644
--- a/tests/libqos/virtio.c
+++ b/tests/libqos/virtio.c
@@ -162,7 +162,8 @@ void qvirtio_wait_config_isr(QVirtioDevice *d, gint64 timeout_us)
}
}
-void qvring_init(const QGuestAllocator *alloc, QVirtQueue *vq, uint64_t addr)
+void qvring_init(QTestState *qts, const QGuestAllocator *alloc, QVirtQueue *vq,
+ uint64_t addr)
{
int i;
@@ -173,22 +174,23 @@ void qvring_init(const QGuestAllocator *alloc, QVirtQueue *vq, uint64_t addr)
for (i = 0; i < vq->size - 1; i++) {
/* vq->desc[i].addr */
- writeq(vq->desc + (16 * i), 0);
+ qtest_writeq(qts, vq->desc + (16 * i), 0);
/* vq->desc[i].next */
- writew(vq->desc + (16 * i) + 14, i + 1);
+ qtest_writew(qts, vq->desc + (16 * i) + 14, i + 1);
}
/* vq->avail->flags */
- writew(vq->avail, 0);
+ qtest_writew(qts, vq->avail, 0);
/* vq->avail->idx */
- writew(vq->avail + 2, 0);
+ qtest_writew(qts, vq->avail + 2, 0);
/* vq->avail->used_event */
- writew(vq->avail + 4 + (2 * vq->size), 0);
+ qtest_writew(qts, vq->avail + 4 + (2 * vq->size), 0);
/* vq->used->flags */
- writew(vq->used, 0);
+ qtest_writew(qts, vq->used, 0);
/* vq->used->avail_event */
- writew(vq->used + 2 + sizeof(struct vring_used_elem) * vq->size, 0);
+ qtest_writew(qts, vq->used + 2 + sizeof(struct vring_used_elem) * vq->size,
+ 0);
}
QVRingIndirectDesc *qvring_indirect_desc_setup(QVirtioDevice *d,
diff --git a/tests/libqos/virtio.h b/tests/libqos/virtio.h
index 51d2359ace..7b97f5e567 100644
--- a/tests/libqos/virtio.h
+++ b/tests/libqos/virtio.h
@@ -129,7 +129,8 @@ QVirtQueue *qvirtqueue_setup(QVirtioDevice *d,
void qvirtqueue_cleanup(const QVirtioBus *bus, QVirtQueue *vq,
QGuestAllocator *alloc);
-void qvring_init(const QGuestAllocator *alloc, QVirtQueue *vq, uint64_t addr);
+void qvring_init(QTestState *qts, const QGuestAllocator *alloc, QVirtQueue *vq,
+ uint64_t addr);
QVRingIndirectDesc *qvring_indirect_desc_setup(QVirtioDevice *d,
QGuestAllocator *alloc, uint16_t elem);
void qvring_indirect_desc_add(QVRingIndirectDesc *indirect, uint64_t data,
--
2.21.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 2/6] tests/q35-test: Make test independent of global_qtest
2019-05-15 17:43 [Qemu-devel] [PATCH 0/6] Get rid of global_qtest in q35-, qom-, numa- and more tests Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 1/6] tests/libqos: Get rid of global_qtest dependency in qvring_init() Thomas Huth
@ 2019-05-15 17:43 ` Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 3/6] tests/numa-test: Use qtest_init() instead of qtest_start() Thomas Huth
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Thomas Huth @ 2019-05-15 17:43 UTC (permalink / raw)
To: Laurent Vivier, qemu-devel; +Cc: Paolo Bonzini
Use a local QTestState variable, so that we can finally get rid
of the undesired global_qtest variable in this file, too.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/q35-test.c | 39 ++++++++++++++++++---------------------
1 file changed, 18 insertions(+), 21 deletions(-)
diff --git a/tests/q35-test.c b/tests/q35-test.c
index 34b34bc2b9..a68183d513 100644
--- a/tests/q35-test.c
+++ b/tests/q35-test.c
@@ -84,10 +84,11 @@ static void test_smram_lock(void)
QPCIBus *pcibus;
QPCIDevice *pcidev;
QDict *response;
+ QTestState *qts;
- qtest_start("-M q35");
+ qts = qtest_init("-M q35");
- pcibus = qpci_new_pc(global_qtest, NULL);
+ pcibus = qpci_new_pc(qts, NULL);
g_assert(pcibus != NULL);
pcidev = qpci_device_find(pcibus, 0);
@@ -106,7 +107,7 @@ static void test_smram_lock(void)
g_assert(smram_test_bit(pcidev, MCH_HOST_BRIDGE_SMRAM_D_OPEN) == false);
/* reset */
- response = qmp("{'execute': 'system_reset', 'arguments': {} }");
+ response = qtest_qmp(qts, "{'execute': 'system_reset', 'arguments': {} }");
g_assert(response);
g_assert(!qdict_haskey(response, "error"));
qobject_unref(response);
@@ -120,33 +121,29 @@ static void test_smram_lock(void)
g_free(pcidev);
qpci_free_pc(pcibus);
- qtest_end();
+ qtest_quit(qts);
}
static void test_tseg_size(const void *data)
{
const TsegSizeArgs *args = data;
- char *cmdline;
QPCIBus *pcibus;
QPCIDevice *pcidev;
uint8_t smram_val;
uint8_t esmramc_val;
uint32_t ram_offs;
+ QTestState *qts;
if (args->esmramc_tseg_sz == MCH_HOST_BRIDGE_ESMRAMC_TSEG_SZ_MASK) {
- cmdline = g_strdup_printf("-M q35 -m %uM "
- "-global mch.extended-tseg-mbytes=%u",
- TSEG_SIZE_TEST_GUEST_RAM_MBYTES,
- args->extended_tseg_mbytes);
+ qts = qtest_initf("-M q35 -m %uM -global mch.extended-tseg-mbytes=%u",
+ TSEG_SIZE_TEST_GUEST_RAM_MBYTES,
+ args->extended_tseg_mbytes);
} else {
- cmdline = g_strdup_printf("-M q35 -m %uM",
- TSEG_SIZE_TEST_GUEST_RAM_MBYTES);
+ qts = qtest_initf("-M q35 -m %uM", TSEG_SIZE_TEST_GUEST_RAM_MBYTES);
}
- qtest_start(cmdline);
- g_free(cmdline);
/* locate the DRAM controller */
- pcibus = qpci_new_pc(global_qtest, NULL);
+ pcibus = qpci_new_pc(qts, NULL);
g_assert(pcibus != NULL);
pcidev = qpci_device_find(pcibus, 0);
g_assert(pcidev != NULL);
@@ -175,18 +172,18 @@ static void test_tseg_size(const void *data)
*/
ram_offs = (TSEG_SIZE_TEST_GUEST_RAM_MBYTES - args->expected_tseg_mbytes) *
1024 * 1024 - 1;
- g_assert_cmpint(readb(ram_offs), ==, 0);
- writeb(ram_offs, 1);
- g_assert_cmpint(readb(ram_offs), ==, 1);
+ g_assert_cmpint(qtest_readb(qts, ram_offs), ==, 0);
+ qtest_writeb(qts, ram_offs, 1);
+ g_assert_cmpint(qtest_readb(qts, ram_offs), ==, 1);
ram_offs++;
- g_assert_cmpint(readb(ram_offs), ==, 0xff);
- writeb(ram_offs, 1);
- g_assert_cmpint(readb(ram_offs), ==, 0xff);
+ g_assert_cmpint(qtest_readb(qts, ram_offs), ==, 0xff);
+ qtest_writeb(qts, ram_offs, 1);
+ g_assert_cmpint(qtest_readb(qts, ram_offs), ==, 0xff);
g_free(pcidev);
qpci_free_pc(pcibus);
- qtest_end();
+ qtest_quit(qts);
}
int main(int argc, char **argv)
--
2.21.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 3/6] tests/numa-test: Use qtest_init() instead of qtest_start()
2019-05-15 17:43 [Qemu-devel] [PATCH 0/6] Get rid of global_qtest in q35-, qom-, numa- and more tests Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 1/6] tests/libqos: Get rid of global_qtest dependency in qvring_init() Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 2/6] tests/q35-test: Make test independent of global_qtest Thomas Huth
@ 2019-05-15 17:43 ` Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 4/6] tests/qom-test: " Thomas Huth
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Thomas Huth @ 2019-05-15 17:43 UTC (permalink / raw)
To: Laurent Vivier, qemu-devel; +Cc: Paolo Bonzini
qtest_start() + qtest_end() should be avoided, since they use the
global_qtest variable that we want to get rid of in the long run.
Use qtest_init() and qtest_quit() instead.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/numa-test.c | 53 +++++++++++++++++++++++++++--------------------
1 file changed, 30 insertions(+), 23 deletions(-)
diff --git a/tests/numa-test.c b/tests/numa-test.c
index 9824fdd587..8de8581231 100644
--- a/tests/numa-test.c
+++ b/tests/numa-test.c
@@ -23,18 +23,19 @@ static void test_mon_explicit(const void *data)
{
char *s;
char *cli;
+ QTestState *qts;
cli = make_cli(data, "-smp 8 "
"-numa node,nodeid=0,cpus=0-3 "
"-numa node,nodeid=1,cpus=4-7 ");
- qtest_start(cli);
+ qts = qtest_init(cli);
- s = hmp("info numa");
+ s = qtest_hmp(qts, "info numa");
g_assert(strstr(s, "node 0 cpus: 0 1 2 3"));
g_assert(strstr(s, "node 1 cpus: 4 5 6 7"));
g_free(s);
- qtest_end();
+ qtest_quit(qts);
g_free(cli);
}
@@ -42,16 +43,17 @@ static void test_mon_default(const void *data)
{
char *s;
char *cli;
+ QTestState *qts;
cli = make_cli(data, "-smp 8 -numa node -numa node");
- qtest_start(cli);
+ qts = qtest_init(cli);
- s = hmp("info numa");
+ s = qtest_hmp(qts, "info numa");
g_assert(strstr(s, "node 0 cpus: 0 2 4 6"));
g_assert(strstr(s, "node 1 cpus: 1 3 5 7"));
g_free(s);
- qtest_end();
+ qtest_quit(qts);
g_free(cli);
}
@@ -59,24 +61,25 @@ static void test_mon_partial(const void *data)
{
char *s;
char *cli;
+ QTestState *qts;
cli = make_cli(data, "-smp 8 "
"-numa node,nodeid=0,cpus=0-1 "
"-numa node,nodeid=1,cpus=4-5 ");
- qtest_start(cli);
+ qts = qtest_init(cli);
- s = hmp("info numa");
+ s = qtest_hmp(qts, "info numa");
g_assert(strstr(s, "node 0 cpus: 0 1 2 3 6 7"));
g_assert(strstr(s, "node 1 cpus: 4 5"));
g_free(s);
- qtest_end();
+ qtest_quit(qts);
g_free(cli);
}
-static QList *get_cpus(QDict **resp)
+static QList *get_cpus(QTestState *qts, QDict **resp)
{
- *resp = qmp("{ 'execute': 'query-cpus' }");
+ *resp = qtest_qmp(qts, "{ 'execute': 'query-cpus' }");
g_assert(*resp);
g_assert(qdict_haskey(*resp, "return"));
return qdict_get_qlist(*resp, "return");
@@ -88,10 +91,11 @@ static void test_query_cpus(const void *data)
QDict *resp;
QList *cpus;
QObject *e;
+ QTestState *qts;
cli = make_cli(data, "-smp 8 -numa node,cpus=0-3 -numa node,cpus=4-7");
- qtest_start(cli);
- cpus = get_cpus(&resp);
+ qts = qtest_init(cli);
+ cpus = get_cpus(qts, &resp);
g_assert(cpus);
while ((e = qlist_pop(cpus))) {
@@ -115,7 +119,7 @@ static void test_query_cpus(const void *data)
}
qobject_unref(resp);
- qtest_end();
+ qtest_quit(qts);
g_free(cli);
}
@@ -125,6 +129,7 @@ static void pc_numa_cpu(const void *data)
QDict *resp;
QList *cpus;
QObject *e;
+ QTestState *qts;
cli = make_cli(data, "-cpu pentium -smp 8,sockets=2,cores=2,threads=2 "
"-numa node,nodeid=0 -numa node,nodeid=1 "
@@ -132,8 +137,8 @@ static void pc_numa_cpu(const void *data)
"-numa cpu,node-id=0,socket-id=1,core-id=0 "
"-numa cpu,node-id=0,socket-id=1,core-id=1,thread-id=0 "
"-numa cpu,node-id=1,socket-id=1,core-id=1,thread-id=1");
- qtest_start(cli);
- cpus = get_cpus(&resp);
+ qts = qtest_init(cli);
+ cpus = get_cpus(qts, &resp);
g_assert(cpus);
while ((e = qlist_pop(cpus))) {
@@ -168,7 +173,7 @@ static void pc_numa_cpu(const void *data)
}
qobject_unref(resp);
- qtest_end();
+ qtest_quit(qts);
g_free(cli);
}
@@ -178,6 +183,7 @@ static void spapr_numa_cpu(const void *data)
QDict *resp;
QList *cpus;
QObject *e;
+ QTestState *qts;
cli = make_cli(data, "-smp 4,cores=4 "
"-numa node,nodeid=0 -numa node,nodeid=1 "
@@ -185,8 +191,8 @@ static void spapr_numa_cpu(const void *data)
"-numa cpu,node-id=0,core-id=1 "
"-numa cpu,node-id=0,core-id=2 "
"-numa cpu,node-id=1,core-id=3");
- qtest_start(cli);
- cpus = get_cpus(&resp);
+ qts = qtest_init(cli);
+ cpus = get_cpus(qts, &resp);
g_assert(cpus);
while ((e = qlist_pop(cpus))) {
@@ -213,7 +219,7 @@ static void spapr_numa_cpu(const void *data)
}
qobject_unref(resp);
- qtest_end();
+ qtest_quit(qts);
g_free(cli);
}
@@ -223,13 +229,14 @@ static void aarch64_numa_cpu(const void *data)
QDict *resp;
QList *cpus;
QObject *e;
+ QTestState *qts;
cli = make_cli(data, "-smp 2 "
"-numa node,nodeid=0 -numa node,nodeid=1 "
"-numa cpu,node-id=1,thread-id=0 "
"-numa cpu,node-id=0,thread-id=1");
- qtest_start(cli);
- cpus = get_cpus(&resp);
+ qts = qtest_init(cli);
+ cpus = get_cpus(qts, &resp);
g_assert(cpus);
while ((e = qlist_pop(cpus))) {
@@ -256,7 +263,7 @@ static void aarch64_numa_cpu(const void *data)
}
qobject_unref(resp);
- qtest_end();
+ qtest_quit(qts);
g_free(cli);
}
--
2.21.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 4/6] tests/qom-test: Use qtest_init() instead of qtest_start()
2019-05-15 17:43 [Qemu-devel] [PATCH 0/6] Get rid of global_qtest in q35-, qom-, numa- and more tests Thomas Huth
` (2 preceding siblings ...)
2019-05-15 17:43 ` [Qemu-devel] [PATCH 3/6] tests/numa-test: Use qtest_init() instead of qtest_start() Thomas Huth
@ 2019-05-15 17:43 ` Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 5/6] tests/device-introspect: " Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 6/6] tests/hd-geo-test: " Thomas Huth
5 siblings, 0 replies; 7+ messages in thread
From: Thomas Huth @ 2019-05-15 17:43 UTC (permalink / raw)
To: Laurent Vivier, qemu-devel; +Cc: Paolo Bonzini
qtest_start() + qtest_end() should be avoided, since they use the
global_qtest variable that we want to get rid of in the long run.
Use qtest_init() and qtest_quit() instead.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/qom-test.c | 28 +++++++++++++---------------
1 file changed, 13 insertions(+), 15 deletions(-)
diff --git a/tests/qom-test.c b/tests/qom-test.c
index 73c52af3bb..4f94cc678c 100644
--- a/tests/qom-test.c
+++ b/tests/qom-test.c
@@ -44,7 +44,7 @@ static bool is_blacklisted(const char *arch, const char *mach)
return false;
}
-static void test_properties(const char *path, bool recurse)
+static void test_properties(QTestState *qts, const char *path, bool recurse)
{
char *child_path;
QDict *response, *tuple, *tmp;
@@ -52,8 +52,8 @@ static void test_properties(const char *path, bool recurse)
QListEntry *entry;
g_test_message("Obtaining properties of %s", path);
- response = qmp("{ 'execute': 'qom-list',"
- " 'arguments': { 'path': %s } }", path);
+ response = qtest_qmp(qts, "{ 'execute': 'qom-list',"
+ " 'arguments': { 'path': %s } }", path);
g_assert(response);
if (!recurse) {
@@ -71,15 +71,15 @@ static void test_properties(const char *path, bool recurse)
if (is_child || is_link) {
child_path = g_strdup_printf("%s/%s",
path, qdict_get_str(tuple, "name"));
- test_properties(child_path, is_child);
+ test_properties(qts, child_path, is_child);
g_free(child_path);
} else {
const char *prop = qdict_get_str(tuple, "name");
g_test_message("Testing property %s.%s", path, prop);
- tmp = qmp("{ 'execute': 'qom-get',"
- " 'arguments': { 'path': %s,"
- " 'property': %s } }",
- path, prop);
+ tmp = qtest_qmp(qts,
+ "{ 'execute': 'qom-get',"
+ " 'arguments': { 'path': %s, 'property': %s } }",
+ path, prop);
/* qom-get may fail but should not, e.g., segfault. */
g_assert(tmp);
qobject_unref(tmp);
@@ -91,20 +91,18 @@ static void test_properties(const char *path, bool recurse)
static void test_machine(gconstpointer data)
{
const char *machine = data;
- char *args;
QDict *response;
+ QTestState *qts;
- args = g_strdup_printf("-machine %s", machine);
- qtest_start(args);
+ qts = qtest_initf("-machine %s", machine);
- test_properties("/machine", true);
+ test_properties(qts, "/machine", true);
- response = qmp("{ 'execute': 'quit' }");
+ response = qtest_qmp(qts, "{ 'execute': 'quit' }");
g_assert(qdict_haskey(response, "return"));
qobject_unref(response);
- qtest_end();
- g_free(args);
+ qtest_quit(qts);
g_free((void *)machine);
}
--
2.21.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 5/6] tests/device-introspect: Use qtest_init() instead of qtest_start()
2019-05-15 17:43 [Qemu-devel] [PATCH 0/6] Get rid of global_qtest in q35-, qom-, numa- and more tests Thomas Huth
` (3 preceding siblings ...)
2019-05-15 17:43 ` [Qemu-devel] [PATCH 4/6] tests/qom-test: " Thomas Huth
@ 2019-05-15 17:43 ` Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 6/6] tests/hd-geo-test: " Thomas Huth
5 siblings, 0 replies; 7+ messages in thread
From: Thomas Huth @ 2019-05-15 17:43 UTC (permalink / raw)
To: Laurent Vivier, qemu-devel; +Cc: Paolo Bonzini
qtest_start() + qtest_end() should be avoided, since they use the
global_qtest variable that we want to get rid of in the long run.
Use qtest_init() and qtest_quit() instead.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/device-introspect-test.c | 85 ++++++++++++++++++----------------
1 file changed, 46 insertions(+), 39 deletions(-)
diff --git a/tests/device-introspect-test.c b/tests/device-introspect-test.c
index a25092dfaa..04f22903b0 100644
--- a/tests/device-introspect-test.c
+++ b/tests/device-introspect-test.c
@@ -26,7 +26,8 @@
const char common_args[] = "-nodefaults -machine none";
-static QList *qom_list_types(const char *implements, bool abstract)
+static QList *qom_list_types(QTestState * qts, const char *implements,
+ bool abstract)
{
QDict *resp;
QList *ret;
@@ -36,8 +37,8 @@ static QList *qom_list_types(const char *implements, bool abstract)
if (implements) {
qdict_put_str(args, "implements", implements);
}
- resp = qmp("{'execute': 'qom-list-types',"
- " 'arguments': %p }", args);
+ resp = qtest_qmp(qts, "{'execute': 'qom-list-types', 'arguments': %p }",
+ args);
g_assert(qdict_haskey(resp, "return"));
ret = qdict_get_qlist(resp, "return");
qobject_ref(ret);
@@ -95,12 +96,12 @@ static QDict *type_list_find(QList *types, const char *name)
return NULL;
}
-static QList *device_type_list(bool abstract)
+static QList *device_type_list(QTestState *qts, bool abstract)
{
- return qom_list_types("device", abstract);
+ return qom_list_types(qts, "device", abstract);
}
-static void test_one_device(const char *type)
+static void test_one_device(QTestState *qts, const char *type)
{
QDict *resp;
char *help;
@@ -109,15 +110,15 @@ static void test_one_device(const char *type)
g_test_message("Testing device '%s'", type);
- qom_tree_start = hmp("info qom-tree");
- qtree_start = hmp("info qtree");
+ qom_tree_start = qtest_hmp(qts, "info qom-tree");
+ qtree_start = qtest_hmp(qts, "info qtree");
- resp = qmp("{'execute': 'device-list-properties',"
- " 'arguments': {'typename': %s}}",
+ resp = qtest_qmp(qts, "{'execute': 'device-list-properties',"
+ " 'arguments': {'typename': %s}}",
type);
qobject_unref(resp);
- help = hmp("device_add \"%s,help\"", type);
+ help = qtest_hmp(qts, "device_add \"%s,help\"", type);
g_free(help);
/*
@@ -125,12 +126,12 @@ static void test_one_device(const char *type)
* "info qom-tree" or "info qtree" have a good chance at crashing then.
* Also make sure that the tree did not change.
*/
- qom_tree_end = hmp("info qom-tree");
+ qom_tree_end = qtest_hmp(qts, "info qom-tree");
g_assert_cmpstr(qom_tree_start, ==, qom_tree_end);
g_free(qom_tree_start);
g_free(qom_tree_end);
- qtree_end = hmp("info qtree");
+ qtree_end = qtest_hmp(qts, "info qtree");
g_assert_cmpstr(qtree_start, ==, qtree_end);
g_free(qtree_start);
g_free(qtree_end);
@@ -140,29 +141,30 @@ static void test_device_intro_list(void)
{
QList *types;
char *help;
+ QTestState *qts;
- qtest_start(common_args);
+ qts = qtest_init(common_args);
- types = device_type_list(true);
+ types = device_type_list(qts, true);
qobject_unref(types);
- help = hmp("device_add help");
+ help = qtest_hmp(qts, "device_add help");
g_free(help);
- qtest_end();
+ qtest_quit(qts);
}
/*
* Ensure all entries returned by qom-list-types implements=<parent>
* have <parent> as a parent.
*/
-static void test_qom_list_parents(const char *parent)
+static void test_qom_list_parents(QTestState *qts, const char *parent)
{
QList *types;
QListEntry *e;
QDict *index;
- types = qom_list_types(parent, true);
+ types = qom_list_types(qts, parent, true);
index = qom_type_index(types);
QLIST_FOREACH_ENTRY(types, e) {
@@ -181,11 +183,12 @@ static void test_qom_list_fields(void)
QList *all_types;
QList *non_abstract;
QListEntry *e;
+ QTestState *qts;
- qtest_start(common_args);
+ qts = qtest_init(common_args);
- all_types = qom_list_types(NULL, true);
- non_abstract = qom_list_types(NULL, false);
+ all_types = qom_list_types(qts, NULL, true);
+ non_abstract = qom_list_types(qts, NULL, false);
QLIST_FOREACH_ENTRY(all_types, e) {
QDict *d = qobject_to(QDict, qlist_entry_obj(e));
@@ -198,27 +201,29 @@ static void test_qom_list_fields(void)
g_assert(abstract == expected_abstract);
}
- test_qom_list_parents("object");
- test_qom_list_parents("device");
- test_qom_list_parents("sys-bus-device");
+ test_qom_list_parents(qts, "object");
+ test_qom_list_parents(qts, "device");
+ test_qom_list_parents(qts, "sys-bus-device");
qobject_unref(all_types);
qobject_unref(non_abstract);
- qtest_end();
+ qtest_quit(qts);
}
static void test_device_intro_none(void)
{
- qtest_start(common_args);
- test_one_device("nonexistent");
- qtest_end();
+ QTestState *qts = qtest_init(common_args);
+
+ test_one_device(qts, "nonexistent");
+ qtest_quit(qts);
}
static void test_device_intro_abstract(void)
{
- qtest_start(common_args);
- test_one_device("device");
- qtest_end();
+ QTestState *qts = qtest_init(common_args);
+
+ test_one_device(qts, "device");
+ qtest_quit(qts);
}
static void test_device_intro_concrete(const void *args)
@@ -226,19 +231,20 @@ static void test_device_intro_concrete(const void *args)
QList *types;
QListEntry *entry;
const char *type;
+ QTestState *qts;
- qtest_start(args);
- types = device_type_list(false);
+ qts = qtest_init(args);
+ types = device_type_list(qts, false);
QLIST_FOREACH_ENTRY(types, entry) {
type = qdict_get_try_str(qobject_to(QDict, qlist_entry_obj(entry)),
"name");
g_assert(type);
- test_one_device(type);
+ test_one_device(qts, type);
}
qobject_unref(types);
- qtest_end();
+ qtest_quit(qts);
g_free((void *)args);
}
@@ -247,10 +253,11 @@ static void test_abstract_interfaces(void)
QList *all_types;
QListEntry *e;
QDict *index;
+ QTestState *qts;
- qtest_start(common_args);
+ qts = qtest_init(common_args);
- all_types = qom_list_types("interface", true);
+ all_types = qom_list_types(qts, "interface", true);
index = qom_type_index(all_types);
QLIST_FOREACH_ENTRY(all_types, e) {
@@ -273,7 +280,7 @@ static void test_abstract_interfaces(void)
qobject_unref(all_types);
qobject_unref(index);
- qtest_end();
+ qtest_quit(qts);
}
static void add_machine_test_case(const char *mname)
--
2.21.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 6/6] tests/hd-geo-test: Use qtest_init() instead of qtest_start()
2019-05-15 17:43 [Qemu-devel] [PATCH 0/6] Get rid of global_qtest in q35-, qom-, numa- and more tests Thomas Huth
` (4 preceding siblings ...)
2019-05-15 17:43 ` [Qemu-devel] [PATCH 5/6] tests/device-introspect: " Thomas Huth
@ 2019-05-15 17:43 ` Thomas Huth
5 siblings, 0 replies; 7+ messages in thread
From: Thomas Huth @ 2019-05-15 17:43 UTC (permalink / raw)
To: Laurent Vivier, qemu-devel; +Cc: Paolo Bonzini
qtest_start() + qtest_end() should be avoided, since they use the
global_qtest variable that we want to get rid of in the long run.
Use qtest_init() and qtest_quit() instead.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/hd-geo-test.c | 76 ++++++++++++++++++++++++---------------------
1 file changed, 41 insertions(+), 35 deletions(-)
diff --git a/tests/hd-geo-test.c b/tests/hd-geo-test.c
index ce665f1f83..9e43161a3d 100644
--- a/tests/hd-geo-test.c
+++ b/tests/hd-geo-test.c
@@ -77,33 +77,35 @@ static bool is_hd(const CHST *expected_chst)
return expected_chst && expected_chst->cyls;
}
-static void test_cmos_byte(int reg, int expected)
+static void test_cmos_byte(QTestState *qts, int reg, int expected)
{
enum { cmos_base = 0x70 };
int actual;
- outb(cmos_base + 0, reg);
- actual = inb(cmos_base + 1);
+ qtest_outb(qts, cmos_base + 0, reg);
+ actual = qtest_inb(qts, cmos_base + 1);
g_assert(actual == expected);
}
-static void test_cmos_bytes(int reg0, int n, uint8_t expected[])
+static void test_cmos_bytes(QTestState *qts, int reg0, int n,
+ uint8_t expected[])
{
int i;
for (i = 0; i < 9; i++) {
- test_cmos_byte(reg0 + i, expected[i]);
+ test_cmos_byte(qts, reg0 + i, expected[i]);
}
}
-static void test_cmos_disk_data(void)
+static void test_cmos_disk_data(QTestState *qts)
{
- test_cmos_byte(0x12,
+ test_cmos_byte(qts, 0x12,
(is_hd(cur_ide[0]) ? 0xf0 : 0) |
(is_hd(cur_ide[1]) ? 0x0f : 0));
}
-static void test_cmos_drive_cyl(int reg0, const CHST *expected_chst)
+static void test_cmos_drive_cyl(QTestState *qts, int reg0,
+ const CHST *expected_chst)
{
if (is_hd(expected_chst)) {
int c = expected_chst->cyls;
@@ -113,29 +115,29 @@ static void test_cmos_drive_cyl(int reg0, const CHST *expected_chst)
c & 0xff, c >> 8, h, 0xff, 0xff, 0xc0 | ((h > 8) << 3),
c & 0xff, c >> 8, s
};
- test_cmos_bytes(reg0, 9, expected_bytes);
+ test_cmos_bytes(qts, reg0, 9, expected_bytes);
} else {
int i;
for (i = 0; i < 9; i++) {
- test_cmos_byte(reg0 + i, 0);
+ test_cmos_byte(qts, reg0 + i, 0);
}
}
}
-static void test_cmos_drive1(void)
+static void test_cmos_drive1(QTestState *qts)
{
- test_cmos_byte(0x19, is_hd(cur_ide[0]) ? 47 : 0);
- test_cmos_drive_cyl(0x1b, cur_ide[0]);
+ test_cmos_byte(qts, 0x19, is_hd(cur_ide[0]) ? 47 : 0);
+ test_cmos_drive_cyl(qts, 0x1b, cur_ide[0]);
}
-static void test_cmos_drive2(void)
+static void test_cmos_drive2(QTestState *qts)
{
- test_cmos_byte(0x1a, is_hd(cur_ide[1]) ? 47 : 0);
- test_cmos_drive_cyl(0x24, cur_ide[1]);
+ test_cmos_byte(qts, 0x1a, is_hd(cur_ide[1]) ? 47 : 0);
+ test_cmos_drive_cyl(qts, 0x24, cur_ide[1]);
}
-static void test_cmos_disktransflag(void)
+static void test_cmos_disktransflag(QTestState *qts)
{
int val, i;
@@ -145,15 +147,15 @@ static void test_cmos_disktransflag(void)
val |= cur_ide[i]->trans << (2 * i);
}
}
- test_cmos_byte(0x39, val);
+ test_cmos_byte(qts, 0x39, val);
}
-static void test_cmos(void)
+static void test_cmos(QTestState *qts)
{
- test_cmos_disk_data();
- test_cmos_drive1();
- test_cmos_drive2();
- test_cmos_disktransflag();
+ test_cmos_disk_data(qts);
+ test_cmos_drive1(qts);
+ test_cmos_drive2(qts);
+ test_cmos_disktransflag(qts);
}
static int append_arg(int argc, char *argv[], int argv_sz, char *arg)
@@ -238,14 +240,15 @@ static void test_ide_none(void)
{
char **argv = g_new0(char *, ARGV_SIZE);
char *args;
+ QTestState *qts;
setup_common(argv, ARGV_SIZE);
args = g_strjoinv(" ", argv);
- qtest_start(args);
+ qts = qtest_init(args);
g_strfreev(argv);
g_free(args);
- test_cmos();
- qtest_end();
+ test_cmos(qts);
+ qtest_quit(qts);
}
static void test_ide_mbr(bool use_device, MBRcontents mbr)
@@ -255,6 +258,7 @@ static void test_ide_mbr(bool use_device, MBRcontents mbr)
int argc;
Backend i;
const char *dev;
+ QTestState *qts;
argc = setup_common(argv, ARGV_SIZE);
for (i = 0; i < backend_last; i++) {
@@ -263,11 +267,11 @@ static void test_ide_mbr(bool use_device, MBRcontents mbr)
argc = setup_ide(argc, argv, ARGV_SIZE, i, dev, i, mbr);
}
args = g_strjoinv(" ", argv);
- qtest_start(args);
+ qts = qtest_init(args);
g_strfreev(argv);
g_free(args);
- test_cmos();
- qtest_end();
+ test_cmos(qts);
+ qtest_quit(qts);
}
/*
@@ -325,6 +329,7 @@ static void test_ide_drive_user(const char *dev, bool trans)
int argc;
int secs = img_secs[backend_small];
const CHST expected_chst = { secs / (4 * 32) , 4, 32, trans };
+ QTestState *qts;
argc = setup_common(argv, ARGV_SIZE);
opts = g_strdup_printf("%s,%scyls=%d,heads=%d,secs=%d",
@@ -335,11 +340,11 @@ static void test_ide_drive_user(const char *dev, bool trans)
argc = setup_ide(argc, argv, ARGV_SIZE, 0, opts, backend_small, mbr_chs);
g_free(opts);
args = g_strjoinv(" ", argv);
- qtest_start(args);
+ qts = qtest_init(args);
g_strfreev(argv);
g_free(args);
- test_cmos();
- qtest_end();
+ test_cmos(qts);
+ qtest_quit(qts);
}
/*
@@ -367,6 +372,7 @@ static void test_ide_drive_cd_0(void)
char *args;
int argc, ide_idx;
Backend i;
+ QTestState *qts;
argc = setup_common(argv, ARGV_SIZE);
for (i = 0; i <= backend_empty; i++) {
@@ -375,11 +381,11 @@ static void test_ide_drive_cd_0(void)
argc = setup_ide(argc, argv, ARGV_SIZE, ide_idx, NULL, i, mbr_blank);
}
args = g_strjoinv(" ", argv);
- qtest_start(args);
+ qts = qtest_init(args);
g_strfreev(argv);
g_free(args);
- test_cmos();
- qtest_end();
+ test_cmos(qts);
+ qtest_quit(qts);
}
int main(int argc, char **argv)
--
2.21.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-05-15 17:52 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-15 17:43 [Qemu-devel] [PATCH 0/6] Get rid of global_qtest in q35-, qom-, numa- and more tests Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 1/6] tests/libqos: Get rid of global_qtest dependency in qvring_init() Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 2/6] tests/q35-test: Make test independent of global_qtest Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 3/6] tests/numa-test: Use qtest_init() instead of qtest_start() Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 4/6] tests/qom-test: " Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 5/6] tests/device-introspect: " Thomas Huth
2019-05-15 17:43 ` [Qemu-devel] [PATCH 6/6] tests/hd-geo-test: " Thomas Huth
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.