gitlab-ci: Setup CI for nss_wrapper
[nss_wrapper.git] / tests / CMakeLists.txt
1 project(tests C)
2
3 set(TESTSUITE_LIBRARIES ${NWRAP_REQUIRED_LIBRARIES} ${CMOCKA_LIBRARY})
4 string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
5
6 add_library(nss_nwrap SHARED nss_nwrap.c)
7 target_compile_options(nss_nwrap
8                        PRIVATE
9                           ${DEFAULT_C_COMPILE_FLAGS})
10 target_include_directories(nss_nwrap
11                            PRIVATE
12                                ${CMAKE_BINARY_DIR}
13                                ${CMOCKA_INCLUDE_DIR})
14
15 set(HOMEDIR ${CMAKE_CURRENT_BINARY_DIR})
16
17 configure_file(passwd.in ${CMAKE_CURRENT_BINARY_DIR}/passwd @ONLY)
18 configure_file(group.in ${CMAKE_CURRENT_BINARY_DIR}/group @ONLY)
19 configure_file(hosts.in ${CMAKE_CURRENT_BINARY_DIR}/hosts @ONLY)
20 configure_file(shadow.in ${CMAKE_CURRENT_BINARY_DIR}/shadow @ONLY)
21
22 set(NWRAP_TESTS
23     testsuite
24     test_nwrap_vector
25     test_getaddrinfo
26     test_getnameinfo
27     test_gethostby_name_addr
28     test_gethostent)
29
30 if (HAVE_SHADOW_H)
31     list(APPEND NWRAP_TESTS test_shadow)
32 endif (HAVE_SHADOW_H)
33
34 function(ADD_CMOCKA_TEST_ENVIRONMENT _TEST_NAME)
35     if (CMAKE_BUILD_TYPE)
36         string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
37         if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer")
38             find_library(ASAN_LIBRARY
39                          NAMES asan)
40             if (NOT ASAN_LIBRARY)
41                 foreach(version RANGE 10 1)
42                     if (NOT ASAN_LIBRARY)
43                         find_library(ASAN_LIBRARY libasan.so.${version})
44                     endif()
45                 endforeach()
46             endif()
47         endif()
48     endif()
49
50     if (ASAN_LIBRARY)
51         list(APPEND PRELOAD_LIBRARIES ${ASAN_LIBRARY})
52     endif()
53     list(APPEND PRELOAD_LIBRARIES ${NSS_WRAPPER_LOCATION})
54
55     if (OSX)
56         set(TORTURE_ENVIRONMENT "DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${NSS_WRAPPER_LOCATION}")
57     else ()
58         string(REPLACE ";" ":" _TMP_ENV "${PRELOAD_LIBRARIES}")
59         set(TORTURE_ENVIRONMENT "LD_PRELOAD=${_TMP_ENV}")
60     endif()
61
62     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_PASSWD=${CMAKE_CURRENT_BINARY_DIR}/passwd)
63     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_GROUP=${CMAKE_CURRENT_BINARY_DIR}/group)
64     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_SHADOW=${CMAKE_CURRENT_BINARY_DIR}/shadow)
65     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_HOSTS=${CMAKE_CURRENT_BINARY_DIR}/hosts)
66     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_MODULE_SO_PATH=${CMAKE_CURRENT_BINARY_DIR}/libnss_nwrap.so)
67     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_MODULE_FN_PREFIX=nwrap)
68
69     set_property(TEST
70                     ${_TEST_NAME}
71                 PROPERTY
72                     ENVIRONMENT "${TORTURE_ENVIRONMENT}")
73 endfunction()
74 foreach(_NWRAP_TEST ${NWRAP_TESTS})
75     add_cmocka_test(${_NWRAP_TEST}
76                     SOURCES ${_NWRAP_TEST}.c
77                     COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
78                     LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
79                     LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
80     if (BSD)
81         target_compile_options(${_NWRAP_TEST}
82                                PRIVATE
83                                    -DBSD)
84     endif()
85     target_include_directories(${_NWRAP_TEST}
86                                PRIVATE
87                                    ${CMAKE_BINARY_DIR}
88                                    ${CMOCKA_INCLUDE_DIR})
89     add_cmocka_test_environment(${_NWRAP_TEST})
90 endforeach()
91
92 if (HAVE_SHADOW_H)
93     # This is needed to check the hash in tests/shadow.in
94     target_link_libraries(test_shadow PRIVATE crypt)
95 endif (HAVE_SHADOW_H)
96
97 target_link_libraries(test_nwrap_vector PRIVATE ${CMAKE_THREAD_LIBS_INIT})
98 target_link_libraries(test_gethostby_name_addr PRIVATE ${CMAKE_THREAD_LIBS_INIT})
99
100 # Test nwrap without wrapping so the libc functions are called
101 if (NOT CMAKE_BUILD_TYPE_LOWER MATCHES "sanitizer")
102     add_cmocka_test(test_nwrap_disabled
103                     SOURCES test_nwrap_disabled.c
104                     COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
105                     LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
106                     LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
107     target_include_directories(test_nwrap_disabled
108                                PRIVATE
109                                    ${CMAKE_BINARY_DIR}
110                                    ${CMOCKA_INCLUDE_DIR})
111     set_property(
112         TEST
113             test_nwrap_disabled
114         PROPERTY
115             ENVIRONMENT LD_PRELOAD=${NSS_WRAPPER_LOCATION})
116 endif()