]> git.proxmox.com Git - ceph.git/blame - ceph/cmake/modules/AddCephTest.cmake
import quincy beta 17.1.0
[ceph.git] / ceph / cmake / modules / AddCephTest.cmake
CommitLineData
7c673cae
FG
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
4function(add_ceph_test test_name test_path)
20effc67
TL
5 add_test(NAME ${test_name} COMMAND ${test_path} ${ARGN}
6 COMMAND_EXPAND_LISTS)
11fdf7f2
TL
7 if(TARGET ${test_name})
8 add_dependencies(tests ${test_name})
f67539c2
TL
9 set_property(TARGET ${test_name}
10 PROPERTY EXCLUDE_FROM_ALL TRUE)
11fdf7f2 11 endif()
f67539c2 12 set_property(TEST ${test_name}
7c673cae
FG
13 PROPERTY ENVIRONMENT
14 CEPH_ROOT=${CMAKE_SOURCE_DIR}
15 CEPH_BIN=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
16 CEPH_LIB=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
17 CEPH_BUILD_DIR=${CMAKE_BINARY_DIR}
18 LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib
19 PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:${CMAKE_SOURCE_DIR}/src:$ENV{PATH}
9f95a23c 20 PYTHONPATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cython_modules/lib.3:${CMAKE_SOURCE_DIR}/src/pybind
7c673cae
FG
21 CEPH_BUILD_VIRTUALENV=${CEPH_BUILD_VIRTUALENV})
22 # none of the tests should take more than 1 hour to complete
f67539c2 23 set_property(TEST ${test_name}
11fdf7f2 24 PROPERTY TIMEOUT ${CEPH_TEST_TIMEOUT})
7c673cae
FG
25endfunction()
26
11fdf7f2
TL
27option(WITH_GTEST_PARALLEL "Enable running gtest based tests in parallel" OFF)
28if(WITH_GTEST_PARALLEL)
9f95a23c
TL
29 if(NOT TARGET gtest-parallel_ext)
30 set(gtest_parallel_source_dir ${CMAKE_CURRENT_BINARY_DIR}/gtest-parallel)
31 include(ExternalProject)
32 ExternalProject_Add(gtest-parallel_ext
33 SOURCE_DIR "${gtest_parallel_source_dir}"
34 GIT_REPOSITORY "https://github.com/google/gtest-parallel.git"
35 GIT_TAG "master"
f67539c2 36 GIT_SHALLOW TRUE
9f95a23c
TL
37 CONFIGURE_COMMAND ""
38 BUILD_COMMAND ""
39 INSTALL_COMMAND "")
40 add_dependencies(tests gtest-parallel_ext)
41 find_package(Python3 QUIET REQUIRED)
42 set(GTEST_PARALLEL_COMMAND
43 ${Python3_EXECUTABLE} ${gtest_parallel_source_dir}/gtest-parallel)
44 endif()
11fdf7f2
TL
45endif()
46
7c673cae 47#sets uniform compiler flags and link libraries
11fdf7f2
TL
48function(add_ceph_unittest unittest_name)
49 set(UNITTEST "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${unittest_name}")
f67539c2
TL
50 cmake_parse_arguments(UT "PARALLEL" "" "" ${ARGN})
51 if(WITH_GTEST_PARALLEL AND UT_PARALLEL)
11fdf7f2
TL
52 set(UNITTEST ${GTEST_PARALLEL_COMMAND} ${UNITTEST})
53 endif()
f67539c2 54 add_ceph_test(${unittest_name} "${UNITTEST}" ${UT_UNPARSED_ARGUMENTS})
7c673cae 55 target_link_libraries(${unittest_name} ${UNITTEST_LIBS})
7c673cae 56endfunction()
9f95a23c
TL
57
58function(add_tox_test name)
59 set(test_name run-tox-${name})
60 set(venv_path ${CEPH_BUILD_VIRTUALENV}/${name}-virtualenv)
61 cmake_parse_arguments(TOXTEST "" "TOX_PATH" "TOX_ENVS" ${ARGN})
62 if(DEFINED TOXTEST_TOX_PATH)
63 set(tox_path ${TOXTEST_TOX_PATH})
64 else()
65 set(tox_path ${CMAKE_CURRENT_SOURCE_DIR})
66 endif()
9f95a23c
TL
67 if(DEFINED TOXTEST_TOX_ENVS)
68 list(APPEND tox_envs ${TOXTEST_TOX_ENVS})
f67539c2
TL
69 else()
70 list(APPEND tox_envs py3)
9f95a23c
TL
71 endif()
72 string(REPLACE ";" "," tox_envs "${tox_envs}")
73 find_package(Python3 QUIET REQUIRED)
20effc67
TL
74 add_test(
75 NAME setup-venv-for-${name}
76 COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${Python3_EXECUTABLE} ${venv_path}
77 WORKING_DIRECTORY ${tox_path})
78 set_tests_properties(setup-venv-for-${name} PROPERTIES
79 FIXTURES_SETUP venv-for-${name})
80 add_test(
81 NAME teardown-venv-for-${name}
82 COMMAND ${CMAKE_COMMAND} -E remove_directory ${venv_path})
83 set_tests_properties(teardown-venv-for-${name} PROPERTIES
84 FIXTURES_CLEANUP venv-for-${name})
9f95a23c
TL
85 add_test(
86 NAME ${test_name}
87 COMMAND ${CMAKE_SOURCE_DIR}/src/script/run_tox.sh
88 --source-dir ${CMAKE_SOURCE_DIR}
89 --build-dir ${CMAKE_BINARY_DIR}
90 --tox-path ${tox_path}
91 --tox-envs ${tox_envs}
92 --venv-path ${venv_path})
20effc67
TL
93 set_tests_properties(${test_name} PROPERTIES
94 FIXTURES_REQUIRED venv-for-${name})
9f95a23c
TL
95 set_property(
96 TEST ${test_name}
97 PROPERTY ENVIRONMENT
98 CEPH_ROOT=${CMAKE_SOURCE_DIR}
99 CEPH_BIN=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
100 CEPH_LIB=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
101 CEPH_BUILD_VIRTUALENV=${CEPH_BUILD_VIRTUALENV}
102 LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib
103 PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:${CMAKE_SOURCE_DIR}/src:$ENV{PATH}
104 PYTHONPATH=${CMAKE_SOURCE_DIR}/src/pybind)
105 list(APPEND tox_test run-tox-${name})
106endfunction()