use ctest for testing

This commit is contained in:
Benjamin Sergeant 2020-11-11 11:11:34 -08:00
parent b05b124cb3
commit f60485d9c2
9 changed files with 142 additions and 146 deletions

View File

@ -9,5 +9,6 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: make test_make - uses: seanmiddleditch/gha-setup-ninja@master
run: make test_make - name: make test
run: make test

View File

@ -0,0 +1,14 @@
name: linux
on:
push:
paths-ignore:
- 'docs/**'
jobs:
linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: seanmiddleditch/gha-setup-ninja@master
- name: make test_asan
run: make test_asan

View File

@ -9,6 +9,7 @@ jobs:
runs-on: macOS-latest runs-on: macOS-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- uses: seanmiddleditch/gha-setup-ninja@master
- name: install mbedtls - name: install mbedtls
run: brew install mbedtls run: brew install mbedtls
- name: make test - name: make test

View File

@ -9,6 +9,7 @@ jobs:
runs-on: macOS-latest runs-on: macOS-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- uses: seanmiddleditch/gha-setup-ninja@master
- name: install openssl - name: install openssl
run: brew install openssl@1.1 run: brew install openssl@1.1
- name: make test - name: make test

View File

@ -9,5 +9,6 @@ jobs:
runs-on: macOS-latest runs-on: macOS-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: make test_tsan - uses: seanmiddleditch/gha-setup-ninja@master
run: make test_tsan - name: make test_tsan_sectransport
run: make test_tsan_sectransport

View File

@ -270,9 +270,10 @@ if (USE_WS OR USE_TEST)
FetchContent_MakeAvailable(spdlog) FetchContent_MakeAvailable(spdlog)
if (USE_WS) if (USE_WS)
add_subdirectory(ws) add_subdirectory(ws)
endif() endif()
if (USE_TEST) if (USE_TEST)
add_subdirectory(test) enable_testing()
add_subdirectory(test)
endif() endif()
endif() endif()

View File

@ -92,18 +92,20 @@ If your company or project is using this library, feel free to open an issue or
| OS | TLS | Sanitizer | Status | | OS | TLS | Sanitizer | Status |
|-------------------|-------------------|-------------------|-------------------| |-------------------|-------------------|-------------------|-------------------|
| Linux | OpenSSL | None | [![Build2][1]][7] | | Linux | OpenSSL | None | [![Build2][1]][0] |
| macOS | Secure Transport | Thread Sanitizer | [![Build2][2]][7] | | macOS | Secure Transport | Thread Sanitizer | [![Build2][2]][0] |
| macOS | OpenSSL | Thread Sanitizer | [![Build2][3]][7] | | macOS | OpenSSL | Thread Sanitizer | [![Build2][3]][0] |
| macOS | MbedTLS | Thread Sanitizer | [![Build2][4]][7] | | macOS | MbedTLS | Thread Sanitizer | [![Build2][4]][0] |
| Windows | Disabled | None | [![Build2][5]][7] | | Windows | Disabled | None | [![Build2][5]][0] |
| UWP | Disabled | None | [![Build2][6]][7] | | UWP | Disabled | None | [![Build2][6]][0] |
| Linux | OpenSSL | Address Sanitizer | [![Build2][7]][0] |
[0]: https://github.com/machinezone/IXWebSocket
[1]: https://github.com/machinezone/IXWebSocket/workflows/linux/badge.svg [1]: https://github.com/machinezone/IXWebSocket/workflows/linux/badge.svg
[2]: https://github.com/machinezone/IXWebSocket/workflows/mac_tsan_sectransport/badge.svg [2]: https://github.com/machinezone/IXWebSocket/workflows/mac_tsan_sectransport/badge.svg
[3]: https://github.com/machinezone/IXWebSocket/workflows/mac_tsan_openssl/badge.svg [3]: https://github.com/machinezone/IXWebSocket/workflows/mac_tsan_openssl/badge.svg
[4]: https://github.com/machinezone/IXWebSocket/workflows/mac_tsan_mbedtls/badge.svg [4]: https://github.com/machinezone/IXWebSocket/workflows/mac_tsan_mbedtls/badge.svg
[5]: https://github.com/machinezone/IXWebSocket/workflows/windows/badge.svg [5]: https://github.com/machinezone/IXWebSocket/workflows/windows/badge.svg
[6]: https://github.com/machinezone/IXWebSocket/workflows/uwp/badge.svg [6]: https://github.com/machinezone/IXWebSocket/workflows/uwp/badge.svg
[7]: https://github.com/machinezone/IXWebSocket [7]: https://github.com/machinezone/IXWebSocket/workflows/linux_asan/badge.svg

View File

@ -110,71 +110,30 @@ format:
test_server: test_server:
(cd test && npm i ws && node broadcast-server.js) (cd test && npm i ws && node broadcast-server.js)
# env TEST=Websocket_server make test test:
# env TEST=Websocket_chat make test mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 ..)
# env TEST=heartbeat make test (cd build ; ninja)
build_test: (cd build ; ninja test)
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_TEST=1 .. ; ninja install)
test: build_test test_asan:
(cd test ; python2.7 run.py -r) mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=address -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=address -fno-omit-frame-pointer")
(cd build ; ninja)
test_make: (cd build ; ninja test)
mkdir -p build && (cd build ; cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_WS=1 -DUSE_TEST=1 .. ; make -j 4)
(cd test ; python2.7 run.py -r)
test_tsan:
mkdir -p build && (cd build && cmake -GXcode -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 .. && xcodebuild -project ixwebsocket.xcodeproj -target ixwebsocket_unittest -enableThreadSanitizer YES)
(cd build/test ; ln -sf Debug/ixwebsocket_unittest)
(cd test ; python2.7 run.py -r)
test_ubsan:
mkdir -p build && (cd build && cmake -GXcode -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 .. && xcodebuild -project ixwebsocket.xcodeproj -target ixwebsocket_unittest -enableUndefinedBehaviorSanitizer YES)
(cd build/test ; ln -sf Debug/ixwebsocket_unittest)
(cd test ; python2.7 run.py -r)
test_asan: build_test_asan
(cd test ; python2.7 run.py -r)
build_test_asan:
mkdir -p build && (cd build && cmake -GXcode -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 .. && xcodebuild -project ixwebsocket.xcodeproj -target ixwebsocket_unittest -enableAddressSanitizer YES)
(cd build/test ; ln -sf Debug/ixwebsocket_unittest)
test_tsan_openssl:
mkdir -p build && (cd build && cmake -GXcode -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 -DUSE_OPEN_SSL=1 .. && xcodebuild -project ixwebsocket.xcodeproj -target ixwebsocket_unittest -enableThreadSanitizer YES)
(cd build/test ; ln -sf Debug/ixwebsocket_unittest)
(cd test ; python2.7 run.py -r)
test_ubsan_openssl:
mkdir -p build && (cd build && cmake -GXcode -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 -DUSE_OPEN_SSL=1 .. && xcodebuild -project ixwebsocket.xcodeproj -target ixwebsocket_unittest -enableUndefinedBehaviorSanitizer YES)
(cd build/test ; ln -sf Debug/ixwebsocket_unittest)
(cd test ; python2.7 run.py -r)
test_tsan_openssl_release:
mkdir -p build && (cd build && cmake -GXcode -DCMAKE_BUILD_TYPE=Release -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 -DUSE_OPEN_SSL=1 .. && xcodebuild -project ixwebsocket.xcodeproj -configuration Release -target ixwebsocket_unittest -enableThreadSanitizer YES)
(cd build/test ; ln -sf Release/ixwebsocket_unittest)
(cd test ; python2.7 run.py -r)
test_tsan_mbedtls: test_tsan_mbedtls:
mkdir -p build && (cd build && cmake -GXcode -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 -DUSE_MBED_TLS=1 .. && xcodebuild -project ixwebsocket.xcodeproj -target ixwebsocket_unittest -enableThreadSanitizer YES) mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_MBED_TLS=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer")
(cd build/test ; ln -sf Debug/ixwebsocket_unittest) (cd build ; ninja)
(cd test ; python2.7 run.py -r) (cd build ; ninja test)
build_test_openssl: test_tsan_openssl:
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_OPEN_SSL=1 -DUSE_TEST=1 .. ; ninja install) mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_OPENS_SSL=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer")
(cd build ; ninja)
(cd build ; ninja test)
test_openssl: build_test_openssl test_tsan_sectransport:
(cd test ; python2.7 run.py -r) mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_OPENS_SSL=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer")
(cd build ; ninja)
build_test_mbedtls: (cd build ; ninja test)
mkdir -p build && (cd build ; cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_MBED_TLS=1 -DUSE_TEST=1 .. ; make -j 4)
test_mbedtls: build_test_mbedtls
(cd test ; python2.7 run.py -r)
test_no_ssl:
mkdir -p build && (cd build ; cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_TEST=1 .. ; make -j 4)
(cd test ; python2.7 run.py -r)
ws_test: ws ws_test: ws
(cd ws ; env DEBUG=1 PATH=../ws/build:$$PATH bash test_ws.sh) (cd ws ; env DEBUG=1 PATH=../ws/build:$$PATH bash test_ws.sh)

View File

@ -9,59 +9,37 @@ set (CMAKE_CXX_STANDARD 14)
option(USE_TLS "Add TLS support" ON) option(USE_TLS "Add TLS support" ON)
include_directories(
${PROJECT_SOURCE_DIR}/Catch2/single_include
../third_party
../third_party/msgpack11
../ws
)
add_definitions(-DSPDLOG_COMPILED_LIB=1)
find_package(JsonCpp)
if (NOT JSONCPP_FOUND)
include_directories(../third_party/jsoncpp)
set(JSONCPP_SOURCES ../third_party/jsoncpp/jsoncpp.cpp)
endif()
# Shared sources # Shared sources
set (SOURCES set (TEST_TARGET_NAMES
${JSONCPP_SOURCES} IXSocketTest
IXSocketConnectTest
test_runner.cpp
IXTest.cpp
../third_party/msgpack11/msgpack11.cpp
IXSocketTest.cpp
IXSocketConnectTest.cpp
# IXWebSocketLeakTest.cpp # commented until we have a fix for #224 # IXWebSocketLeakTest.cpp # commented until we have a fix for #224
IXWebSocketServerTest.cpp IXWebSocketServerTest
IXWebSocketTestConnectionDisconnection.cpp IXWebSocketTestConnectionDisconnection
IXUrlParserTest.cpp IXUrlParserTest
IXWebSocketServerTest.cpp IXHttpClientTest
IXHttpClientTest.cpp IXHttpServerTest
IXHttpServerTest.cpp IXUnityBuildsTest
IXUnityBuildsTest.cpp IXHttpTest
IXHttpTest.cpp IXDNSLookupTest
IXDNSLookupTest.cpp IXWebSocketSubProtocolTest
IXWebSocketSubProtocolTest.cpp IXSentryClientTest
IXSentryClientTest.cpp IXWebSocketChatTest
IXWebSocketChatTest.cpp IXWebSocketBroadcastTest
IXWebSocketBroadcastTest.cpp IXWebSocketPerMessageDeflateCompressorTest
IXWebSocketPerMessageDeflateCompressorTest.cpp IXStreamSqlTest
IXStreamSqlTest.cpp
) )
# Some unittest don't work on windows yet # Some unittest don't work on windows yet
# Windows without TLS does not have hmac yet # Windows without TLS does not have hmac yet
if (UNIX) if (UNIX)
list(APPEND SOURCES list(APPEND TEST_TARGET_NAMES
IXWebSocketCloseTest.cpp IXWebSocketCloseTest
IXCobraChatTest.cpp IXCobraChatTest
IXCobraMetricsPublisherTest.cpp IXCobraMetricsPublisherTest
IXCobraToSentryBotTest.cpp IXCobraToSentryBotTest
IXCobraToStatsdBotTest.cpp IXCobraToStatsdBotTest
IXCobraToStdoutBotTest.cpp IXCobraToStdoutBotTest
) )
endif() endif()
@ -71,19 +49,9 @@ endif()
# Disable tests for now that are failing or not reliable # Disable tests for now that are failing or not reliable
add_executable(ixwebsocket_unittest ${SOURCES}) find_package(JsonCpp)
if (NOT JSONCPP_FOUND)
if (MAC) set(JSONCPP_SOURCES ../third_party/jsoncpp/jsoncpp.cpp)
add_sanitizers(ixwebsocket_unittest)
endif()
if (APPLE AND USE_TLS)
target_link_libraries(ixwebsocket_unittest "-framework foundation" "-framework security")
endif()
if (JSONCPP_FOUND)
target_include_directories(ixwebsocket_unittest PUBLIC ${JSONCPP_INCLUDE_DIRS})
target_link_libraries(ixwebsocket_unittest ${JSONCPP_LIBRARIES})
endif() endif()
if (USE_PYTHON) if (USE_PYTHON)
@ -97,19 +65,67 @@ if (USE_PYTHON)
message("Python_LIBRARIES:${Python_LIBRARIES}") message("Python_LIBRARIES:${Python_LIBRARIES}")
endif() endif()
# library with the most dependencies come first add_library(ixwebsocket_test)
target_link_libraries(ixwebsocket_unittest ixbots) target_sources(ixwebsocket_test PRIVATE
target_link_libraries(ixwebsocket_unittest ixsnake) ${JSONCPP_SOURCES}
target_link_libraries(ixwebsocket_unittest ixcobra) test_runner.cpp
target_link_libraries(ixwebsocket_unittest ixsentry) IXTest.cpp
target_link_libraries(ixwebsocket_unittest ixredis) ../third_party/msgpack11/msgpack11.cpp
target_link_libraries(ixwebsocket_unittest ixwebsocket) )
target_link_libraries(ixwebsocket_unittest ixcrypto) target_compile_definitions(ixwebsocket_test PRIVATE ${TEST_PROGRAMS_DEFINITIONS})
target_link_libraries(ixwebsocket_unittest ixcore) target_include_directories(ixwebsocket_test PRIVATE
${PROJECT_SOURCE_DIR}/Catch2/single_include
../third_party
)
target_link_libraries(ixwebsocket_test ixsnake)
target_link_libraries(ixwebsocket_test ixcobra)
target_link_libraries(ixwebsocket_test ixwebsocket)
target_link_libraries(ixwebsocket_test spdlog)
target_link_libraries(ixwebsocket_unittest spdlog) foreach(TEST_TARGET_NAME ${TEST_TARGET_NAMES})
if (USE_PYTHON) add_executable(${TEST_TARGET_NAME}
target_link_libraries(ixwebsocket_unittest ${Python_LIBRARIES}) ${TEST_TARGET_NAME}.cpp
endif() )
install(TARGETS ixwebsocket_unittest DESTINATION bin) target_include_directories(${TEST_TARGET_NAME} PRIVATE
${PROJECT_SOURCE_DIR}/Catch2/single_include
../third_party
../third_party/msgpack11
)
target_compile_definitions(${TEST_TARGET_NAME} PRIVATE SPDLOG_COMPILED_LIB=1)
if (NOT JSONCPP_FOUND)
target_include_directories(${TEST_TARGET_NAME} PRIVATE ../third_party/jsoncpp)
endif()
if (APPLE AND USE_TLS)
target_link_libraries(${TEST_TARGET_NAME} "-framework foundation" "-framework security")
endif()
if (JSONCPP_FOUND)
target_include_directories(${TEST_TARGET_NAME} PRIVATE ${JSONCPP_INCLUDE_DIRS})
target_link_libraries(${TEST_TARGET_NAME} ${JSONCPP_LIBRARIES})
endif()
# library with the most dependencies come first
target_link_libraries(${TEST_TARGET_NAME} ixbots)
target_link_libraries(${TEST_TARGET_NAME} ixsnake)
target_link_libraries(${TEST_TARGET_NAME} ixcobra)
target_link_libraries(${TEST_TARGET_NAME} ixsentry)
target_link_libraries(${TEST_TARGET_NAME} ixredis)
target_link_libraries(${TEST_TARGET_NAME} ixwebsocket_test)
target_link_libraries(${TEST_TARGET_NAME} ixwebsocket)
target_link_libraries(${TEST_TARGET_NAME} ixcrypto)
target_link_libraries(${TEST_TARGET_NAME} ixcore)
target_link_libraries(${TEST_TARGET_NAME} spdlog)
if (USE_PYTHON)
target_link_libraries(${TEST_TARGET_NAME} ${Python_LIBRARIES})
endif()
add_test(NAME ${TEST_TARGET_NAME}
COMMAND ${TEST_TARGET_NAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
endforeach()