selftests: sync: convert to use TAP13 ksft framework
authorShuah Khan <shuahkh@osg.samsung.com>
Mon, 24 Jul 2017 20:19:13 +0000 (14:19 -0600)
committerShuah Khan <shuahkh@osg.samsung.com>
Fri, 28 Jul 2017 19:20:29 +0000 (13:20 -0600)
Convert test to use TAP13 ksft framework. Output after conversion:

TAP version 13
# [RUN] Testing sync framework
ok 1 [RUN] test_alloc_timeline
ok 2 [RUN] test_alloc_fence
ok 3 [RUN] test_alloc_fence_negative
ok 4 [RUN] test_fence_one_timeline_wait
ok 5 [RUN] test_fence_one_timeline_merge
ok 6 [RUN] test_fence_merge_same_fence
ok 7 [RUN] test_fence_multi_timeline_wait
ok 8 [RUN] test_stress_two_threads_shared_timeline
ok 9 [RUN] test_consumer_stress_multi_producer_single_consumer
ok 10 [RUN] test_merge_stress_random_merge
Pass 10 Fail 0 Xfail 0 Xpass 0 Skip 0
1..10

Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.com>
tools/testing/selftests/sync/sync_test.c
tools/testing/selftests/sync/synctest.h

index 86ae45a..7f79382 100644 (file)
 #include <sys/stat.h>
 #include <sys/wait.h>
 #include <errno.h>
+#include <string.h>
 
+#include "../kselftest.h"
 #include "synctest.h"
 
 static int run_test(int (*test)(void), char *name)
 {
        int result;
        pid_t childpid;
+       int ret;
 
        fflush(stdout);
        childpid = fork();
 
        if (childpid) {
                waitpid(childpid, &result, 0);
-               if (WIFEXITED(result))
-                       return WEXITSTATUS(result);
+               if (WIFEXITED(result)) {
+                       ret = WEXITSTATUS(result);
+                       if (!ret)
+                               ksft_test_result_pass("[RUN]\t%s\n", name);
+                       else
+                               ksft_test_result_fail("[RUN]\t%s\n", name);
+                       return ret;
+               }
                return 1;
        }
 
-       printf("[RUN]\tExecuting %s\n", name);
        exit(test());
 }
 
-static int sync_api_supported(void)
+static void sync_api_supported(void)
 {
        struct stat sbuf;
        int ret;
 
        ret = stat("/sys/kernel/debug/sync/sw_sync", &sbuf);
        if (!ret)
-               return 0;
+               return;
 
-       if (errno == ENOENT) {
-               printf("SKIP: Sync framework not supported by kernel\n");
-               exit(0);
-       }
-       if (errno == EACCES) {
-               printf("SKIP: Run Sync test as root.\n");
-               exit(0);
-       }
+       if (errno == ENOENT)
+               ksft_exit_skip("Sync framework not supported by kernel\n");
 
-       perror("stat");
-       exit(ret);
+       if (errno == EACCES)
+               ksft_exit_skip("Run Sync test as root.\n");
 
+       ksft_exit_fail_msg("stat failed on /sys/kernel/debug/sync/sw_sync: %s",
+                               strerror(errno));
 }
 
 int main(void)
 {
-       int err = 0;
+       int err;
+
+       ksft_print_header();
 
-       if (!sync_api_supported())
-               return 0;
+       sync_api_supported();
 
-       printf("[RUN]\tTesting sync framework\n");
+       ksft_print_msg("[RUN]\tTesting sync framework\n");
 
-       err += RUN_TEST(test_alloc_timeline);
-       err += RUN_TEST(test_alloc_fence);
-       err += RUN_TEST(test_alloc_fence_negative);
+       RUN_TEST(test_alloc_timeline);
+       RUN_TEST(test_alloc_fence);
+       RUN_TEST(test_alloc_fence_negative);
 
-       err += RUN_TEST(test_fence_one_timeline_wait);
-       err += RUN_TEST(test_fence_one_timeline_merge);
-       err += RUN_TEST(test_fence_merge_same_fence);
-       err += RUN_TEST(test_fence_multi_timeline_wait);
-       err += RUN_TEST(test_stress_two_threads_shared_timeline);
-       err += RUN_TEST(test_consumer_stress_multi_producer_single_consumer);
-       err += RUN_TEST(test_merge_stress_random_merge);
+       RUN_TEST(test_fence_one_timeline_wait);
+       RUN_TEST(test_fence_one_timeline_merge);
+       RUN_TEST(test_fence_merge_same_fence);
+       RUN_TEST(test_fence_multi_timeline_wait);
+       RUN_TEST(test_stress_two_threads_shared_timeline);
+       RUN_TEST(test_consumer_stress_multi_producer_single_consumer);
+       RUN_TEST(test_merge_stress_random_merge);
 
+       err = ksft_get_fail_cnt();
        if (err)
-               printf("[FAIL]\tsync errors: %d\n", err);
-       else
-               printf("[OK]\tsync\n");
+               ksft_exit_fail_msg("%d out of %d sync tests failed\n",
+                                       err, ksft_test_num());
 
-       return !!err;
+       /* need this return to keep gcc happy */
+       return ksft_exit_pass();
 }
index e7d1d57..90a8e53 100644 (file)
 #define SELFTESTS_SYNCTEST_H
 
 #include <stdio.h>
+#include "../kselftest.h"
 
 #define ASSERT(cond, msg) do { \
        if (!(cond)) { \
-               printf("[ERROR]\t%s", (msg)); \
+               ksft_print_msg("[ERROR]\t%s", (msg)); \
                return 1; \
        } \
 } while (0)