18c0ad2fe217d4aeb48a69cbe15fe6cc3a0f542c
[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     test_getpwuid_module)
30
31 if (HAVE_SHADOW_H)
32     list(APPEND NWRAP_TESTS test_shadow)
33 endif (HAVE_SHADOW_H)
34
35 function(ADD_CMOCKA_TEST_ENVIRONMENT _TEST_NAME)
36     if (CMAKE_BUILD_TYPE)
37         string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
38         if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer")
39             find_library(ASAN_LIBRARY
40                          NAMES asan)
41             if (NOT ASAN_LIBRARY)
42                 foreach(version RANGE 10 1)
43                     if (NOT ASAN_LIBRARY)
44                         find_library(ASAN_LIBRARY libasan.so.${version})
45                     endif()
46                 endforeach()
47             endif()
48         endif()
49     endif()
50
51     if (ASAN_LIBRARY)
52         list(APPEND PRELOAD_LIBRARIES ${ASAN_LIBRARY})
53     endif()
54     list(APPEND PRELOAD_LIBRARIES ${NSS_WRAPPER_LOCATION})
55
56     if (OSX)
57         set(TORTURE_ENVIRONMENT "DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${NSS_WRAPPER_LOCATION}")
58     else ()
59         string(REPLACE ";" ":" _TMP_ENV "${PRELOAD_LIBRARIES}")
60         set(TORTURE_ENVIRONMENT "LD_PRELOAD=${_TMP_ENV}")
61     endif()
62
63     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_PASSWD=${CMAKE_CURRENT_BINARY_DIR}/passwd)
64     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_GROUP=${CMAKE_CURRENT_BINARY_DIR}/group)
65     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_SHADOW=${CMAKE_CURRENT_BINARY_DIR}/shadow)
66     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_HOSTS=${CMAKE_CURRENT_BINARY_DIR}/hosts)
67     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_MODULE_SO_PATH=${CMAKE_CURRENT_BINARY_DIR}/libnss_nwrap.so)
68     list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_MODULE_FN_PREFIX=nwrap)
69     if (CMAKE_BUILD_TYPE)
70         string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
71
72         if (CMAKE_BUILD_TYPE_LOWER STREQUAL "threadsanitizer")
73             list(APPEND TORTURE_ENVIRONMENT NSS_WRAPPER_DISABLE_DEEPBIND=1)
74         endif()
75     endif()
76
77     set_property(TEST
78                     ${_TEST_NAME}
79                 PROPERTY
80                     ENVIRONMENT "${TORTURE_ENVIRONMENT}")
81 endfunction()
82 foreach(_NWRAP_TEST ${NWRAP_TESTS})
83     add_cmocka_test(${_NWRAP_TEST}
84                     SOURCES ${_NWRAP_TEST}.c
85                     COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
86                     LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
87                     LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
88     if (BSD)
89         target_compile_options(${_NWRAP_TEST}
90                                PRIVATE
91                                    -DBSD)
92     endif()
93     target_include_directories(${_NWRAP_TEST}
94                                PRIVATE
95                                    ${CMAKE_BINARY_DIR}
96                                    ${CMOCKA_INCLUDE_DIR})
97     add_cmocka_test_environment(${_NWRAP_TEST})
98 endforeach()
99
100 if (HAVE_SHADOW_H)
101     # This is needed to check the hash in tests/shadow.in
102     target_link_libraries(test_shadow PRIVATE crypt)
103 endif (HAVE_SHADOW_H)
104
105 target_link_libraries(test_nwrap_vector PRIVATE ${CMAKE_THREAD_LIBS_INIT})
106 target_link_libraries(test_gethostby_name_addr PRIVATE ${CMAKE_THREAD_LIBS_INIT})
107
108 # Test nwrap without wrapping so the libc functions are called
109 if (NOT CMAKE_BUILD_TYPE_LOWER MATCHES "sanitizer")
110     add_cmocka_test(test_nwrap_disabled
111                     SOURCES test_nwrap_disabled.c
112                     COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
113                     LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
114                     LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
115     target_include_directories(test_nwrap_disabled
116                                PRIVATE
117                                    ${CMAKE_BINARY_DIR}
118                                    ${CMOCKA_INCLUDE_DIR})
119     set_property(
120         TEST
121             test_nwrap_disabled
122         PROPERTY
123             ENVIRONMENT LD_PRELOAD=${NSS_WRAPPER_LOCATION})
124 endif()