Recent changes (master)
Subsystems (2)
The following changes since commit d7e92306bde2117702ed96b7c5647d9485869047:
io_u: move trim error notification out-of-line (2018-10-24 05:00:53 -0600)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to 199710f5822cf22bf76107f26993a9468f93a422:
oslib: fix strlcat's incorrect copying (2018-10-26 10:24:28 -0600)
----------------------------------------------------------------
Tomohiro Kusumi (7):
unittests: add CUnit based unittest framework
unittests: add unittest suite for lib/memalign.c
unittests: add unittest suite for lib/strntol.c
unittests: add unittest suite for oslib/strlcat.c
unittests: add unittest suite for oslib/strndup.c
lib: fix strntol's end pointer when str has leading spaces
oslib: fix strlcat's incorrect copying
.gitignore | 1 + Makefile | 26 +++++++++++++++-- configure | 26 +++++++++++++++++ lib/strntol.c | 2 +- oslib/strlcat.c | 69 ++++++++++++++++++++++++++++++++------------- oslib/strlcat.h | 2 +- unittests/lib/memalign.c | 27 ++++++++++++++++++ unittests/lib/strntol.c | 59 +++++++++++++++++++++++++++++++++++++++ unittests/oslib/strlcat.c | 52 ++++++++++++++++++++++++++++++++++ unittests/oslib/strndup.c | 63 +++++++++++++++++++++++++++++++++++++++++ unittests/unittest.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++ unittests/unittest.h | 26 +++++++++++++++++ 12 files changed, 400 insertions(+), 24 deletions(-) create mode 100644 unittests/lib/memalign.c create mode 100644 unittests/lib/strntol.c create mode 100644 unittests/oslib/strlcat.c create mode 100644 unittests/oslib/strndup.c create mode 100644 unittests/unittest.c create mode 100644 unittests/unittest.h
---
Diff of recent changes:
.gitignore +1 -0
@@ -18,6 +18,7 @@ /t/ieee754 /t/lfsr-test /t/stest +/unittests/unittest y.tab.* lex.yy.c *.un~
Makefile +24 -2
@@ -300,6 +300,23 @@ T_PROGS += $(T_VS_PROGS) PROGS += $(T_PROGS) +ifdef CONFIG_HAVE_CUNIT +UT_OBJS = unittests/unittest.o +UT_OBJS += unittests/lib/memalign.o +UT_OBJS += unittests/lib/strntol.o +UT_OBJS += unittests/oslib/strlcat.o +UT_OBJS += unittests/oslib/strndup.o +UT_TARGET_OBJS = lib/memalign.o +UT_TARGET_OBJS += lib/strntol.o +UT_TARGET_OBJS += oslib/strlcat.o +UT_TARGET_OBJS += oslib/strndup.o +UT_PROGS = unittests/unittest +else +UT_OBJS = +UT_TARGET_OBJS = +UT_PROGS = +endif + ifneq ($(findstring $(MAKEFLAGS),s),s) ifndef V QUIET_CC = @echo ' ' CC $@;
@@ -326,7 +343,7 @@ mandir = $(prefix)/man sharedir = $(prefix)/share/fio endif -all: $(PROGS) $(T_TEST_PROGS) $(SCRIPTS) FORCE +all: $(PROGS) $(T_TEST_PROGS) $(UT_PROGS) $(SCRIPTS) FORCE .PHONY: all install clean test .PHONY: FORCE cscope
@@ -467,8 +484,13 @@ t/fio-verify-state: $(T_VS_OBJS) t/time-test: $(T_TT_OBJS) $(QUIET_LINK)$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(T_TT_OBJS) $(LIBS) +ifdef CONFIG_HAVE_CUNIT +unittests/unittest: $(UT_OBJS) $(UT_TARGET_OBJS) + $(QUIET_LINK)$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(UT_OBJS) $(UT_TARGET_OBJS) -lcunit +endif + clean: FORCE - @rm -f .depend $(FIO_OBJS) $(GFIO_OBJS) $(OBJS) $(T_OBJS) $(PROGS) $(T_PROGS) $(T_TEST_PROGS) core.* core gfio FIO-VERSION-FILE *.[do] lib/*.d oslib/*.[do] crc/*.d engines/*.[do] profiles/*.[do] t/*.[do] config-host.mak config-host.h y.tab.[ch] lex.yy.c exp/*.[do] lexer.h + @rm -f .depend $(FIO_OBJS) $(GFIO_OBJS) $(OBJS) $(T_OBJS) $(UT_OBJS) $(PROGS) $(T_PROGS) $(T_TEST_PROGS) core.* core gfio unittests/unittest FIO-VERSION-FILE *.[do] lib/*.d oslib/*.[do] crc/*.d engines/*.[do] profiles/*.[do] t/*.[do] unittests/*.[do] unittests/*/*.[do] config-host.mak config-host.h y.tab.[ch] lex.yy.c exp/*.[do] lexer.h @rm -rf doc/output distclean: clean FORCE
configure +26 -0
@@ -2272,6 +2272,29 @@ if test "$disable_native" = "no" && test "$disable_opt" != "yes" && \ fi print_config "Build march=native" "$build_native" +########################################## +# check for -lcunit +if test "$cunit" != "yes" ; then + cunit="no" +fi +cat > $TMPC << EOF +#include <CUnit/CUnit.h> +#include <CUnit/Basic.h> +int main(void) +{ + if (CU_initialize_registry() != CUE_SUCCESS) + return CU_get_error(); + CU_basic_set_mode(CU_BRM_VERBOSE); + CU_basic_run_tests(); + CU_cleanup_registry(); + return CU_get_error(); +} +EOF +if compile_prog "" "-lcunit" "CUnit"; then + cunit="yes" +fi +print_config "CUnit" "$cunit" + ############################################################################# if test "$wordsize" = "64" ; then
@@ -2537,6 +2560,9 @@ fi if test "$march_set" = "no" && test "$build_native" = "yes" ; then output_sym "CONFIG_BUILD_NATIVE" fi +if test "$cunit" = "yes" ; then + output_sym "CONFIG_HAVE_CUNIT" +fi echo "LIBS+=$LIBS" >> $config_host_mak echo "GFIO_LIBS+=$GFIO_LIBS" >> $config_host_mak
lib/strntol.c +1 -1
@@ -28,6 +28,6 @@ long strntol(const char *str, size_t sz, char **end, int base)if (ret ==LONG_MIN || ret ==LONG_MAX )return ret;if (end) - *end = (char *)str + (*end - buf); + *end = (char *)beg + (*end - buf);return ret; }
oslib/strlcat.c +49 -20
77 lines not on this page · raw message
oslib/strlcat.h +1 -1
@@ -5,7 +5,7 @@#include <stddef.h> -size_t strlcat (char *dst,const char *src,size_t size); +size_t strlcat (char *dst,const char *src,size_t dsize);#endif
unittests/lib/memalign.c new file +27 -0
@@ -0,0 +1,27 @@ +#include "../unittest.h" + +#include "../../lib/memalign.h" + +static void test_memalign_1 (void ) +{ +size_t align =4096 ; +void *p =fio_memalign (align,1234 , false); + +if (p) +CU_ASSERT_EQUAL (((int )(uintptr_t )p) & (align -1 ),0 ); +} + +static struct fio_unittest_entry tests[] = { + { + .name ="memalign/1" , + .fn = test_memalign_1, + }, + { + .name =NULL , + }, +}; + +CU_ErrorCode fio_unittest_lib_memalign (void ) +{ +return fio_unittest_add_suite ("lib/memalign.c" ,NULL ,NULL , tests); +}
unittests/lib/strntol.c new file +59 -0
59 lines not on this page · raw message
unittests/oslib/strlcat.c new file +52 -0
52 lines not on this page · raw message
unittests/oslib/strndup.c new file +63 -0
63 lines not on this page · raw message
unittests/unittest.c new file +71 -0
71 lines not on this page · raw message
unittests/unittest.h new file +26 -0
@@ -0,0 +1,26 @@ +#ifndef FIO_UNITTEST_H +#define FIO_UNITTEST_H + +#include <sys/types.h> + +#include <CUnit/CUnit.h> +#include <CUnit/Basic.h> + +struct fio_unittest_entry { +const char *name; +CU_TestFunc fn; +}; + +/* XXX workaround lib/memalign.c's dependency on smalloc.c */ +void *smalloc (size_t ); +void sfree (void *); + +CU_ErrorCode fio_unittest_add_suite (const char *,CU_InitializeFunc , +CU_CleanupFunc ,struct fio_unittest_entry *); + +CU_ErrorCode fio_unittest_lib_memalign (void ); +CU_ErrorCode fio_unittest_lib_strntol (void ); +CU_ErrorCode fio_unittest_oslib_strlcat (void ); +CU_ErrorCode fio_unittest_oslib_strndup (void ); + +#endif