diff --git a/Makefile.am b/Makefile.am index 314ae954..a9d80ecc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -8,11 +8,16 @@ if WANT_SERVER SERVER_DIR = server endif +if WANT_C_UNIT_TESTS + C_UNIT_TESTS_DIR = test/c-unit-tests +endif + SUBDIRS = \ lib \ common \ $(CLIENT_DIR) \ $(SERVER_DIR) \ + $(C_UNIT_TESTS_DIR) \ doc EXTRA_DIST = \ diff --git a/client/config_init.c b/client/config_init.c index 71fdcf56..d59184fb 100755 --- a/client/config_init.c +++ b/client/config_init.c @@ -53,10 +53,9 @@ #define LF_CHAR 0x0A /*!< Hexadecimal value associated to the LF char */ #ifdef HAVE_C_UNIT_TESTS - #define TEST_SUITE_DESCRIPTION "Config init module" +DECLARE_TEST_SUITE(config_init, "Config init test suite"); #endif - /** * Structure to handle long bitmask. * @@ -2556,42 +2555,46 @@ static int ut_clean_test_suite(void) return 0; } -DECLARE_UTEST(test1, "Description de ut1 dans config_init.c") +DECLARE_UTEST(critical_var, "Check critcial vars") { - CU_ASSERT(var_is_critical(0) == 0); + CU_ASSERT(var_is_critical(FWKNOP_CLI_ARG_KEY_RIJNDAEL) == 1); + CU_ASSERT(var_is_critical(FWKNOP_CLI_ARG_WGET_CMD) == 0); } -DECLARE_UTEST(test2, "Description de ut2 dans config_init.c") +DECLARE_UTEST(check_var_bitmask, "Check var_bitmask functions") { - CU_ASSERT(0); + fko_var_bitmask_t var_bitmask; + + memset(&var_bitmask, 0x00, sizeof(fko_var_bitmask_t)); + + add_var_to_bitmask(FWKNOP_CLI_FIRST_ARG, &var_bitmask); + CU_ASSERT(bitmask_has_var(FWKNOP_CLI_FIRST_ARG, &var_bitmask) == 1); + CU_ASSERT(var_bitmask.dw[0] == 1); + remove_var_from_bitmask(FWKNOP_CLI_FIRST_ARG, &var_bitmask); + CU_ASSERT(bitmask_has_var(FWKNOP_CLI_FIRST_ARG, &var_bitmask) == 0); + CU_ASSERT(var_bitmask.dw[0] == 0); + + add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &var_bitmask); + CU_ASSERT(bitmask_has_var(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &var_bitmask) == 1); + remove_var_from_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &var_bitmask); + CU_ASSERT(bitmask_has_var(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &var_bitmask) == 0); + + add_var_to_bitmask(FWKNOP_CLI_LAST_ARG, &var_bitmask); + CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG, &var_bitmask) == 1); + remove_var_from_bitmask(FWKNOP_CLI_LAST_ARG, &var_bitmask); + CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG, &var_bitmask) == 0); + + add_var_to_bitmask(FWKNOP_CLI_LAST_ARG+32, &var_bitmask); + CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG+32, &var_bitmask) == 0); } -DECLARE_UTEST(test3, "Description de ut3 dans config_init.c") -{ CU_ASSERT(1); -} - -/* TODO add a generic function to go through a tab which contains all utests */ int register_ts_config_init(void) { - CU_pSuite pSuite = NULL; - - /* add a suite to the registry */ - pSuite = CU_add_suite(TEST_SUITE_DESCRIPTION, ut_init_test_suite, ut_clean_test_suite); - if (NULL == pSuite) { - CU_cleanup_registry(); - return CU_get_error(); - } - - /* add the tests to the suite */ - if ((NULL == CU_add_test(pSuite, UTEST_DESCR(test1), UTEST_FCT(test1))) || - (NULL == CU_add_test(pSuite, UTEST_DESCR(test2), UTEST_FCT(test2))) || - (NULL == CU_add_test(pSuite, UTEST_DESCR(test3), UTEST_FCT(test3)))) - { - CU_cleanup_registry(); - return CU_get_error(); - } - - return 0; + ts_init(&TEST_SUITE(config_init), TEST_SUITE_DESCR(config_init)); + ts_add_utest(&TEST_SUITE(config_init), UTEST_FCT(critical_var), UTEST_DESCR(critical_var)); + ts_add_utest(&TEST_SUITE(config_init), UTEST_FCT(check_var_bitmask), UTEST_DESCR(check_var_bitmask)); + + return register_ts(&TEST_SUITE(config_init)); } #endif /* HAVE_C_UNIT_TESTS */ diff --git a/client/getpasswd.c b/client/getpasswd.c old mode 100644 new mode 100755 index 0da8e7ed..d62cd47e --- a/client/getpasswd.c +++ b/client/getpasswd.c @@ -52,10 +52,6 @@ #define ARRAY_FIRST_ELT_ADR(t) &((t)[0]) /*!< Macro to get the first element of an array */ #define ARRAY_LAST_ELT_ADR(t) &((t)[sizeof(t)-1]) /*!< Macro to get the last element of an array */ -#ifdef HAVE_C_UNIT_TESTS - #define TEST_SUITE_DESCRIPTION "Get password module" -#endif - /** * @brief Read a password from a stream object * @@ -297,52 +293,4 @@ get_key_file(char *key, int *key_len, const char *key_file, return 1; } - -#ifdef HAVE_C_UNIT_TESTS - -static int ut_init_test_suite(void) -{ - return 0; -} - -static int ut_clean_test_suite(void) -{ - return 0; -} - -DECLARE_UTEST(test1, "Description de ut1 dans getpassword.c") -{ - CU_ASSERT(1 == 0); -} - -DECLARE_UTEST(test2, "Description de ut2 dans getpassword.c") -{ - CU_ASSERT(0); -} - -/* TODO add a generic function to go through a tab which contains all utests */ -int register_ts_getpassword(void) -{ - CU_pSuite pSuite = NULL; - - /* add a suite to the registry */ - pSuite = CU_add_suite(TEST_SUITE_DESCRIPTION, ut_init_test_suite, ut_clean_test_suite); - if (NULL == pSuite) { - CU_cleanup_registry(); - return CU_get_error(); - } - - /* add the tests to the suite */ - if ((NULL == CU_add_test(pSuite, UTEST_DESCR(test1), UTEST_FCT(test1))) || - (NULL == CU_add_test(pSuite, UTEST_DESCR(test2), UTEST_FCT(test2)))) - { - CU_cleanup_registry(); - return CU_get_error(); - } - - return 0; -} - -#endif /* HAVE_C_UNIT_TESTS */ - /***EOF***/ diff --git a/client/getpasswd.h b/client/getpasswd.h old mode 100644 new mode 100755 index 39c526a2..b0548c2b --- a/client/getpasswd.h +++ b/client/getpasswd.h @@ -40,8 +40,4 @@ char* getpasswd(const char *prompt, int fd); int get_key_file(char *key, int *key_len, const char *key_file, fko_ctx_t ctx, const fko_cli_options_t *options); -#ifdef HAVE_C_UNIT_TESTS -int register_ts_getpassword(void); -#endif - #endif /* GETPASSWD_H */ diff --git a/common/Makefile.am b/common/Makefile.am old mode 100644 new mode 100755 index 95d4c185..53e8794d --- a/common/Makefile.am +++ b/common/Makefile.am @@ -2,7 +2,7 @@ AUTOMAKE_OPTIONS = subdir-objects noinst_LIBRARIES = libfko_util.a -libfko_util_source_files = ../lib/strlcpy.c ../lib/strlcat.c ../lib/fko_util.c ../lib/fko_util.h +libfko_util_source_files = ../lib/cunit_common.c cunit_common.h ../lib/strlcpy.c ../lib/strlcat.c ../lib/fko_util.c ../lib/fko_util.h libfko_util_a_SOURCES = $(libfko_util_source_files) diff --git a/common/common.h b/common/common.h old mode 100644 new mode 100755 index b8416950..b73f7f18 --- a/common/common.h +++ b/common/common.h @@ -45,6 +45,7 @@ /* Include cunit header if c unit testing support is enabled. */ #ifdef HAVE_C_UNIT_TESTS #include "CUnit/Basic.h" + #include "cunit_common.h" #endif #include @@ -184,16 +185,6 @@ enum { #define strnlen(s, l) (strlen(s) < l ? strlen(s) : l) #endif -/* Add some constant helpers for c unit support */ -#ifdef HAVE_C_UNIT_TESTS - #define UTEST_DESCR(name) descr_##name - #define UTEST_FCT(name) ut_##name - - #define DECLARE_UTEST(name, description) static const char descr_##name[] = description; \ - static void ut_##name(void) - -#endif - #endif /* _COMMON_H */ /***EOF***/ diff --git a/common/cunit_common.h b/common/cunit_common.h new file mode 100755 index 00000000..63057605 --- /dev/null +++ b/common/cunit_common.h @@ -0,0 +1,31 @@ +#ifndef CUNIT_COMMON_H +#define CUNIT_COMMON_H + + typedef struct c_unit_test + { + char description[128]; + void (*func)(void); + } c_unit_test_t; + + typedef struct c_unit_test_suite + { + char description[128]; + c_unit_test_t test_array[12]; + int nb_c_unit_test; + } c_unit_test_suite_t; + + #define UTEST_DESCR(name) ut_descr_##name + #define UTEST_FCT(name) ut_##name + #define TEST_SUITE(name) ts_##name + #define TEST_SUITE_DESCR(name) ts_descr_##name + + #define DECLARE_TEST_SUITE(name, description) static const char ts_descr_##name[] = description; \ + static c_unit_test_suite_t ts_##name; + #define DECLARE_UTEST(name, description) static const char ut_descr_##name[] = description; \ + static void ut_##name(void) + +void ts_init(c_unit_test_suite_t* ts, const char* description); +void ts_add_utest(c_unit_test_suite_t* ts, void (*utest_func)(void), const char* utest_description); +int register_ts(c_unit_test_suite_t *ts); + +#endif // CUNIT_COMMON_H \ No newline at end of file diff --git a/configure.ac b/configure.ac index 63d325e6..32875e2e 100755 --- a/configure.ac +++ b/configure.ac @@ -163,10 +163,12 @@ AC_ARG_ENABLE([c-unit-tests], if test "x$want_c_unit_tests" = "xyes"; then AC_DEFINE([HAVE_C_UNIT_TESTS], [1], [Define for C unit testing support]) - FKO_CHECK_COMPILER_ARG([-DHAVE_C_UNIT_TESTS]) + FKO_CHECK_COMPILER_ARG([-DHAVE_C_UNIT_TESTS]) FKO_CHECK_COMPILER_ARG_LDFLAGS_ONLY([-lcunit]) fi +AM_CONDITIONAL([WANT_C_UNIT_TESTS], [test "$want_c_unit_tests" = yes]) + dnl Decide whether or not to compile in certain features that enable fuzzing dnl of fwknop code - this is for testing purposes only. dnl diff --git a/lib/Makefile.am b/lib/Makefile.am old mode 100644 new mode 100755 index 3f0ef7b2..106244e4 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -8,7 +8,8 @@ libfko_source_files = \ fko.h fko_limits.h fko_timestamp.c fko_hmac.c hmac.c hmac.h \ fko_user.c fko_user.h md5.c md5.h rijndael.c rijndael.h sha1.c \ sha1.h sha2.c sha2.h fko_context.h fko_state.h fko_context.h \ - gpgme_funcs.c gpgme_funcs.h strlcpy.c strlcat.c fko_util.c fko_util.h + gpgme_funcs.c gpgme_funcs.h strlcpy.c strlcat.c fko_util.c fko_util.h \ + cunit_common.c cunit_common.h libfko_la_SOURCES = $(libfko_source_files) libfko_la_LDFLAGS = -version-info 2:3:0 $(GPGME_LIBS) -export-symbols-regex '^fko_' diff --git a/lib/cunit_common.c b/lib/cunit_common.c new file mode 100755 index 00000000..cd118b04 --- /dev/null +++ b/lib/cunit_common.c @@ -0,0 +1,45 @@ +#include "cunit_common.h" +#include "stdlib.h" +#include "stdio.h" +#include "CUnit/Basic.h" + +void ts_init(c_unit_test_suite_t* ts, const char* description) +{ + memset(ts, 0x00, sizeof(c_unit_test_suite_t)); + strcpy(ts->description, description); +} + +void ts_add_utest(c_unit_test_suite_t* ts, void (*utest_func)(void), const char* utest_description) +{ + c_unit_test_t* utest = &(ts->test_array[ts->nb_c_unit_test]); + + utest->func = utest_func; + strcpy(utest->description, utest_description); + + (ts->nb_c_unit_test)++; +} + +int register_ts(c_unit_test_suite_t *ts) +{ + CU_pSuite pSuite = NULL; + int ix_utest; + + pSuite = CU_add_suite(ts->description, NULL, NULL); + if (NULL == pSuite) { + CU_cleanup_registry(); + return CU_get_error(); + } + + /* add the tests to the suite */ + for (ix_utest=0 ; ix_utestnb_c_unit_test ; ix_utest++) + { + c_unit_test_t* utest = &(ts->test_array[ix_utest]); + if (NULL == CU_add_test(pSuite, utest->description, utest->func)) + { + CU_cleanup_registry(); + return CU_get_error(); + } + } + + return 0; +} \ No newline at end of file diff --git a/server/Makefile.am b/server/Makefile.am old mode 100644 new mode 100755 index fc321ba4..c27e3387 --- a/server/Makefile.am +++ b/server/Makefile.am @@ -10,7 +10,8 @@ fwknopd_SOURCES = fwknopd.c fwknopd.h config_init.c config_init.h \ fw_util.c fw_util.h fw_util_ipf.c fw_util_ipf.h \ fw_util_iptables.c fw_util_iptables.h \ fw_util_ipfw.c fw_util_ipfw.h \ - fw_util_pf.c fw_util_pf.h cmd_opts.h + fw_util_pf.c fw_util_pf.h cmd_opts.h \ + common.h fwknopd_LDADD = $(top_builddir)/lib/libfko.la $(top_builddir)/common/libfko_util.a -lpcap diff --git a/server/access.c b/server/access.c old mode 100644 new mode 100755 index 28acd0b9..ae3826a5 --- a/server/access.c +++ b/server/access.c @@ -40,6 +40,7 @@ #include "access.h" #include "utils.h" #include "log_msg.h" +#include "common.h" #define FATAL_ERR -1 @@ -47,6 +48,10 @@ #define SUCCESS 1 #endif +#ifdef HAVE_C_UNIT_TESTS +DECLARE_TEST_SUITE(access, "Access test suite"); +#endif + /* Add an access string entry */ static int @@ -1914,5 +1919,35 @@ dump_access_list(const fko_srv_options_t *opts) fprintf(stdout, "\n"); fflush(stdout); } +#ifdef HAVE_C_UNIT_TESTS + +DECLARE_UTEST(compare_port_list, "check compare_port_list function") +{ + acc_port_list_t *in1_pl = NULL; + acc_port_list_t *in2_pl = NULL; + acc_port_list_t *acc_pl = NULL; + + /* Match any test */ + free_acc_port_list(in1_pl); + free_acc_port_list(acc_pl); + add_port_list_ent(&in1_pl, "udp/6002"); + add_port_list_ent(&in2_pl, "udp/6002, udp/6003"); + add_port_list_ent(&acc_pl, "udp/6002, udp/6003"); + CU_ASSERT(compare_port_list(in1_pl, acc_pl, 1) == 1); /* Only one match is needed from access port list - 1 */ + CU_ASSERT(compare_port_list(in2_pl, acc_pl, 1) == 1); /* Only match is needed from access port list - 2 */ + CU_ASSERT(compare_port_list(in1_pl, acc_pl, 0) == 1); /* All ports must match access port list - 1 */ + CU_ASSERT(compare_port_list(in2_pl, acc_pl, 0) == 1); /* All ports must match access port list - 2 */ + CU_ASSERT(compare_port_list(acc_pl, in1_pl, 0) == 0); /* All ports must match in1 port list - 1 */ + CU_ASSERT(compare_port_list(acc_pl, in2_pl, 0) == 1); /* All ports must match in2 port list - 2 */ +} + +int register_ts_access(void) +{ + ts_init(&TEST_SUITE(access), TEST_SUITE_DESCR(access)); + ts_add_utest(&TEST_SUITE(access), UTEST_FCT(compare_port_list), UTEST_DESCR(compare_port_list)); + + return register_ts(&TEST_SUITE(access)); +} +#endif /* HAVE_C_UNIT_TESTS */ /***EOF***/ diff --git a/server/access.h b/server/access.h old mode 100644 new mode 100755 index 62289deb..d4788b9c --- a/server/access.h +++ b/server/access.h @@ -48,6 +48,10 @@ int expand_acc_port_list(acc_port_list_t **plist, char *plist_str); void free_acc_stanzas(fko_srv_options_t *opts); void free_acc_port_list(acc_port_list_t *plist); +#ifdef HAVE_C_UNIT_TESTS +int register_ts_access(void); +#endif + #endif /* ACCESS_H */ /***EOF***/ diff --git a/server/fwknopd.c b/server/fwknopd.c old mode 100644 new mode 100755 index 357a0bbd..89aa00fb --- a/server/fwknopd.c +++ b/server/fwknopd.c @@ -838,26 +838,4 @@ enable_fault_injections(fko_srv_options_t * const opts) } #endif -void -clean_exit(fko_srv_options_t *opts, unsigned int fw_cleanup_flag, unsigned int exit_status) -{ -#if HAVE_LIBFIU - if(opts->config[CONF_FAULT_INJECTION_TAG] != NULL) - { - fiu_disable(opts->config[CONF_FAULT_INJECTION_TAG]); - } -#endif - - if(!opts->test && (fw_cleanup_flag == FW_CLEANUP)) - fw_cleanup(opts); - -#if USE_FILE_CACHE - free_replay_list(opts); -#endif - - free_logging(); - free_configs(opts); - exit(exit_status); -} - /***EOF***/ diff --git a/server/utils.c b/server/utils.c old mode 100644 new mode 100755 index 8daa3aac..f285f90c --- a/server/utils.c +++ b/server/utils.c @@ -28,6 +28,10 @@ #include "fwknopd_common.h" #include "utils.h" #include "log_msg.h" +#include "replay_cache.h" +#include "config_init.h" +#include "fw_util.h" + #include /* Generic hex dump function. @@ -161,4 +165,26 @@ verify_file_perms_ownership(const char *file) return res; } +void +clean_exit(fko_srv_options_t *opts, unsigned int fw_cleanup_flag, unsigned int exit_status) +{ +#if HAVE_LIBFIU + if(opts->config[CONF_FAULT_INJECTION_TAG] != NULL) + { + fiu_disable(opts->config[CONF_FAULT_INJECTION_TAG]); + } +#endif + + if(!opts->test && (fw_cleanup_flag == FW_CLEANUP)) + fw_cleanup(opts); + +#if USE_FILE_CACHE + free_replay_list(opts); +#endif + + free_logging(); + free_configs(opts); + exit(exit_status); +} + /***EOF***/ diff --git a/test/c-unit-tests/Makefile.am b/test/c-unit-tests/Makefile.am index 2d009f5f..f2e96a84 100755 --- a/test/c-unit-tests/Makefile.am +++ b/test/c-unit-tests/Makefile.am @@ -1,16 +1,34 @@ -bin_PROGRAMS = fko_utests +bin_PROGRAMS = fwknop_utests fwknopd_utests -fko_utests_SOURCES = fko_utests.c \ +fwknop_utests_SOURCES = fwknop_utests.c fwknop_common.h \ $(top_srcdir)/client/config_init.c config_init.h \ - fwknop_common.h \ $(top_srcdir)/client/spa_comm.c spa_comm.h \ $(top_srcdir)/client/utils.c utils.h \ $(top_srcdir)/client/http_resolve_host.c \ $(top_srcdir)/client/getpasswd.c getpasswd.h cmd_opts.h \ $(top_srcdir)/client/log_msg.c log_msg.h -fko_utests_CPPFLAGS = -I $(top_srcdir)/lib -I $(top_srcdir)/common -I $(top_srcdir)/client +fwknop_utests_CPPFLAGS = -I $(top_srcdir)/lib -I $(top_srcdir)/common -I $(top_srcdir)/client -fko_utests_LDADD = $(top_builddir)/lib/libfko.la $(top_builddir)/common/libfko_util.a +fwknop_utests_LDADD = $(top_builddir)/lib/libfko.la $(top_builddir)/common/libfko_util.a -fko_utests_LDFLAGS = -lcunit +fwknop_utests_LDFLAGS = -lcunit + +fwknopd_utests_SOURCES = fwknopd_utests.c fwknopd.h $(top_srcdir)/server/config_init.c config_init.h \ + fwknopd_common.h $(top_srcdir)/server/incoming_spa.c incoming_spa.h \ + $(top_srcdir)/server/pcap_capture.c pcap_capture.h $(top_srcdir)/server/process_packet.c \ + process_packet.h $(top_srcdir)/server/log_msg.c log_msg.h $(top_srcdir)/server/utils.c utils.h \ + $(top_srcdir)/server/sig_handler.c sig_handler.h $(top_srcdir)/server/replay_cache.c replay_cache.h \ + $(top_srcdir)/server/access.c access.h $(top_srcdir)/server/fwknopd_errors.c fwknopd_errors.h \ + $(top_srcdir)/server/tcp_server.c tcp_server.h $(top_srcdir)/server/extcmd.c extcmd.h \ + $(top_srcdir)/server/fw_util.c fw_util.h $(top_srcdir)/server/fw_util_ipf.c fw_util_ipf.h \ + $(top_srcdir)/server/fw_util_iptables.c fw_util_iptables.h \ + $(top_srcdir)/server/fw_util_ipfw.c fw_util_ipfw.h \ + $(top_srcdir)/server/fw_util_pf.c fw_util_pf.h cmd_opts.h \ + common.h + +fwknopd_utests_CPPFLAGS = -I $(top_srcdir)/lib -I $(top_srcdir)/common -I $(top_srcdir)/server -DSYSCONFDIR=\"$(sysconfdir)\" -DSYSRUNDIR=\"$(localstatedir)\" + +fwknopd_utests_LDADD = $(top_builddir)/lib/libfko.la $(top_builddir)/common/libfko_util.a + +fwknopd_utests_LDFLAGS = -lcunit -lpcap \ No newline at end of file diff --git a/test/c-unit-tests/fko_utests.h b/test/c-unit-tests/fko_utests.h deleted file mode 100755 index 0cca6e93..00000000 --- a/test/c-unit-tests/fko_utests.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef FKO_UTESTS_H -#define FKO_UTESTS_H - -#endif /* FKO_UTESTS_H */ diff --git a/test/c-unit-tests/fko_utests.c b/test/c-unit-tests/fwknop_utests.c similarity index 89% rename from test/c-unit-tests/fko_utests.c rename to test/c-unit-tests/fwknop_utests.c index ef716212..0ccebd25 100755 --- a/test/c-unit-tests/fko_utests.c +++ b/test/c-unit-tests/fwknop_utests.c @@ -1,19 +1,17 @@ #include "CUnit/Basic.h" -#include "fwknop.h" +#include "fwknop_common.h" #include "config_init.h" -#include "getpasswd.h" /** * Register test suites from FKO files. * * The module should fetch functions according to used modules. All of them follow the same - * naming convetion. + * naming convention. */ static void register_test_suites(void) { register_ts_config_init(); - register_ts_getpassword(); } /* The main() function for setting up and running the tests. diff --git a/test/c-unit-tests/fwknopd_utests.c b/test/c-unit-tests/fwknopd_utests.c new file mode 100755 index 00000000..b3bc6675 --- /dev/null +++ b/test/c-unit-tests/fwknopd_utests.c @@ -0,0 +1,35 @@ +#include "CUnit/Basic.h" + +#include "fwknopd_common.h" +#include "access.h" + +/** + * Register test suites from FKO files. + * + * The module should fetch functions according to used modules. All of them follow the same + * naming convention. + */ +static void register_test_suites(void) +{ + register_ts_access(); +} + +/* The main() function for setting up and running the tests. + * Returns a CUE_SUCCESS on successful running, another + * CUnit error code on failure. + */ +int main() +{ + /* initialize the CUnit test registry */ + if (CUE_SUCCESS != CU_initialize_registry()) + return CU_get_error(); + + /* Register test suites from fko files */ + register_test_suites(); + + /* Run all tests using the CUnit Basic interface */ + CU_basic_set_mode(CU_BRM_VERBOSE); + CU_basic_run_tests(); + CU_cleanup_registry(); + return CU_get_error(); +} diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index a532839a..14941e83 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -1286,7 +1286,7 @@ sub profile_coverage() { my $curr_dir = getcwd() or die $!; ### gcov -b ../client/*.gcno - for my $dir ('../client', '../server', '../lib/.libs') { + for my $dir ('../client', '../server', '../lib/.libs', '../test/c-unit-tests') { next unless -d $dir; chdir $dir or die $!; system "$gcov_path -b -u *.gcno > /dev/null 2>&1";