5 ${CMAKE_CURRENT_SOURCE_DIR}
6 ${CMAKE_SOURCE_DIR}/src
10 # Required for cmocka >= 1.1.6
11 if (TARGET cmocka::cmocka)
12 set(CMOCKA_LIBRARY cmocka::cmocka)
15 set(TORTURE_LIBRARY torture)
18 add_executable(echo_srv echo_srv.c)
19 target_compile_options(echo_srv
21 ${DEFAULT_C_COMPILE_FLAGS}
23 target_link_libraries(echo_srv ${SWRAP_REQUIRED_LIBRARIES})
24 if (DEFINED DEFAULT_LINK_FLAGS)
25 set_target_properties(echo_srv
27 LINK_FLAGS ${DEFAULT_LINK_FLAGS})
30 add_library(${TORTURE_LIBRARY} STATIC torture.c)
31 target_compile_options(${TORTURE_LIBRARY}
33 ${DEFAULT_C_COMPILE_FLAGS}
35 target_link_libraries(${TORTURE_LIBRARY}
37 ${SWRAP_REQUIRED_LIBRARIES}
38 ${CMAKE_THREAD_LIBS_INIT})
40 add_library(swrap_fake_uid_wrapper SHARED swrap_fake_uid_wrapper.c)
41 target_compile_options(swrap_fake_uid_wrapper
43 ${DEFAULT_C_COMPILE_FLAGS}
45 #target_include_directories(swrap_fake_uid_wrapper
46 # PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
47 set(SWRAP_FAKE_UID_WRAPPER_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}swrap_fake_uid_wrapper${CMAKE_SHARED_LIBRARY_SUFFIX}")
49 set(SWRAP_THREADED_TESTS
51 test_thread_echo_tcp_connect
52 test_thread_echo_tcp_write_read
53 test_thread_echo_tcp_sendmsg_recvmsg
54 test_thread_echo_udp_send_recv)
64 test_echo_tcp_socket_options
65 test_echo_tcp_sendmsg_recvmsg
66 test_echo_tcp_sendmmsg_recvmmsg
67 test_echo_tcp_write_read
69 test_echo_tcp_writev_readv
70 test_echo_tcp_get_peer_sock_name
71 test_echo_udp_sendto_recvfrom
72 test_echo_udp_send_recv
73 test_echo_udp_sendmsg_recvmsg
77 test_tcp_socket_overwrite
79 ${SWRAP_THREADED_TESTS})
81 if (HAVE_STRUCT_MSGHDR_MSG_CONTROL)
82 set(SWRAP_TESTS ${SWRAP_TESTS} test_sendmsg_recvmsg_fd test_echo_tcp_sendmsg_recvmsg_fd)
83 endif (HAVE_STRUCT_MSGHDR_MSG_CONTROL)
85 function(ADD_CMOCKA_TEST_ENVIRONMENT _TEST_NAME)
87 string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
88 if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer")
89 find_library(ASAN_LIBRARY
92 foreach(version RANGE 10 1)
94 find_library(ASAN_LIBRARY libasan.so.${version})
102 list(APPEND PRELOAD_LIBRARIES ${ASAN_LIBRARY})
104 list(APPEND PRELOAD_LIBRARIES ${SWRAP_FAKE_UID_WRAPPER_LOCATION})
105 list(APPEND PRELOAD_LIBRARIES ${SOCKET_WRAPPER_LOCATION})
108 set(TORTURE_ENVIRONMENT "DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${SOCKET_WRAPPER_LOCATION}")
110 string(REPLACE ";" ":" _TMP_ENV "${PRELOAD_LIBRARIES}")
111 set(TORTURE_ENVIRONMENT "LD_PRELOAD=${_TMP_ENV}")
114 if (CMAKE_BUILD_TYPE)
115 string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
116 if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer" OR
117 CMAKE_BUILD_TYPE_LOWER STREQUAL "threadsanitizer" OR
118 CMAKE_BUILD_TYPE_LOWER STREQUAL "undefinedsanitizer")
119 list(APPEND TORTURE_ENVIRONMENT "SOCKET_WRAPPER_DISABLE_DEEPBIND=1")
126 ENVIRONMENT "${TORTURE_ENVIRONMENT}")
129 if (CMAKE_SIZEOF_VOID_P EQUAL 4)
130 message(STATUS "Enabling large file support for tests")
131 set(LFS_CFLAGS "-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64")
134 foreach(_SWRAP_TEST ${SWRAP_TESTS})
135 add_cmocka_test(${_SWRAP_TEST}
136 SOURCES ${_SWRAP_TEST}.c
137 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE ${LFS_CFLAGS}
138 LINK_LIBRARIES ${TORTURE_LIBRARY} socket_wrapper_noop
139 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
140 add_cmocka_test_environment(${_SWRAP_TEST})
143 if (HELGRIND_TESTING)
144 find_program(VALGRIND_EXECUTABLE valgrind)
145 if (VALGRIND_EXECUTABLE)
146 set(VALGRIND_HELGRIND_OPTIONS -v --trace-children=yes --tool=helgrind --error-exitcode=1 --read-var-info=yes --suppressions=${CMAKE_CURRENT_SOURCE_DIR}/helgrind.supp)
148 foreach(_TEST ${SWRAP_THREADED_TESTS})
149 set(_HELGRIND_TEST "helgrind_${_TEST}")
151 add_test(NAME ${_HELGRIND_TEST} COMMAND ${VALGRIND_EXECUTABLE} ${VALGRIND_HELGRIND_OPTIONS} ${CMAKE_CURRENT_BINARY_DIR}/${_TEST})
157 ENVIRONMENT DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${SOCKET_WRAPPER_LOCATION})
163 ENVIRONMENT LD_PRELOAD=${SOCKET_WRAPPER_LOCATION} SOCKET_WRAPPER_DISABLE_DEEPBIND=1)
169 # test_swrap_unit (don't use LFS)
170 add_cmocka_test(test_swrap_unit
171 SOURCES test_swrap_unit.c
172 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
173 LINK_LIBRARIES ${TORTURE_LIBRARY} socket_wrapper_noop
174 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
175 add_cmocka_test_environment(test_swrap_unit)
178 add_library(thread_deadlock SHARED thread_deadlock.c)
179 target_link_libraries(thread_deadlock ${CMAKE_THREAD_LIBS_INIT})
180 target_compile_options(thread_deadlock PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
182 add_cmocka_test(test_fork_thread_deadlock
183 SOURCES test_fork_thread_deadlock.c
184 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
185 LINK_LIBRARIES ${TORTURE_LIBRARY} thread_deadlock
186 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
187 add_cmocka_test_environment(test_fork_thread_deadlock)