SET(TEST_DRIVER "test-driver")
-FILE(GLOB SRCS "${CMAKE_CURRENT_SOURCE_DIR}/*.c")
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
-SET(TEST_SUITE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
-ADD_DEFINITIONS("-DTEST_SUITE_DIRECTORY=\"${TEST_SUITE_DIRECTORY}\"")
+FILE(GLOB TEST_DRIVER_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/*.c")
+FILE(GLOB LIBCOMMON_SRCS
+ "${CMAKE_SOURCE_DIR}/tests/libcommon/*.c"
+ "${CMAKE_SOURCE_DIR}/src/libcommon/*.c")
+
+SET(SRCS
+ ${TEST_DRIVER_SRCS}
+ ${LIBCOMMON_SRCS}
+ )
+
+SET(WRAP_FLAGS "${WRAP_FLAGS} -Wl,--wrap=open")
+SET(WRAP_FLAGS "${WRAP_FLAGS} -Wl,--wrap=open64")
INCLUDE(FindPkgConfig)
PKG_CHECK_MODULES(REQUIRED_PKGS REQUIRED
+ glib-2.0
+ capi-system-info
cmocka)
ADD_EXECUTABLE(${TEST_DRIVER} ${SRCS})
-TARGET_LINK_LIBRARIES(${TEST_DRIVER} cmocka dl)
-SET_TARGET_PROPERTIES(${TEST_DRIVER} PROPERTIES LINK_FLAGS "-Wl,--export-dynamic")
+TARGET_LINK_LIBRARIES(${TEST_DRIVER} ${REQUIRED_PKGS_LDFLAGS})
+SET_TARGET_PROPERTIES(${TEST_DRIVER} PROPERTIES LINK_FLAGS "${WRAP_FLAGS} -Wl,--export-dynamic")
ADD_CUSTOM_TARGET(run-test ALL "./${TEST_DRIVER}")
ADD_DEPENDENCIES(run-test ${TEST_DRIVER})
-
-# add test suites
-ADD_SUBDIRECTORY(libcommon)
#include <stdbool.h>
#include <glib.h>
-#include "libsyscommon/file.h"
-#include "libsyscommon/list.h"
-#include "libsyscommon/ini-parser.h"
-#include "libsyscommon/bitmap.h"
-#include "libsyscommon/notifier.h"
+#include <libsyscommon/file.h>
+#include <libsyscommon/list.h>
+#include <libsyscommon/ini-parser.h>
+#include <libsyscommon/bitmap.h>
+#include <libsyscommon/notifier.h>
#include "../test-main.h"
#include "../test-mock.h"
syscommon_notifier_emit_notify(SYSCOMMON_NOTIFIER_8, (void *)(intptr_t)0x1234);
}
-int run_test_suite(void)
-{
- const struct CMUnitTest testsuite[] = {
- cmocka_unit_test_setup_teardown(test_sys_get_str_p1, setup, teardown),
- cmocka_unit_test_setup_teardown(test_sys_get_str_n1, setup, teardown),
- cmocka_unit_test(test_sys_get_str_n2),
- cmocka_unit_test(test_list_append_p),
- cmocka_unit_test(test_list_prepend_p),
- cmocka_unit_test(test_config_parse_p),
- cmocka_unit_test(test_init_bitmap_p),
- cmocka_unit_test(test_init_bitmap_n),
- cmocka_unit_test(test_test_bit),
- cmocka_unit_test(test_all_bit),
- cmocka_unit_test(test_syscommon_notifier_emit_notify_p1),
- cmocka_unit_test(test_syscommon_notifier_emit_notify_p2),
- cmocka_unit_test(test_syscommon_notifier_emit_notify_p3),
- cmocka_unit_test(test_syscommon_notifier_emit_notify_once_p),
- cmocka_unit_test(test_destroy_callback_p1),
- cmocka_unit_test(test_destroy_callback_p2),
- cmocka_unit_test(test_destroy_callback_p3),
- cmocka_unit_test(test_syscommon_notifier_emit_notify_priority_p1),
- };
-
- return cmocka_run_group_tests(testsuite, NULL, NULL);
-}
+static const struct CMUnitTest testsuite_libcommon[] = {
+ cmocka_unit_test_setup_teardown(test_sys_get_str_p1, setup, teardown),
+ cmocka_unit_test_setup_teardown(test_sys_get_str_n1, setup, teardown),
+ cmocka_unit_test(test_sys_get_str_n2),
+ cmocka_unit_test(test_list_append_p),
+ cmocka_unit_test(test_list_prepend_p),
+ cmocka_unit_test(test_config_parse_p),
+ cmocka_unit_test(test_init_bitmap_p),
+ cmocka_unit_test(test_init_bitmap_n),
+ cmocka_unit_test(test_test_bit),
+ cmocka_unit_test(test_all_bit),
+ cmocka_unit_test(test_syscommon_notifier_emit_notify_p1),
+ cmocka_unit_test(test_syscommon_notifier_emit_notify_p2),
+ cmocka_unit_test(test_syscommon_notifier_emit_notify_p3),
+ cmocka_unit_test(test_syscommon_notifier_emit_notify_once_p),
+ cmocka_unit_test(test_destroy_callback_p1),
+ cmocka_unit_test(test_destroy_callback_p2),
+ cmocka_unit_test(test_destroy_callback_p3),
+ cmocka_unit_test(test_syscommon_notifier_emit_notify_priority_p1),
+};
+TESTSUITE(testsuite_libcommon)
#include "test-main.h"
-int main(int argc, char *argv[])
-{
- int fail = 0;
- DIR *dir;
- struct dirent *ent;
-
- dir = opendir(TEST_SUITE_DIRECTORY);
- if (!dir) {
- printf("Failed to opendir, %m\n");
- return 1;
- }
-
- while ((ent = readdir(dir))) {
- void *handle;
- char sopath[512] = {0, };
- int (*run_test_suite) (void);
-
- if (!strstr(ent->d_name, ".so"))
- continue;
-
- snprintf(sopath, sizeof(sopath), "%s/%s", TEST_SUITE_DIRECTORY, ent->d_name);
-
- handle = dlopen(sopath, RTLD_LAZY);
- if (!handle) {
- printf("Failed to dlopen, %s\n", dlerror());
- continue;
- }
+static int totalfail = 0;
- run_test_suite = dlsym(handle, "run_test_suite");
- if (!run_test_suite) {
- printf("Failed to dlsym, %s\n", dlerror());
- dlclose(handle);
- continue;
- }
-
- fail += run_test_suite();
- dlclose(handle);
- }
-
- closedir(dir);
+void testsuite_report_failcount(int failcount)
+{
+ totalfail += failcount;
+}
- return fail;
+int main(int argc, char *argv[])
+{
+ /**
+ * All test suites will run by constructor before the main() and the totalfail
+ * will be updated when each testsuite calls testsuite_record_failcount(),
+ * notifying about how many testcases they have failed. Therefore, the main()
+ * just need to return totalfail.
+ */
+ return totalfail;
}