unittests: add CUnit based unittest framework
[fio.git] / unittests / unittest.c
1 /*
2  * fio unittest
3  * Copyright (C) 2018 Tomohiro Kusumi <kusumi.tomohiro@osnexus.com>
4  */
5
6 #include <stdio.h>
7 #include <stdlib.h>
8
9 #include "./unittest.h"
10
11 CU_ErrorCode fio_unittest_add_suite(const char *name, CU_InitializeFunc initfn,
12         CU_CleanupFunc cleanfn, struct fio_unittest_entry *tvec)
13 {
14         CU_pSuite pSuite;
15         struct fio_unittest_entry *t;
16
17         pSuite = CU_add_suite(name, initfn, cleanfn);
18         if (!pSuite) {
19                 CU_cleanup_registry();
20                 return CU_get_error();
21         }
22
23         t = tvec;
24         while (t && t->name) {
25                 if (!CU_add_test(pSuite, t->name, t->fn)) {
26                         CU_cleanup_registry();
27                         return CU_get_error();
28                 }
29                 t++;
30         }
31
32         return CUE_SUCCESS;
33 }
34
35 static void fio_unittest_register(CU_ErrorCode (*fn)(void))
36 {
37         if (fn && fn() != CUE_SUCCESS) {
38                 fprintf(stderr, "%s\n", CU_get_error_msg());
39                 exit(1);
40         }
41 }
42
43 int main(void)
44 {
45         if (CU_initialize_registry() != CUE_SUCCESS) {
46                 fprintf(stderr, "%s\n", CU_get_error_msg());
47                 exit(1);
48         }
49
50         /* Register unittest suites. */
51         fio_unittest_register(NULL); /* prevent unused warning */
52
53         CU_basic_set_mode(CU_BRM_VERBOSE);
54         CU_basic_run_tests();
55         CU_cleanup_registry();
56
57         return CU_get_error();
58 }