diff mbox

[2/5] test: access: consolidate test failure reporting into a function

Message ID 1272469678-10728-3-git-send-email-avi@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Avi Kivity April 28, 2010, 3:47 p.m. UTC
None
diff mbox

Patch

diff --git a/kvm/user/test/x86/access.c b/kvm/user/test/x86/access.c
index dbc1213..0906691 100644
--- a/kvm/user/test/x86/access.c
+++ b/kvm/user/test/x86/access.c
@@ -453,6 +453,28 @@  fault:
     ;
 }
 
+static void ac_test_check(ac_test_t *at, _Bool *success_ret, _Bool cond,
+                          const char *fmt, ...)
+{
+    va_list ap;
+    char buf[500];
+
+    if (!*success_ret) {
+        return;
+    }
+
+    if (!cond) {
+        return;
+    }
+
+    *success_ret = false;
+
+    va_start(ap, fmt);
+    vsnprintf(buf, sizeof(buf), fmt, ap);
+    va_end(ap);
+    printf("FAIL: %s\n", buf);
+}
+
 int ac_test_do_access(ac_test_t *at)
 {
     static unsigned unique = 42;
@@ -460,6 +482,7 @@  int ac_test_do_access(ac_test_t *at)
     unsigned e;
     static unsigned char user_stack[4096];
     unsigned long rsp;
+    _Bool success = true;
 
     ++unique;
 
@@ -531,30 +554,21 @@  int ac_test_do_access(ac_test_t *at)
 		  "jmp back_to_kernel \n\t"
 		  ".section .text");
 
-    if (fault && !at->expected_fault) {
-	printf("FAIL: unexpected fault\n");
-	return 0;
-    }
-    if (!fault && at->expected_fault) {
-	printf("FAIL: unexpected access\n");
-	return 0;
-    }
-    if (fault && e != at->expected_error) {
-	printf("FAIL: error code %x expected %x\n", e, at->expected_error);
-	return 0;
-    }
-    if (at->ptep && *at->ptep != at->expected_pte) {
-	printf("FAIL: pte %x expected %x\n", *at->ptep, at->expected_pte);
-	return 0;
+    ac_test_check(at, &success, fault && !at->expected_fault,
+                  "unexpected fault");
+    ac_test_check(at, &success, !fault && at->expected_fault,
+                  "unexpected access");
+    ac_test_check(at, &success, fault && e != at->expected_error,
+                  "error code %x expected %x", e, at->expected_error);
+    ac_test_check(at, &success, at->ptep && *at->ptep != at->expected_pte,
+                  "pte %x expected %x", *at->ptep, at->expected_pte);
+    ac_test_check(at, &success, *at->pdep != at->expected_pde,
+                  "pde %x expected %x", *at->pdep, at->expected_pde);
+
+    if (success) {
+        printf("PASS\n");
     }
-
-    if (*at->pdep != at->expected_pde) {
-	printf("FAIL: pde %x expected %x\n", *at->pdep, at->expected_pde);
-	return 0;
-    }
-
-    printf("PASS\n");
-    return 1;
+    return success;
 }
 
 static void ac_test_show(ac_test_t *at)