unittests: add CUnit based unittest framework
CUnit is C version of *unit framework to help write test cases.
https://sourceforge.net/projects/cunit/
unittests/* are compiled only if CUnit exists, and detected on
build time in ./configure like any other build time detection,
by running a simple CUnit initialization code.
Some OS/distros have binary package for CUnit. In case of Fedora
and FreeBSD, they both install shared library (libcunit.so) and
CUnit headers required to compile fio's unittests.
Fedora:
# dnf install CUnit
FreeBSD:
# pkg install cunit
To build and install CUnit from upstream source, do below.
# ./bootstrap && make && make install
Note that make install seems to install binaries and headers under
~/CUnitHome/ by default.
After applying actual test cases in the next few commits, running
./unittests/unittest will print results to stdout. These are
examples of test cases, and one can add more tests.
-- Example of unittest results
# ./unittests/unittest
CUnit - A unit testing framework for C - Version 2.1-3
http://cunit.sourceforge.net/
Suite: lib/memalign.c
Test: memalign/1 ...passed
Suite: lib/strntol.c
Test: strntol/1 ...passed
Test: strntol/2 ...FAILED
1. unittests/lib/strntol.c:24 - CU_ASSERT_EQUAL(*endp,'\0')
Test: strntol/3 ...passed
Suite: oslib/strlcat.c
Test: strlcat/1 ...passed
Test: strlcat/2 ...FAILED
1. unittests/oslib/strlcat.c:28 - CU_ASSERT_EQUAL(strcmp(dst, ""),0)
Suite: oslib/strndup.c
Test: strndup/1 ...passed
Test: strndup/2 ...passed
Test: strndup/3 ...passed
Run Summary: Type Total Ran Passed Failed Inactive
suites 4 4 n/a 0 0
tests 9 9 7 2 0
asserts 18 18 16 2 n/a
Elapsed time = 0.000 seconds
Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>