5 ${CMAKE_CURRENT_SOURCE_DIR}
6 ${CMAKE_SOURCE_DIR}/src
10 set(TORTURE_LIBRARY torture)
13 add_executable(echo_srv echo_srv.c)
14 target_compile_options(echo_srv
16 ${DEFAULT_C_COMPILE_FLAGS}
18 target_link_libraries(echo_srv ${SWRAP_REQUIRED_LIBRARIES})
19 if (DEFINED DEFAULT_LINK_FLAGS)
20 set_target_properties(echo_srv
22 LINK_FLAGS ${DEFAULT_LINK_FLAGS})
25 add_library(${TORTURE_LIBRARY} STATIC torture.c)
26 target_compile_options(${TORTURE_LIBRARY}
28 ${DEFAULT_C_COMPILE_FLAGS}
30 target_link_libraries(${TORTURE_LIBRARY}
32 ${SWRAP_REQUIRED_LIBRARIES}
33 ${CMAKE_THREAD_LIBS_INIT})
35 set(SWRAP_THREADED_TESTS
37 test_thread_echo_tcp_connect
38 test_thread_echo_tcp_write_read
39 test_thread_echo_tcp_sendmsg_recvmsg
40 test_thread_echo_udp_send_recv)
49 test_echo_tcp_socket_options
50 test_echo_tcp_sendmsg_recvmsg
51 test_echo_tcp_write_read
52 test_echo_tcp_writev_readv
53 test_echo_tcp_get_peer_sock_name
54 test_echo_udp_sendto_recvfrom
55 test_echo_udp_send_recv
56 test_echo_udp_sendmsg_recvmsg
61 test_tcp_socket_overwrite
62 ${SWRAP_THREADED_TESTS})
64 if (HAVE_STRUCT_MSGHDR_MSG_CONTROL)
65 set(SWRAP_TESTS ${SWRAP_TESTS} test_sendmsg_recvmsg_fd test_echo_tcp_sendmsg_recvmsg_fd)
66 endif (HAVE_STRUCT_MSGHDR_MSG_CONTROL)
68 function(ADD_CMOCKA_TEST_ENVIRONMENT _TEST_NAME)
70 string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
71 if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer")
72 find_library(ASAN_LIBRARY
75 foreach(version RANGE 10 1)
77 find_library(ASAN_LIBRARY libasan.so.${version})
85 list(APPEND PRELOAD_LIBRARIES ${ASAN_LIBRARY})
87 list(APPEND PRELOAD_LIBRARIES ${SOCKET_WRAPPER_LOCATION})
90 set(TORTURE_ENVIRONMENT "DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${SOCKET_WRAPPER_LOCATION}")
92 string(REPLACE ";" ":" _TMP_ENV "${PRELOAD_LIBRARIES}")
93 set(TORTURE_ENVIRONMENT "LD_PRELOAD=${_TMP_ENV}")
97 string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
98 if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer" OR
99 CMAKE_BUILD_TYPE_LOWER STREQUAL "threadsanitizer" OR
100 CMAKE_BUILD_TYPE_LOWER STREQUAL "undefinedsanitizer")
101 list(APPEND TORTURE_ENVIRONMENT "SOCKET_WRAPPER_DISABLE_DEEPBIND=1")
108 ENVIRONMENT "${TORTURE_ENVIRONMENT}")
111 foreach(_SWRAP_TEST ${SWRAP_TESTS})
112 add_cmocka_test(${_SWRAP_TEST}
113 SOURCES ${_SWRAP_TEST}.c
114 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
115 LINK_LIBRARIES ${TORTURE_LIBRARY} socket_wrapper_noop
116 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
117 add_cmocka_test_environment(${_SWRAP_TEST})
120 if (HELGRIND_TESTING)
121 find_program(VALGRIND_EXECUTABLE valgrind)
122 if (VALGRIND_EXECUTABLE)
123 set(VALGRIND_HELGRIND_OPTIONS -v --trace-children=yes --tool=helgrind --error-exitcode=1 --read-var-info=yes --suppressions=${CMAKE_CURRENT_SOURCE_DIR}/helgrind.supp)
125 foreach(_TEST ${SWRAP_THREADED_TESTS})
126 set(_HELGRIND_TEST "helgrind_${_TEST}")
128 add_test(NAME ${_HELGRIND_TEST} COMMAND ${VALGRIND_EXECUTABLE} ${VALGRIND_HELGRIND_OPTIONS} ${CMAKE_CURRENT_BINARY_DIR}/${_TEST})
134 ENVIRONMENT DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${SOCKET_WRAPPER_LOCATION})
140 ENVIRONMENT LD_PRELOAD=${SOCKET_WRAPPER_LOCATION} SOCKET_WRAPPER_DISABLE_DEEPBIND=1)
147 add_library(thread_deadlock SHARED thread_deadlock.c)
148 target_link_libraries(thread_deadlock ${CMAKE_THREAD_LIBS_INIT})
149 target_compile_options(thread_deadlock PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
151 add_cmocka_test(test_fork_thread_deadlock
152 SOURCES test_fork_thread_deadlock.c
153 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
154 LINK_LIBRARIES ${TORTURE_LIBRARY} thread_deadlock
155 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
156 add_cmocka_test_environment(test_fork_thread_deadlock)