blob: 2f76c6b563479ac0bcd1ce77d513f10417f04d87 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
project(tests C)
include_directories(
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/src
${CMOCKA_INCLUDE_DIR}
)
set(TORTURE_LIBRARY torture)
# RFC862 echo server
add_executable(echo_srv echo_srv.c)
target_compile_options(echo_srv
PRIVATE
${DEFAULT_C_COMPILE_FLAGS}
-D_GNU_SOURCE)
target_link_libraries(echo_srv ${SWRAP_REQUIRED_LIBRARIES})
add_library(${TORTURE_LIBRARY} STATIC torture.c)
target_compile_options(${TORTURE_LIBRARY}
PRIVATE
${DEFAULT_C_COMPILE_FLAGS}
-D_GNU_SOURCE)
target_link_libraries(${TORTURE_LIBRARY}
${CMOCKA_LIBRARY}
${SWRAP_REQUIRED_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT})
set(SWRAP_THREADED_TESTS
test_thread_sockets
test_thread_echo_tcp_connect
test_thread_echo_tcp_write_read
test_thread_echo_tcp_sendmsg_recvmsg
test_thread_echo_udp_send_recv)
set(SWRAP_TESTS
test_ioctl
test_tcp_listen
test_tcp_dup2
test_fcntl
test_echo_tcp_connect
test_echo_tcp_bind
test_echo_tcp_socket_options
test_echo_tcp_sendmsg_recvmsg
test_echo_tcp_write_read
test_echo_tcp_writev_readv
test_echo_tcp_get_peer_sock_name
test_echo_udp_sendto_recvfrom
test_echo_udp_send_recv
test_echo_udp_sendmsg_recvmsg
test_swrap_unit
test_max_sockets
test_close_failure
test_tcp_socket_overwrite
${SWRAP_THREADED_TESTS})
if (HAVE_STRUCT_MSGHDR_MSG_CONTROL)
set(SWRAP_TESTS ${SWRAP_TESTS} test_sendmsg_recvmsg_fd)
endif (HAVE_STRUCT_MSGHDR_MSG_CONTROL)
function(ADD_CMOCKA_TEST_ENVIRONMENT _TEST_NAME)
if (CMAKE_BUILD_TYPE)
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer")
find_library(ASAN_LIBRARY
NAMES asan)
if (NOT ASAN_LIBRARY)
foreach(version RANGE 10 1)
if (NOT ASAN_LIBRARY)
find_library(ASAN_LIBRARY libasan.so.${version})
endif()
endforeach()
endif()
endif()
endif()
if (ASAN_LIBRARY)
list(APPEND PRELOAD_LIBRARIES ${ASAN_LIBRARY})
endif()
list(APPEND PRELOAD_LIBRARIES ${SOCKET_WRAPPER_LOCATION})
if (OSX)
set(TORTURE_ENVIRONMENT "DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${SOCKET_WRAPPER_LOCATION}")
else ()
string(REPLACE ";" ":" _TMP_ENV "${PRELOAD_LIBRARIES}")
set(TORTURE_ENVIRONMENT "LD_PRELOAD=${_TMP_ENV}")
endif()
set_property(TEST
${_TEST_NAME}
PROPERTY
ENVIRONMENT "${TORTURE_ENVIRONMENT}")
endfunction()
foreach(_SWRAP_TEST ${SWRAP_TESTS})
add_cmocka_test(${_SWRAP_TEST}
SOURCES ${_SWRAP_TEST}.c
COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
LINK_LIBRARIES ${TORTURE_LIBRARY}
LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
add_cmocka_test_environment(${_SWRAP_TEST})
endforeach()
# These test will fail on because there is a threading race condition in
# FreeBSD.
# See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=231848
if (FREEBSD)
set_tests_properties(test_thread_echo_tcp_connect
PROPERTIES DISABLED TRUE)
set_tests_properties(test_thread_echo_tcp_write_read
PROPERTIES DISABLED TRUE)
set_tests_properties(test_thread_echo_tcp_sendmsg_recvmsg
PROPERTIES DISABLED TRUE)
endif()
if (HELGRIND_TESTING)
find_program(VALGRIND_EXECUTABLE valgrind)
if (VALGRIND_EXECUTABLE)
set(VALGRIND_HELGRIND_OPTIONS -v --trace-children=yes --tool=helgrind --error-exitcode=1 --read-var-info=yes --suppressions=${CMAKE_CURRENT_SOURCE_DIR}/helgrind.supp)
foreach(_TEST ${SWRAP_THREADED_TESTS})
set(_HELGRIND_TEST "helgrind_${_TEST}")
add_test(NAME ${_HELGRIND_TEST} COMMAND ${VALGRIND_EXECUTABLE} ${VALGRIND_HELGRIND_OPTIONS} ${CMAKE_CURRENT_BINARY_DIR}/${_TEST})
if (OSX)
set_property(
TEST
${_HELGRIND_TEST}
PROPERTY
ENVIRONMENT DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${SOCKET_WRAPPER_LOCATION})
else ()
set_property(
TEST
${_HELGRIND_TEST}
PROPERTY
ENVIRONMENT LD_PRELOAD=${SOCKET_WRAPPER_LOCATION})
endif()
endforeach()
endif()
endif()
# test_fork_pthread
add_library(thread_deadlock SHARED thread_deadlock.c)
target_link_libraries(thread_deadlock ${CMAKE_THREAD_LIBS_INIT})
target_compile_options(thread_deadlock PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
add_cmocka_test(test_fork_thread_deadlock
SOURCES test_fork_thread_deadlock.c
COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
LINK_LIBRARIES ${TORTURE_LIBRARY} thread_deadlock
LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
add_cmocka_test_environment(test_fork_thread_deadlock)
|