]> git.proxmox.com Git - ceph.git/blob - ceph/cmake/modules/AddCephTest.cmake
import 15.2.0 Octopus source
[ceph.git] / ceph / cmake / modules / AddCephTest.cmake
1 #AddCephTest is a module for adding tests to the "make check" target which runs CTest
2
3 #adds makes target/script into a test, test to check target, sets necessary environment variables
4 function(add_ceph_test test_name test_path)
5 add_test(NAME ${test_name} COMMAND ${test_path} ${ARGN})
6 if(TARGET ${test_name})
7 add_dependencies(tests ${test_name})
8 endif()
9 set_property(TEST
10 ${test_name}
11 PROPERTY ENVIRONMENT
12 CEPH_ROOT=${CMAKE_SOURCE_DIR}
13 CEPH_BIN=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
14 CEPH_LIB=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
15 CEPH_BUILD_DIR=${CMAKE_BINARY_DIR}
16 LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib
17 PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:${CMAKE_SOURCE_DIR}/src:$ENV{PATH}
18 PYTHONPATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cython_modules/lib.3:${CMAKE_SOURCE_DIR}/src/pybind
19 CEPH_BUILD_VIRTUALENV=${CEPH_BUILD_VIRTUALENV})
20 # none of the tests should take more than 1 hour to complete
21 set_property(TEST
22 ${test_name}
23 PROPERTY TIMEOUT ${CEPH_TEST_TIMEOUT})
24 endfunction()
25
26 option(WITH_GTEST_PARALLEL "Enable running gtest based tests in parallel" OFF)
27 if(WITH_GTEST_PARALLEL)
28 if(NOT TARGET gtest-parallel_ext)
29 set(gtest_parallel_source_dir ${CMAKE_CURRENT_BINARY_DIR}/gtest-parallel)
30 include(ExternalProject)
31 ExternalProject_Add(gtest-parallel_ext
32 SOURCE_DIR "${gtest_parallel_source_dir}"
33 GIT_REPOSITORY "https://github.com/google/gtest-parallel.git"
34 GIT_TAG "master"
35 CONFIGURE_COMMAND ""
36 BUILD_COMMAND ""
37 INSTALL_COMMAND "")
38 add_dependencies(tests gtest-parallel_ext)
39 find_package(Python3 QUIET REQUIRED)
40 set(GTEST_PARALLEL_COMMAND
41 ${Python3_EXECUTABLE} ${gtest_parallel_source_dir}/gtest-parallel)
42 endif()
43 endif()
44
45 #sets uniform compiler flags and link libraries
46 function(add_ceph_unittest unittest_name)
47 set(UNITTEST "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${unittest_name}")
48 # If the second argument is "parallel", it means we want a parallel run
49 if(WITH_GTEST_PARALLEL AND "${ARGV1}" STREQUAL "parallel")
50 set(UNITTEST ${GTEST_PARALLEL_COMMAND} ${UNITTEST})
51 endif()
52 add_ceph_test(${unittest_name} "${UNITTEST}")
53 target_link_libraries(${unittest_name} ${UNITTEST_LIBS})
54 endfunction()
55
56 function(add_tox_test name)
57 set(test_name run-tox-${name})
58 set(venv_path ${CEPH_BUILD_VIRTUALENV}/${name}-virtualenv)
59 cmake_parse_arguments(TOXTEST "" "TOX_PATH" "TOX_ENVS" ${ARGN})
60 if(DEFINED TOXTEST_TOX_PATH)
61 set(tox_path ${TOXTEST_TOX_PATH})
62 else()
63 set(tox_path ${CMAKE_CURRENT_SOURCE_DIR})
64 endif()
65 list(APPEND tox_envs py3)
66 if(DEFINED TOXTEST_TOX_ENVS)
67 list(APPEND tox_envs ${TOXTEST_TOX_ENVS})
68 endif()
69 string(REPLACE ";" "," tox_envs "${tox_envs}")
70 find_package(Python3 QUIET REQUIRED)
71 add_custom_command(
72 OUTPUT ${venv_path}/bin/activate
73 COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python="${Python3_EXECUTABLE}" ${venv_path}
74 WORKING_DIRECTORY ${tox_path}
75 COMMENT "preparing venv for ${name}")
76 add_custom_target(${name}-venv
77 DEPENDS ${venv_path}/bin/activate)
78 add_dependencies(tests ${name}-venv)
79 add_test(
80 NAME ${test_name}
81 COMMAND ${CMAKE_SOURCE_DIR}/src/script/run_tox.sh
82 --source-dir ${CMAKE_SOURCE_DIR}
83 --build-dir ${CMAKE_BINARY_DIR}
84 --tox-path ${tox_path}
85 --tox-envs ${tox_envs}
86 --venv-path ${venv_path})
87 set_property(
88 TEST ${test_name}
89 PROPERTY ENVIRONMENT
90 CEPH_ROOT=${CMAKE_SOURCE_DIR}
91 CEPH_BIN=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
92 CEPH_LIB=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
93 CEPH_BUILD_VIRTUALENV=${CEPH_BUILD_VIRTUALENV}
94 LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib
95 PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:${CMAKE_SOURCE_DIR}/src:$ENV{PATH}
96 PYTHONPATH=${CMAKE_SOURCE_DIR}/src/pybind)
97 list(APPEND tox_test run-tox-${name})
98 endfunction()