]> xenbits.xensource.com Git - libvirt.git/commitdiff
tests: Improve result handling in cpuTestGuestData()
authorAndrea Bolognani <abologna@redhat.com>
Fri, 7 Aug 2015 15:39:08 +0000 (17:39 +0200)
committerAndrea Bolognani <abologna@redhat.com>
Tue, 11 Aug 2015 09:04:57 +0000 (11:04 +0200)
A test is considered successful if the obtained result matches
the expected result: if that's not the case, whether because a
test that was expected to succeed failed or because a test that
was supposed to fail succeeded, then something's not right and
we want the user to know about this.

On the other hand, if a failure that's unrelated to the bits
we're testing occurs, then the user should be notified even if
the test was expected to fail.

Use different values to tell these two situations apart.

Fix a test case that was wrongly expected to fail as well.

tests/cputest.c

index 06b3f12062b8e4724688bdab3aa8f76a61ccee97..93f9d2ec88d3e1f98f5c92c6943fe1ac47c5921d 100644 (file)
@@ -247,7 +247,7 @@ static int
 cpuTestGuestData(const void *arg)
 {
     const struct data *data = arg;
-    int ret = -1;
+    int ret = -2;
     virCPUDefPtr host = NULL;
     virCPUDefPtr cpu = NULL;
     virCPUDefPtr guest = NULL;
@@ -262,8 +262,10 @@ cpuTestGuestData(const void *arg)
 
     cmpResult = cpuGuestData(host, cpu, &guestData, NULL);
     if (cmpResult == VIR_CPU_COMPARE_ERROR ||
-        cmpResult == VIR_CPU_COMPARE_INCOMPATIBLE)
+        cmpResult == VIR_CPU_COMPARE_INCOMPATIBLE) {
+        ret = -1;
         goto cleanup;
+    }
 
     if (VIR_ALLOC(guest) < 0)
         goto cleanup;
@@ -274,10 +276,7 @@ cpuTestGuestData(const void *arg)
     guest->fallback = cpu->fallback;
     if (cpuDecode(guest, guestData, data->models,
                   data->nmodels, data->preferred) < 0) {
-        if (data->result < 0) {
-            virResetLastError();
-            ret = 0;
-        }
+        ret = -1;
         goto cleanup;
     }
 
@@ -294,7 +293,10 @@ cpuTestGuestData(const void *arg)
     }
     result = virBufferContentAndReset(&buf);
 
-    ret = cpuTestCompareXML(data->arch, guest, result, false);
+    if (cpuTestCompareXML(data->arch, guest, result, false) < 0)
+        goto cleanup;
+
+    ret = 0;
 
  cleanup:
     VIR_FREE(result);
@@ -302,6 +304,20 @@ cpuTestGuestData(const void *arg)
     virCPUDefFree(host);
     virCPUDefFree(cpu);
     virCPUDefFree(guest);
+
+    if (ret == data->result) {
+        /* We got the result we expected, whether it was
+         * a success or a failure */
+        virResetLastError();
+        ret = 0;
+    } else {
+        VIR_TEST_VERBOSE("\nExpected result %d, got %d\n",
+                         data->result, ret);
+        /* Pad to line up with test name ... in virTestRun */
+        VIR_TEST_VERBOSE("%74s", "... ");
+        ret = -1;
+    }
+
     return ret;
 }
 
@@ -646,7 +662,7 @@ mymain(void)
                       NULL, "Haswell-noTSX", 0);
 
     DO_TEST_GUESTDATA("ppc64", "host", "guest", ppc_models, NULL, 0);
-    DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER7_v2.1", -1);
+    DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER7_v2.1", 0);
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }