diff options
Diffstat (limited to 'test/CMakeLists.txt')
-rw-r--r-- | test/CMakeLists.txt | 171 |
1 files changed, 115 insertions, 56 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 67ff98050..5a4e73f77 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,56 +1,115 @@ -include(CTest) - -IF(BUILD_TESTING MATCHES "ON") - SET(TESTSRC rspamd_mem_pool_test.c - rspamd_statfile_test.c - rspamd_url_test.c - rspamd_dns_test.c - rspamd_dkim_test.c - rspamd_rrd_test.c - rspamd_radix_test.c - rspamd_shingles_test.c - rspamd_upstream_test.c - rspamd_lua_pcall_vs_resume_test.c - rspamd_lua_test.c - rspamd_cryptobox_test.c - rspamd_heap_test.c - rspamd_test_suite.c) - - ADD_EXECUTABLE(rspamd-test ${TESTSRC}) - SET_TARGET_PROPERTIES(rspamd-test PROPERTIES COMPILE_FLAGS "-DRSPAMD_TEST") - ADD_DEPENDENCIES(rspamd-test rspamd-server) - SET_TARGET_PROPERTIES(rspamd-test PROPERTIES LINKER_LANGUAGE CXX) - TARGET_LINK_LIBRARIES(rspamd-test rspamd-server) - ADD_TEST(NAME rspamd-test COMMAND rspamd-test "-p" "/rspamd/lua") - - SET(CXXTESTSSRC rspamd_cxx_unit.cxx) - - ADD_EXECUTABLE(rspamd-test-cxx ${CXXTESTSSRC}) - SET_TARGET_PROPERTIES(rspamd-test-cxx PROPERTIES LINKER_LANGUAGE CXX) - ADD_DEPENDENCIES(rspamd-test-cxx rspamd-server) - TARGET_LINK_LIBRARIES(rspamd-test-cxx PRIVATE rspamd-server) - SET_TARGET_PROPERTIES(rspamd-test-cxx PROPERTIES LINKER_LANGUAGE CXX) - ADD_TEST(NAME rspamd-test-cxx COMMAND rspamd-test-cxx) - - IF(NOT "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") - # Also add dependencies for convenience - FILE(GLOB_RECURSE LUA_TESTS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/lua/*.*") - ADD_CUSTOM_TARGET(units-dir COMMAND - ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/lua/unit" - ) - ADD_DEPENDENCIES(rspamd-test units-dir) - FOREACH(_LF IN LISTS LUA_TESTS) - GET_FILENAME_COMPONENT(_NM "${_LF}" NAME) - IF("${_LF}" MATCHES "^.*/unit/.*$") - SET(_DS "${CMAKE_CURRENT_BINARY_DIR}/lua/unit/${_NM}") - ELSE() - SET(_DS "${CMAKE_CURRENT_BINARY_DIR}/lua/${_NM}") - ENDIF() - ADD_CUSTOM_TARGET("${_NM}" COMMAND - ${CMAKE_COMMAND} -E copy_if_different ${_LF} ${_DS} - SOURCES "${_LF}" - ) - ADD_DEPENDENCIES(rspamd-test "${_NM}") - ENDFOREACH() - ENDIF() -ENDIF()
\ No newline at end of file + +# Define C test sources +set(RSPAMD_TEST_SOURCES + rspamd_mem_pool_test.c + rspamd_statfile_test.c + rspamd_url_test.c + rspamd_dns_test.c + rspamd_dkim_test.c + rspamd_rrd_test.c + rspamd_radix_test.c + rspamd_shingles_test.c + rspamd_upstream_test.c + rspamd_lua_pcall_vs_resume_test.c + rspamd_lua_test.c + rspamd_cryptobox_test.c + rspamd_heap_test.c + rspamd_test_suite.c +) + +# Main C test executable +add_executable(rspamd-test ${RSPAMD_TEST_SOURCES}) +target_compile_definitions(rspamd-test PRIVATE RSPAMD_TEST) +target_link_libraries(rspamd-test PRIVATE rspamd-server) +set_target_properties(rspamd-test PROPERTIES + LINKER_LANGUAGE CXX +) + +# Add the test +add_test( + NAME rspamd-test + COMMAND rspamd-test -p /rspamd/lua +) + +# C++ unit tests +set(CXX_TEST_SOURCES rspamd_cxx_unit.cxx) + +# C++ test executable +add_executable(rspamd-test-cxx ${CXX_TEST_SOURCES}) +target_link_libraries(rspamd-test-cxx PRIVATE rspamd-server) +set_target_properties(rspamd-test-cxx PROPERTIES + LINKER_LANGUAGE CXX +) + +# Add the C++ test +add_test( + NAME rspamd-test-cxx + COMMAND rspamd-test-cxx +) + +# Copy test Lua scripts for out-of-source builds +if (NOT "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + # Find Lua test files + file(GLOB_RECURSE LUA_TESTS CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/lua/*.*") + + # Create target to ensure unit directory exists + add_custom_target(units-dir + COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/lua/unit" + ) + + # Make the main test depend on the directory creation + add_dependencies(rspamd-test units-dir) + + # Create file-specific targets for each Lua test file + foreach (lua_file IN LISTS LUA_TESTS) + # Extract just the filename + get_filename_component(file_name "${lua_file}" NAME) + + # Determine destination path + if ("${lua_file}" MATCHES "^.*/unit/.*$") + set(dest_file "${CMAKE_CURRENT_BINARY_DIR}/lua/unit/${file_name}") + else () + set(dest_file "${CMAKE_CURRENT_BINARY_DIR}/lua/${file_name}") + endif () + + # Create custom target to copy the file + add_custom_target("${file_name}" + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${lua_file}" "${dest_file}" + SOURCES "${lua_file}" + COMMENT "Copying ${file_name} to test directory" + ) + + # Make the main test depend on this file copy + add_dependencies(rspamd-test "${file_name}") + endforeach () +endif () + +# Add test properties +set_tests_properties(rspamd-test PROPERTIES + ENVIRONMENT "RSPAMD_INSTALLROOT=${CMAKE_INSTALL_PREFIX}" +) + +# Custom target for running all tests directly (convenience target) +add_custom_target(run-tests + COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure + DEPENDS rspamd-test rspamd-test-cxx + COMMENT "Running all Rspamd tests" +) + +# Custom target for running C tests only +add_custom_target(run-c-tests + COMMAND ${CMAKE_COMMAND} -E echo "Running C unit tests..." + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/rspamd-test -p /rspamd/lua + DEPENDS rspamd-test + COMMENT "Running Rspamd C tests" +) + +# Custom target for running C++ tests only +add_custom_target(run-cxx-tests + COMMAND ${CMAKE_COMMAND} -E echo "Running C++ unit tests..." + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/rspamd-test-cxx + DEPENDS rspamd-test-cxx + COMMENT "Running Rspamd C++ tests" +)
\ No newline at end of file |