From: Michal Privoznik <[email protected]>

So far, qemusecuritytest has only positive test cases (i.e.
success is expected). Add machinery to have negative test cases
(i.e. when a specific failure is expected) too.

Signed-off-by: Michal Privoznik <[email protected]>
---
 tests/qemusecuritytest.c | 33 +++++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/tests/qemusecuritytest.c b/tests/qemusecuritytest.c
index 5c0d5244f2..a46651e6bd 100644
--- a/tests/qemusecuritytest.c
+++ b/tests/qemusecuritytest.c
@@ -32,6 +32,7 @@
 struct testData {
     virQEMUDriver *driver;
     const char *file; /* file name to load VM def XML from; qemuxmlconfdata/ */
+    int expectError;
 };
 
 
@@ -117,8 +118,26 @@ testDomain(const void *opaque)
     if (g_setenv(ENVVAR, "1", FALSE) == FALSE)
         return -1;
 
-    if (qemuSecuritySetAllLabel(data->driver, vm, NULL, false) < 0)
+    if (qemuSecuritySetAllLabel(data->driver, vm, NULL, false) < 0) {
+        if (data->expectError != VIR_ERR_OK) {
+            int errCode = virGetLastErrorCode();
+
+            if (errCode == data->expectError) {
+                /* expected failure */
+                ret = 0;
+            } else {
+                VIR_TEST_DEBUG("Unexpected error code %d, expected %d",
+                               errCode, data->expectError);
+            }
+        }
         goto cleanup;
+    }
+
+    if (data->expectError != VIR_ERR_OK) {
+        VIR_TEST_DEBUG("passed instead of expected error code %d",
+                       data->expectError);
+        goto cleanup;
+    }
 
     qemuSecurityRestoreAllLabel(data->driver, vm, false);
 
@@ -191,14 +210,20 @@ mymain(void)
 
     driver.securityManager = g_steal_pointer(&stack);
 
-
-#define DO_TEST_DOMAIN(f) \
+#define DO_TEST_DOMAIN_FULL(f, err) \
     do { \
-        struct testData data = {.driver = &driver, .file = f}; \
+        struct testData data = {.driver = &driver, .file = f, \
+            .expectError = err}; \
         if (virTestRun(f, testDomain, &data) < 0) \
             ret = -1; \
     } while (0)
 
+#define DO_TEST_DOMAIN(f) \
+    DO_TEST_DOMAIN_FULL(f, VIR_ERR_OK)
+
+#define DO_TEST_DOMAIN_ERROR_UNSUPPORTED(f) \
+    DO_TEST_DOMAIN_FULL(f, VIR_ERR_CONFIG_UNSUPPORTED)
+
     DO_TEST_DOMAIN("acpi-table");
     DO_TEST_DOMAIN("channel-unix-guestfwd");
     DO_TEST_DOMAIN("console-virtio-unix");
-- 
2.56.0

Reply via email to