diff --git a/cmake/src/test/util/CMakeLists.txt b/cmake/src/test/util/CMakeLists.txt index 2466eca..27b0927 100644 --- a/cmake/src/test/util/CMakeLists.txt +++ b/cmake/src/test/util/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(mem) -add_subdirectory(str) \ No newline at end of file +add_subdirectory(proc) +add_subdirectory(str) diff --git a/cmake/src/test/util/proc/CMakeLists.txt b/cmake/src/test/util/proc/CMakeLists.txt new file mode 100644 index 0000000..3fceaf6 --- /dev/null +++ b/cmake/src/test/util/proc/CMakeLists.txt @@ -0,0 +1,11 @@ +project(test-util-proc) +message(STATUS "Project " ${PROJECT_NAME}) + +set(SRC ${PT_ROOT_TEST}/util/proc) + +set(SOURCE_FILES + ${SRC}/main.c) + +add_executable(${PROJECT_NAME} ${SOURCE_FILES}) + +target_link_libraries(${PROJECT_NAME} cmocka util dl) diff --git a/src/test/util/proc/main.c b/src/test/util/proc/main.c new file mode 100644 index 0000000..e418669 --- /dev/null +++ b/src/test/util/proc/main.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include + +#include "util/proc.h" + +static void test_get_folder_path_shared_object(void **state) +{ + char path[PATH_MAX]; + char expected[PATH_MAX]; + Dl_info info; + char *separator; + + assert_true(util_proc_get_folder_path_shared_object( + (void *) test_get_folder_path_shared_object, path, sizeof(path))); + + assert_true(dladdr((void *) test_get_folder_path_shared_object, &info)); + assert_non_null(info.dli_fname); + assert_true(strlen(info.dli_fname) < sizeof(expected)); + strcpy(expected, info.dli_fname); + separator = strrchr(expected, '/'); + assert_non_null(separator); + + if (separator == expected) { + separator[1] = '\0'; + } else { + *separator = '\0'; + } + + assert_string_equal(path, expected); +} + +static void test_get_folder_path_shared_object_invalid_args(void **state) +{ + char path[PATH_MAX]; + + assert_false( + util_proc_get_folder_path_shared_object(NULL, path, sizeof(path))); + assert_false(util_proc_get_folder_path_shared_object( + (void *) test_get_folder_path_shared_object_invalid_args, + NULL, + sizeof(path))); + assert_false(util_proc_get_folder_path_shared_object( + (void *) test_get_folder_path_shared_object_invalid_args, path, 0)); +} + +static void test_get_folder_path_shared_object_small_buffer(void **state) +{ + char path[1]; + + assert_false(util_proc_get_folder_path_shared_object( + (void *) test_get_folder_path_shared_object_small_buffer, + path, + sizeof(path))); +} + +int main(int argc, char *argv[]) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(test_get_folder_path_shared_object), + cmocka_unit_test(test_get_folder_path_shared_object_invalid_args), + cmocka_unit_test(test_get_folder_path_shared_object_small_buffer)}; + + return cmocka_run_group_tests(tests, NULL, NULL); +}