mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-19 18:03:50 +00:00
* Problem: TIPC availability check is too strict Solution: at build time only check if the API is available. In the tests do a first check and a skip if the functionality is not available. TIPC needs an in-tree but not loaded by default kernel module, tipc.ko to be loaded, which requires root, so it is unlikely to be available on any build system by default. This will allow most distributions to ship with TIPC support built in, and to avoid tests failure if the module is not there. * Problem: no Travis tests for TIPC Solution: mark one job with sudo: required and load the kernel module * Problem: CMake fails when test returns 77 (skip) Solution: set property to let it mark the test as skipped as intended
237 lines
6.6 KiB
CMake
237 lines
6.6 KiB
CMake
# CMake build script for ZeroMQ tests
|
|
cmake_minimum_required(VERSION "2.8.1")
|
|
|
|
# On Windows: solution file will be called tests.sln
|
|
PROJECT(tests)
|
|
|
|
set(tests
|
|
test_ancillaries
|
|
test_system
|
|
test_pair_inproc
|
|
test_pair_tcp
|
|
test_reqrep_inproc
|
|
test_reqrep_tcp
|
|
test_hwm
|
|
test_hwm_pubsub
|
|
test_reqrep_device
|
|
test_sub_forward
|
|
test_invalid_rep
|
|
test_msg_flags
|
|
test_msg_ffn
|
|
test_connect_resolve
|
|
test_immediate
|
|
test_last_endpoint
|
|
test_term_endpoint
|
|
test_router_mandatory
|
|
test_probe_router
|
|
test_stream
|
|
test_stream_empty
|
|
test_stream_disconnect
|
|
test_disconnect_inproc
|
|
test_unbind_inproc
|
|
test_unbind_wildcard
|
|
test_ctx_options
|
|
test_ctx_destroy
|
|
test_security_null
|
|
test_security_plain
|
|
test_security_zap
|
|
test_iov
|
|
test_spec_req
|
|
test_spec_rep
|
|
test_spec_dealer
|
|
test_spec_router
|
|
test_spec_pushpull
|
|
test_req_correlate
|
|
test_req_relaxed
|
|
test_conflate
|
|
test_inproc_connect
|
|
test_issue_566
|
|
test_shutdown_stress
|
|
test_timeo
|
|
test_many_sockets
|
|
test_diffserv
|
|
test_connect_rid
|
|
test_xpub_nodrop
|
|
test_pub_invert_matching
|
|
test_setsockopt
|
|
test_sockopt_hwm
|
|
test_heartbeats
|
|
test_atomics
|
|
test_bind_src_address
|
|
test_capabilities
|
|
test_metadata
|
|
test_router_handover
|
|
test_srcfd
|
|
test_stream_timeout
|
|
test_xpub_manual
|
|
test_xpub_welcome_msg
|
|
test_xpub_verbose
|
|
test_base85
|
|
test_bind_after_connect_tcp
|
|
test_sodium
|
|
test_monitor
|
|
test_socket_null
|
|
test_reconnect_ivl
|
|
)
|
|
if(ZMQ_HAVE_CURVE)
|
|
list(APPEND tests
|
|
test_security_curve)
|
|
endif()
|
|
if(NOT WIN32)
|
|
list(APPEND tests
|
|
test_ipc_wildcard
|
|
test_pair_ipc
|
|
test_rebind_ipc
|
|
test_reqrep_ipc
|
|
test_proxy
|
|
test_proxy_single_socket
|
|
test_proxy_terminate
|
|
test_getsockopt_memset
|
|
test_filter_ipc
|
|
test_stream_exceeds_buffer
|
|
test_router_mandatory_hwm
|
|
test_use_fd_ipc
|
|
test_use_fd_tcp
|
|
test_zmq_poll_fd
|
|
)
|
|
if(HAVE_FORK)
|
|
list(APPEND tests test_fork)
|
|
endif()
|
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
list(APPEND tests
|
|
test_abstract_ipc
|
|
)
|
|
if(ZMQ_HAVE_TIPC)
|
|
list(APPEND tests
|
|
test_address_tipc
|
|
test_pair_tipc
|
|
test_reqrep_device_tipc
|
|
test_reqrep_tipc
|
|
test_router_mandatory_tipc
|
|
test_sub_forward_tipc
|
|
test_connect_delay_tipc
|
|
test_shutdown_stress_tipc
|
|
test_term_endpoint_tipc
|
|
)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_VMCI)
|
|
list(APPEND tests
|
|
test_pair_vmci
|
|
test_reqrep_vmci
|
|
)
|
|
endif()
|
|
|
|
|
|
IF (ENABLE_DRAFTS)
|
|
list(APPEND tests
|
|
test_poller
|
|
test_thread_safe
|
|
test_client_server
|
|
test_timers
|
|
test_radio_dish
|
|
test_udp
|
|
test_scatter_gather
|
|
test_dgram
|
|
)
|
|
ENDIF (ENABLE_DRAFTS)
|
|
|
|
# add location of platform.hpp for Windows builds
|
|
if(WIN32)
|
|
add_definitions(-DZMQ_CUSTOM_PLATFORM_HPP)
|
|
add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
|
|
# Same name on 64bit systems
|
|
link_libraries(ws2_32.lib)
|
|
endif()
|
|
|
|
add_library (unity
|
|
STATIC
|
|
"${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity.c"
|
|
"${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity.h"
|
|
"${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity_internals.h")
|
|
set_target_properties (unity PROPERTIES
|
|
PUBLIC_HEADER "${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity.h")
|
|
target_include_directories (unity
|
|
PUBLIC "${CMAKE_CURRENT_LIST_DIR}/../external/unity")
|
|
|
|
# add library and include dirs for all targets
|
|
if (BUILD_SHARED)
|
|
link_libraries(libzmq ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} unity)
|
|
else ()
|
|
link_libraries(libzmq-static ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} unity)
|
|
endif ()
|
|
include_directories("${CMAKE_SOURCE_DIR}/../include" "${CMAKE_BINARY_DIR}")
|
|
|
|
foreach(test ${tests})
|
|
# target_sources not supported before CMake 3.1
|
|
if (ZMQ_HAVE_CURVE AND ${test} MATCHES test_security_curve)
|
|
add_executable(${test} ${test}.cpp
|
|
"../src/tweetnacl.c"
|
|
"../src/err.cpp"
|
|
"../src/random.cpp"
|
|
"../src/clock.cpp"
|
|
"testutil_security.hpp")
|
|
elseif (${test} MATCHES test_security_zap)
|
|
add_executable(${test} ${test}.cpp
|
|
"testutil_security.hpp")
|
|
else ()
|
|
add_executable(${test} ${test}.cpp)
|
|
endif ()
|
|
if(WIN32)
|
|
# This is the output for Debug dynamic builds on Visual Studio 6.0
|
|
# You should provide the correct directory, don't know how to do it automatically
|
|
find_path(LIBZMQ_PATH "libzmq.lib" PATHS "../bin/Win32/Debug/v120/dynamic")
|
|
if(NOT ${LIBZMQ_PATH} STREQUAL "LIBZMQ_PATH-NOTFOUND")
|
|
SET_TARGET_PROPERTIES( ${test} PROPERTIES LINK_FLAGS "/LIBPATH:${LIBZMQ_PATH}" )
|
|
endif()
|
|
else()
|
|
# per-test directories not generated on OS X / Darwin
|
|
if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang.*")
|
|
link_directories(${test} PRIVATE "${CMAKE_SOURCE_DIR}/../lib")
|
|
endif()
|
|
endif()
|
|
|
|
|
|
if(RT_LIBRARY)
|
|
target_link_libraries(${test} ${RT_LIBRARY} )
|
|
endif()
|
|
if(WIN32)
|
|
add_test(NAME ${test} WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH} COMMAND ${test})
|
|
else()
|
|
add_test(NAME ${test} COMMAND ${test})
|
|
endif()
|
|
set_tests_properties(${test} PROPERTIES TIMEOUT 10)
|
|
set_tests_properties(${test} PROPERTIES SKIP_RETURN_CODE 77)
|
|
endforeach()
|
|
|
|
#override timeout for these tests
|
|
if(ZMQ_HAVE_CURVE)
|
|
set_tests_properties(test_security_curve PROPERTIES TIMEOUT 60)
|
|
endif()
|
|
|
|
if(WIN32 AND ${POLLER} MATCHES "poll")
|
|
set_tests_properties(test_many_sockets PROPERTIES TIMEOUT 30)
|
|
set_tests_properties(test_immediate PROPERTIES TIMEOUT 30)
|
|
endif()
|
|
|
|
#add additional required flags
|
|
#ZMQ_USE_TWEETNACL will already be defined when not using sodium
|
|
if(ZMQ_HAVE_CURVE AND NOT ZMQ_USE_TWEETNACL)
|
|
target_compile_definitions(test_security_curve PRIVATE "-DZMQ_USE_TWEETNACL")
|
|
endif()
|
|
|
|
set_tests_properties(test_security_zap PROPERTIES TIMEOUT 60)
|
|
|
|
#Check whether all tests in the current folder are present
|
|
file(READ "${CMAKE_CURRENT_LIST_FILE}" CURRENT_LIST_FILE_CONTENT)
|
|
file(GLOB ALL_TEST_SOURCES "test_*.cpp")
|
|
foreach(TEST_SOURCE ${ALL_TEST_SOURCES})
|
|
get_filename_component(TESTNAME "${TEST_SOURCE}" NAME_WE)
|
|
string(REGEX MATCH "${TESTNAME}" MATCH_TESTNAME "${CURRENT_LIST_FILE_CONTENT}")
|
|
if (NOT MATCH_TESTNAME)
|
|
message(AUTHOR_WARNING "Test '${TESTNAME}' is not known to CTest.")
|
|
endif()
|
|
endforeach()
|