0a122b
From f57ff93bf55cfdf09995c441cbbf8ad886f1afcb Mon Sep 17 00:00:00 2001
0a122b
From: Laszlo Ersek <lersek@redhat.com>
0a122b
Date: Sat, 11 Jan 2014 18:00:05 +0100
0a122b
Subject: [PATCH 15/22] i440fx-test: give each GTest case its own qtest
0a122b
0a122b
RH-Author: Laszlo Ersek <lersek@redhat.com>
0a122b
Message-id: <1389463208-6278-16-git-send-email-lersek@redhat.com>
0a122b
Patchwork-id: 56628
0a122b
O-Subject: [RHEL-7.0 qemu-kvm PATCH 15/18] i440fx-test: give each GTest case its own qtest
0a122b
Bugzilla: 1032346
0a122b
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
0a122b
RH-Acked-by: Amos Kong <akong@redhat.com>
0a122b
RH-Acked-by: Andrew Jones <drjones@redhat.com>
0a122b
0a122b
The current two GTest cases, /i440fx/defaults and /i440fx/pam can share a
0a122b
qemu process, but the next two cases will need dedicated instances. It is
0a122b
messy (and order-dependent) to dynamically configure GTest cases one by
0a122b
one to start, stop, or keep the current qtest (*); let's just have each
0a122b
GTest work with its own qtest. The performance difference should be
0a122b
negligible.
0a122b
0a122b
(*) As g_test_run() can be invoked at most once per process startup, and
0a122b
it runs GTest cases in sequence, we'd need clumsy data structures to
0a122b
control each GTest case to start/stop/keep the qemu instance. Or, we'd
0a122b
have to code the same information into the test methods themselves, which
0a122b
would make them even more order-dependent.
0a122b
0a122b
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
0a122b
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
0a122b
(cherry picked from commit c37805b6724e5d4c3ad41653630b72b43619474e)
0a122b
---
0a122b
 tests/i440fx-test.c | 32 +++++++++++++++++++-------------
0a122b
 1 file changed, 19 insertions(+), 13 deletions(-)
0a122b
0a122b
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
0a122b
---
0a122b
 tests/i440fx-test.c |   32 +++++++++++++++++++-------------
0a122b
 1 files changed, 19 insertions(+), 13 deletions(-)
0a122b
0a122b
diff --git a/tests/i440fx-test.c b/tests/i440fx-test.c
0a122b
index 6ac46bf..3962bca 100644
0a122b
--- a/tests/i440fx-test.c
0a122b
+++ b/tests/i440fx-test.c
0a122b
@@ -28,16 +28,27 @@
0a122b
 typedef struct TestData
0a122b
 {
0a122b
     int num_cpus;
0a122b
-    QPCIBus *bus;
0a122b
 } TestData;
0a122b
 
0a122b
+static QPCIBus *test_start_get_bus(const TestData *s)
0a122b
+{
0a122b
+    char *cmdline;
0a122b
+
0a122b
+    cmdline = g_strdup_printf("-smp %d", s->num_cpus);
0a122b
+    qtest_start(cmdline);
0a122b
+    g_free(cmdline);
0a122b
+    return qpci_init_pc();
0a122b
+}
0a122b
+
0a122b
 static void test_i440fx_defaults(gconstpointer opaque)
0a122b
 {
0a122b
     const TestData *s = opaque;
0a122b
+    QPCIBus *bus;
0a122b
     QPCIDevice *dev;
0a122b
     uint32_t value;
0a122b
 
0a122b
-    dev = qpci_device_find(s->bus, QPCI_DEVFN(0, 0));
0a122b
+    bus = test_start_get_bus(s);
0a122b
+    dev = qpci_device_find(bus, QPCI_DEVFN(0, 0));
0a122b
     g_assert(dev != NULL);
0a122b
 
0a122b
     /* 3.2.2 */
0a122b
@@ -121,6 +132,8 @@ static void test_i440fx_defaults(gconstpointer opaque)
0a122b
     g_assert_cmpint(qpci_config_readb(dev, 0x91), ==, 0x00); /* ERRSTS */
0a122b
     /* 3.2.26 */
0a122b
     g_assert_cmpint(qpci_config_readb(dev, 0x93), ==, 0x00); /* TRC */
0a122b
+
0a122b
+    qtest_end();
0a122b
 }
0a122b
 
0a122b
 #define PAM_RE 1
0a122b
@@ -179,6 +192,7 @@ static void write_area(uint32_t start, uint32_t end, uint8_t value)
0a122b
 static void test_i440fx_pam(gconstpointer opaque)
0a122b
 {
0a122b
     const TestData *s = opaque;
0a122b
+    QPCIBus *bus;
0a122b
     QPCIDevice *dev;
0a122b
     int i;
0a122b
     static struct {
0a122b
@@ -201,7 +215,8 @@ static void test_i440fx_pam(gconstpointer opaque)
0a122b
         { 0xEC000, 0xEFFFF }, /* BIOS Extension */
0a122b
     };
0a122b
 
0a122b
-    dev = qpci_device_find(s->bus, QPCI_DEVFN(0, 0));
0a122b
+    bus = test_start_get_bus(s);
0a122b
+    dev = qpci_device_find(bus, QPCI_DEVFN(0, 0));
0a122b
     g_assert(dev != NULL);
0a122b
 
0a122b
     for (i = 0; i < ARRAY_SIZE(pam_area); i++) {
0a122b
@@ -254,30 +269,21 @@ static void test_i440fx_pam(gconstpointer opaque)
0a122b
         /* Verify the area is not our new mask */
0a122b
         g_assert(!verify_area(pam_area[i].start, pam_area[i].end, 0x82));
0a122b
     }
0a122b
+    qtest_end();
0a122b
 }
0a122b
 
0a122b
 int main(int argc, char **argv)
0a122b
 {
0a122b
     TestData data;
0a122b
-    char *cmdline;
0a122b
     int ret;
0a122b
 
0a122b
     g_test_init(&argc, &argv, NULL);
0a122b
 
0a122b
     data.num_cpus = 1;
0a122b
 
0a122b
-    cmdline = g_strdup_printf("-smp %d", data.num_cpus);
0a122b
-    qtest_start(cmdline);
0a122b
-    g_free(cmdline);
0a122b
-
0a122b
-    data.bus = qpci_init_pc();
0a122b
-
0a122b
     g_test_add_data_func("/i440fx/defaults", &data, test_i440fx_defaults);
0a122b
     g_test_add_data_func("/i440fx/pam", &data, test_i440fx_pam);
0a122b
 
0a122b
     ret = g_test_run();
0a122b
-
0a122b
-    qtest_end();
0a122b
-
0a122b
     return ret;
0a122b
 }
0a122b
-- 
0a122b
1.7.1
0a122b