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