unittests: add CUnit based unittest framework
[fio.git] / unittests / unittest.c
CommitLineData
b8b0e1ee
TK
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
11CU_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
35static 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
43int 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}