From 77d4d51d733921ec00fccc80435367458fea5e50 Mon Sep 17 00:00:00 2001 From: Stephen Sinclair Date: Sun, 7 Jan 2024 21:57:03 +0100 Subject: [PATCH 1/6] Run tests explicitly --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9c5af57..735ca50 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,6 +66,7 @@ jobs: - name: liblo make x86_64 run: make + && (cd src && ls testlo && ./testlo && ls test_bidirectional_tcp && ./test_bidirectional_tcp && ls cpp_test && ./cpp_test) && (make check || (for i in src/*.log; do echo === $i ===; cat $i; done; false)) && make install && mv ./inst/lib/liblo.7.dylib ./inst/lib/liblo.7.dylib.x86_64 From 6b1a81833e4414a5523cccd5d2cf92fe0d67c4aa Mon Sep 17 00:00:00 2001 From: Johannes Lorenz Date: Sun, 7 Jan 2024 21:54:14 +0100 Subject: [PATCH 2/6] Fix bug with hanging test --- src/test_bidirectional_tcp.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/test_bidirectional_tcp.c b/src/test_bidirectional_tcp.c index a8ae042..4c1a8ce 100644 --- a/src/test_bidirectional_tcp.c +++ b/src/test_bidirectional_tcp.c @@ -59,6 +59,13 @@ void *sendthread(void *arg) printf("%p.sending thread received\n", s); printf("%p.freeing address\n", s); + /* Do not close the socket immediatelly, wait 1 second for recv */ +#if defined(WIN32) || defined(_MSC_VER) + Sleep(1000); +#else + sleep(1); +#endif + lo_address_free(a); printf("%p.freeing\n", s); @@ -69,7 +76,7 @@ void *sendthread(void *arg) int main() { - /* start a new server on port 7770 */ + /* start a new server on port 7771 */ lo_server s = lo_server_new_with_proto("7771", LO_TCP, 0); if (!s) { printf("no server\n"); exit(1); } From 30f5204daf7379cd7f029d597e15b85349a5946d Mon Sep 17 00:00:00 2001 From: Johannes Lorenz Date: Sun, 7 Jan 2024 22:49:36 +0100 Subject: [PATCH 3/6] Fix mac bug, where 127.0.0.1 is unknown This fixes the error ``` OSC error A 8: nodename nor servname provided, or not known ``` from the `test_server_thread` test. --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 735ca50..f24df50 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,6 +66,7 @@ jobs: - name: liblo make x86_64 run: make + && echo -e "\n127.0.0.1 $(hostname)\n" | sudo tee -a /etc/hosts && (cd src && ls testlo && ./testlo && ls test_bidirectional_tcp && ./test_bidirectional_tcp && ls cpp_test && ./cpp_test) && (make check || (for i in src/*.log; do echo === $i ===; cat $i; done; false)) && make install From eff21b5360dbb395215c216c26eb87aa8f1183eb Mon Sep 17 00:00:00 2001 From: Johannes Lorenz Date: Fri, 12 Jan 2024 20:41:26 +0100 Subject: [PATCH 4/6] Various Windows fixes One of those fixes is to make the CI build static on Windows. If you do not do this, you will get strange errors like ``` nonblocking_server_example.obj : error LNK2019: unresolved external symbol lo_server_new referenced in function main [D:\a\liblo\liblo\bld\nonblocking_server_example.vcxproj] nonblocking_server_example.obj : error LNK2019: unresolved external symbol lo_server_recv_noblock referenced in function main [D:\a\liblo\liblo\bld\nonblocking_server_example.vcxproj] nonblocking_server_example.obj : error LNK2019: unresolved external symbol lo_server_add_method referenced in function main [D:\a\liblo\liblo\bld\nonblocking_server_example.vcxproj] ``` --- .github/workflows/ci.yml | 2 +- cmake/CMakeLists.txt | 9 +++++++-- src/test_bidirectional_tcp.c | 6 ++++-- src/testlo.c | 11 ++++++++--- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f24df50..0d1bfdc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -106,5 +106,5 @@ jobs: run: | mkdir bld cd bld\ - cmake ..\cmake -DCMAKE_BUILD_TYPE=Release + cmake ..\cmake -DCMAKE_BUILD_TYPE=Release -DWITH_STATIC=ON cmake --build . --target all_build --config Release diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index f4eb631..e32f889 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.5) option(WITH_TOOLS "Enable building tools." ON) option(WITH_TESTS "Enable building tests." ON) @@ -274,7 +274,12 @@ foreach(PROG ${PROGRAMS}) target_include_directories(${PROG} PUBLIC "$" "$") - target_link_libraries(${PROG} PUBLIC ${LIBRARY_SHARED}) + if(CMAKE_SYSTEM_NAME MATCHES "Windows") + # For some yet unknown reasons, Windows has trouble finding the DLL + target_link_libraries(${PROG} PUBLIC ${LIBRARY_STATIC}) + else() + target_link_libraries(${PROG} PUBLIC ${LIBRARY_SHARED}) + endif() endforeach(PROG) foreach(PROG ${TOOLS}) diff --git a/src/test_bidirectional_tcp.c b/src/test_bidirectional_tcp.c index 4c1a8ce..c9e85fb 100644 --- a/src/test_bidirectional_tcp.c +++ b/src/test_bidirectional_tcp.c @@ -1,5 +1,7 @@ -#ifdef WIN32 +#if defined(WIN32) || defined(_MSC_VER) #include +#else +#include #endif #ifdef HAVE_CONFIG_H @@ -37,7 +39,7 @@ int generic_handler(const char *path, const char *types, lo_arg ** argv, } #ifdef HAVE_WIN32_THREADS -unsigned __attribute__((stdcall)) sendthread(void *arg) +unsigned __stdcall sendthread(void *arg) #else void *sendthread(void *arg) #endif diff --git a/src/testlo.c b/src/testlo.c index d5baf66..ad0ea36 100644 --- a/src/testlo.c +++ b/src/testlo.c @@ -1287,6 +1287,7 @@ void test_server_thread(lo_server_thread *pst, lo_address *pa) server_url = lo_server_thread_get_url(st); printf("Server URL: %s\n", server_url); a = lo_address_new_from_url(server_url); + TEST(a); free(server_url); /* add method that will match the path /foo/bar, with two numbers, coerced @@ -1449,9 +1450,13 @@ void test_subtest(lo_server_thread st) #ifdef WIN32 { - char cwd[2048]; - _getcwd(cwd, 2048); - snprintf(cmd, 2048, "%s" PATHDELIM "subtest" EXTEXE, cwd); + char cwd[MAX_PATH]; + // Calculate path to subtest.exe + GetModuleFileName(NULL, cwd, MAX_PATH); + const char* pathdelim_str = PATHDELIM; + char *lastBackslash = strrchr(cwd, *pathdelim_str); + *lastBackslash = 0; // Null-terminate at the last backslash to get the directory + snprintf(cmd, sizeof(cmd), "%s" PATHDELIM "subtest" EXTEXE, cwd); } printf("spawning subtest with `%s'\n", cmd); for (i=0; i<2; i++) { From 7138a7d9ca53783d2ebcd2574b06cb0ff9efa12a Mon Sep 17 00:00:00 2001 From: Johannes Lorenz Date: Sun, 7 Jan 2024 20:55:58 +0100 Subject: [PATCH 5/6] CMake: Also build test_bidirectional_tcp.c --- cmake/CMakeLists.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index e32f889..0a699da 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -79,6 +79,7 @@ if (WITH_TOOLS) endif() if (WITH_TESTS) set(TESTLO testlo) + set(TESTTCP test_bidirectional_tcp) set(SUBTEST subtest) if (WITH_CPP_TESTS) set(CPPTEST cpp_test) @@ -94,7 +95,7 @@ if (WITH_EXAMPLES) endif() set(TOOLS ${OSCDUMP} ${OSCSEND} ${OSCSENDFILE}) -set(TESTS ${TESTLO} ${SUBTEST}) +set(TESTS ${TESTLO} ${TESTTCP} ${SUBTEST}) list(APPEND TESTS ${CPPTEST}) set(EXAMPLES ${EXAMPLE_CLIENT} ${EXAMPLE_SERVER} ${EXAMPLE_TCP_ECHO_SERVER} ${NONBLOCKING_SERVER_EXAMPLE}) @@ -130,6 +131,7 @@ set(OSCDUMP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../src/tools/oscdump.c) set(OSCSEND_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../src/tools/oscsend.c) set(OSCSENDFILE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../src/tools/oscsendfile.c) set(TESTLO_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../src/testlo.c) +set(TESTTCP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../src/test_bidirectional_tcp.c) set(SUBTEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../src/subtest.c) if (WITH_CPP_TESTS) set(CPPTEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../src/cpp_test.cpp) @@ -174,7 +176,7 @@ set(BUILD_LANGUAGE C CACHE STRING "Build language (C or CXX)") mark_as_advanced(BUILD_LANGUAGE) set_source_files_properties( ${LIBRARY_SOURCES} ${OSCDUMP_SOURCES} ${OSCSEND_SOURCES} ${OSCSENDFILE_SOURCES} - ${TESTLO_SOURCES} ${EXAMPLE_CLIENT_SOURCES} + ${TESTLO_SOURCES} ${TESTTCP_SOURCES} ${EXAMPLE_CLIENT_SOURCES} ${EXAMPLE_SERVER_SOURCES} ${EXAMPLE_TCP_ECHO_SERVER_SOURCES} ${NONBLOCKING_SERVER_EXAMPLE_SOURCES} PROPERTIES LANGUAGE ${BUILD_LANGUAGE}) @@ -201,7 +203,9 @@ endif() if (WITH_TESTS) add_executable(${TESTLO} ${TESTLO_SOURCES}) add_executable(${SUBTEST} ${SUBTEST_SOURCES}) + add_executable(${TESTTCP} ${TESTTCP_SOURCES}) target_link_libraries(${TESTLO} PRIVATE Threads::Threads) + target_link_libraries(${TESTTCP} PRIVATE Threads::Threads) endif() if (WITH_CPP_TESTS) add_executable(${CPPTEST} ${CPPTEST_SOURCES}) @@ -237,6 +241,7 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") endif() target_link_libraries(${NONBLOCKING_SERVER_EXAMPLE} PRIVATE "wsock32") target_link_libraries(${TESTLO} PRIVATE "wsock32") + target_link_libraries(${TESTTCP} PRIVATE "wsock32") set_target_properties(${LIBRARY_SHARED} PROPERTIES COMPILE_DEFINITIONS "LIBLO_DLL") From 516277790e11228d5ed2386480381c0709e8ed94 Mon Sep 17 00:00:00 2001 From: Johannes Lorenz Date: Fri, 12 Jan 2024 20:41:44 +0100 Subject: [PATCH 6/6] CMake: enable testing --- .github/workflows/ci.yml | 4 ++++ cmake/CMakeLists.txt | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d1bfdc..90501f5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -108,3 +108,7 @@ jobs: cd bld\ cmake ..\cmake -DCMAKE_BUILD_TYPE=Release -DWITH_STATIC=ON cmake --build . --target all_build --config Release + - name: Run tests + run: | + cd bld\ + ctest -V diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 0a699da..c2b14cc 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -206,9 +206,24 @@ if (WITH_TESTS) add_executable(${TESTTCP} ${TESTTCP_SOURCES}) target_link_libraries(${TESTLO} PRIVATE Threads::Threads) target_link_libraries(${TESTTCP} PRIVATE Threads::Threads) + if (WIN32) + # If you use the new syntax, on Windows, you need to run `cmake -C Release` instead of `cmake`. + # We do not want that, so we use the old syntax for Windows... + add_test(${TESTLO} "tests/${TESTLO}") + add_test("test-bidirectional-tcp" "tests/${TESTTCP}") + else() + add_test(NAME ${TESTLO} COMMAND ${TESTLO} WORKING_DIRECTORY $) + add_test(NAME "test-bidirectional-tcp" COMMAND ${TESTTCP} WORKING_DIRECTORY $) + endif() + enable_testing() endif() if (WITH_CPP_TESTS) add_executable(${CPPTEST} ${CPPTEST_SOURCES}) + if (WIN32) + add_test(${CPPTEST} "tests/${CPPTEST}") + else() + add_test(NAME ${CPPTEST} COMMAND ${CPPTEST} WORKING_DIRECTORY $) + endif() endif() # Examples