cmake: Print a message that uid_wrapper was found with find_package()
[uid_wrapper.git] / tests / CMakeLists.txt
1 project(tests C)
2
3 add_library(uwrap_fake_socket_wrapper SHARED uwrap_fake_socket_wrapper.c)
4 target_compile_options(uwrap_fake_socket_wrapper
5                        PRIVATE
6                            ${DEFAULT_C_COMPILE_FLAGS}
7                            -D_GNU_SOURCE)
8 target_include_directories(uwrap_fake_socket_wrapper
9                            PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
10 set(UWRAP_FAKE_SOCKET_WRAPPER_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}uwrap_fake_socket_wrapper${CMAKE_SHARED_LIBRARY_SUFFIX}")
11
12 function(ADD_CMOCKA_TEST_ENVIRONMENT _TEST_NAME)
13     if (CMAKE_BUILD_TYPE)
14         string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
15         if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer")
16             find_library(ASAN_LIBRARY
17                          NAMES asan)
18             if (NOT ASAN_LIBRARY)
19                 foreach(version RANGE 10 1)
20                     if (NOT ASAN_LIBRARY)
21                         find_library(ASAN_LIBRARY libasan.so.${version})
22                     endif()
23                 endforeach()
24             endif()
25         endif()
26     endif()
27
28     if (ASAN_LIBRARY)
29         list(APPEND PRELOAD_LIBRARIES ${ASAN_LIBRARY})
30     endif()
31     list(APPEND PRELOAD_LIBRARIES ${UWRAP_FAKE_SOCKET_WRAPPER_LOCATION})
32     list(APPEND PRELOAD_LIBRARIES ${UID_WRAPPER_LOCATION})
33
34     if (OSX)
35         set(TORTURE_ENVIRONMENT "DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${UID_WRAPPER_LOCATION}")
36     else ()
37         string(REPLACE ";" ":" _TMP_ENV "${PRELOAD_LIBRARIES}")
38         set(TORTURE_ENVIRONMENT "LD_PRELOAD=${_TMP_ENV}")
39     endif()
40
41     list(APPEND TORTURE_ENVIRONMENT UID_WRAPPER=1)
42
43     if (CMAKE_BUILD_TYPE)
44         string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
45         if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer" OR
46             CMAKE_BUILD_TYPE_LOWER STREQUAL "threadsanitizer" OR
47             CMAKE_BUILD_TYPE_LOWER STREQUAL "undefinedsanitizer")
48             list(APPEND TORTURE_ENVIRONMENT "UID_WRAPPER_DISABLE_DEEPBIND=1")
49         endif()
50     endif()
51
52     foreach(_arg ${ARGN})
53         list(APPEND TORTURE_ENVIRONMENT ${_arg})
54     endforeach()
55
56     set_property(TEST
57                     ${_TEST_NAME}
58                 PROPERTY
59                     ENVIRONMENT "${TORTURE_ENVIRONMENT}")
60 endfunction()
61
62 set(TESTSUITE_LIBRARIES ${UWRAP_REQUIRED_LIBRARIES} ${CMOCKA_LIBRARY})
63
64 if (BSD)
65     add_definitions(-DBSD)
66 endif (BSD)
67
68 add_executable(mock_exec_uid mock_exec_uid.c)
69 target_compile_options(mock_exec_uid
70                        PRIVATE
71                            ${DEFAULT_C_COMPILE_FLAGS}
72                            -D_GNU_SOURCE)
73 target_include_directories(mock_exec_uid
74                            PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
75
76 set(UWRAP_UID_TESTS
77      test_setuid
78      test_seteuid)
79
80 if (HAVE_SETREUID)
81     list(APPEND UWRAP_UID_TESTS test_setreuid)
82 endif (HAVE_SETREUID)
83
84 if (HAVE_SETRESUID)
85     list(APPEND UWRAP_UID_TESTS test_setresuid test_setuid_euid1 test_setuid_euid2)
86     if (HAVE_GETRESUID)
87         list(APPEND UWRAP_UID_TESTS test_getresuid test_fork_exec)
88     endif (HAVE_GETRESUID)
89 endif (HAVE_SETRESUID)
90
91 set(UWRAP_SYSCALL_UID_TESTS
92     test_syscall_setuid
93     test_syscall_setreuid
94     test_syscall_setresuid)
95
96 set(UWRAP_GID_TESTS
97     test_setgid
98     test_setegid)
99
100 if (HAVE_SETREGID)
101     list(APPEND UWRAP_GID_TESTS test_setregid)
102 endif (HAVE_SETREGID)
103
104 if (HAVE_SETRESGID)
105     list(APPEND UWRAP_GID_TESTS test_setresgid)
106
107     if (HAVE_GETRESGID)
108         list(APPEND UWRAP_GID_TESTS test_setresgid_unprivileged)
109     endif (HAVE_GETRESGID)
110 endif (HAVE_SETRESGID)
111
112 set(UWRAP_TESTS
113     ${UWRAP_UID_TESTS}
114     ${UWRAP_GID_TESTS}
115     test_setgroups
116     test_syscall
117     test_syscall_swrap
118     ${UWRAP_SYSCALL_UID_TESTS}
119     test_syscall_gid)
120
121 if (HAVE_LINUX_32BIT_SYSCALLS)
122     set(UWRAP_TESTS
123         ${UWRAP_TESTS}
124         test_syscall_setuid32
125         test_syscall_setreuid32
126         test_syscall_setresuid32
127         test_syscall_setgid32
128         test_syscall_setregid32
129         test_syscall_setresgid32
130         test_syscall_setgroups32)
131 endif (HAVE_LINUX_32BIT_SYSCALLS)
132
133 foreach(_UWRAP_TEST ${UWRAP_TESTS})
134     add_cmocka_test(${_UWRAP_TEST}
135                     SOURCES ${_UWRAP_TEST}.c
136                     COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
137                     LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
138                     LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
139
140     target_include_directories(${_UWRAP_TEST}
141                                PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
142     add_cmocka_test_environment(${_UWRAP_TEST} UID_WRAPPER_ROOT=1)
143 endforeach()
144
145 # helper library implementing uid_wrapper_enabled()
146 add_library(uwrap_enabled SHARED uwrap_enabled.c)
147 target_compile_options(uwrap_enabled
148                        PRIVATE
149                            ${DEFAULT_C_COMPILE_FLAGS})
150
151 add_cmocka_test(test_uwrap_enabled
152                 SOURCES test_uwrap_enabled.c
153                 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
154                 LINK_LIBRARIES ${TESTSUITE_LIBRARIES} uwrap_enabled
155                 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
156 target_include_directories(test_uwrap_enabled
157                            PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
158 add_cmocka_test_environment(test_uwrap_enabled)
159
160 if (NOT CMAKE_BUILD_TYPE_LOWER MATCHES "sanitizer" AND
161     NOT CMAKE_CROSSCOMPILING)
162     add_cmocka_test(test_uwrap_disabled
163                     SOURCES test_uwrap_disabled.c
164                     COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
165                     LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
166                     LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
167     target_include_directories(test_uwrap_disabled
168                                PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
169     set_property(
170         TEST
171             test_uwrap_disabled
172         PROPERTY
173             ENVIRONMENT LD_PRELOAD=${UID_WRAPPER_LOCATION})
174 endif ()
175
176 add_cmocka_test(test_thread_setuid
177                 SOURCES test_thread_setuid.c
178                 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
179                 LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
180                 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
181 target_include_directories(test_thread_setuid
182                            PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
183 add_cmocka_test_environment(test_thread_setuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
184
185 add_cmocka_test(test_thread_setreuid
186                 SOURCES test_thread_setreuid.c
187                 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
188                 LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
189                 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
190 target_include_directories(test_thread_setreuid
191                            PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
192 add_cmocka_test_environment(test_thread_setreuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
193
194 add_cmocka_test(test_thread_sync_setreuid
195                 SOURCES test_thread_sync_setreuid.c
196                 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
197                 LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
198                 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
199 target_include_directories(test_thread_sync_setreuid
200                            PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
201 add_cmocka_test_environment(test_thread_sync_setreuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
202
203 add_cmocka_test(test_glibc_thread_support
204                 SOURCES test_glibc_thread_support.c
205                 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
206                 LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
207                 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
208 target_include_directories(test_glibc_thread_support
209                            PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
210 add_cmocka_test_environment(test_glibc_thread_support UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
211
212 if (LINUX)
213     add_executable(getuids getuids.c)
214     target_compile_options(getuids
215                            PRIVATE
216                                ${DEFAULT_C_COMPILE_FLAGS}
217                                -D_GNU_SOURCE)
218 endif (LINUX)