Files
MaxScale/maxscale-system-test/utilities.cmake
Esa Korhonen c6a9c8bb0f MXS-2900 Cleanup system test information generation
The system test information array now has the full path to the MaxScale
configuration file. The array now only contains labels given in
CMakeLists.txt. The resulting .cc-file has linebreaks for readability.
2020-03-31 13:38:45 +03:00

125 lines
5.0 KiB
CMake

# Default test timeout
set(TEST_TIMEOUT 3600)
# Adds linebreaks to curly brackets in a variable.
function(add_linebreaks source_var dest_var)
string(REPLACE }, },\n splitted "${${source_var}}")
set(${dest_var} ${splitted} PARENT_SCOPE)
endfunction()
# Helper function to add a configuration template to the global test definitions list.
# Parameters are as in add_test_executable().
function(add_template name template labels)
set(config_template_path "${CMAKE_CURRENT_SOURCE_DIR}/cnf/maxscale.cnf.template.${template}")
set(new_def "{\"${name}\", \"${config_template_path}\", \"${labels}\"}")
set(TEST_DEFINITIONS "${TEST_DEFINITIONS}${new_def}," CACHE INTERNAL "")
endfunction()
# Helper function to add a configuration template
function(add_template_manual name template)
add_template(${name} ${template} "CONFIG")
endfunction()
# Helper function for adding properties to a test. Adds the default timeout and labels.
function(add_test_properties name labels)
list(APPEND labels ${ARGN})
# Remove the LABELS-string from the list if it's there.
list(REMOVE_ITEM labels "LABELS")
set_property(TEST ${name} PROPERTY TIMEOUT ${TEST_TIMEOUT})
set_property(TEST ${name} APPEND PROPERTY LABELS ${labels})
endfunction()
# This functions adds a source file as an executable, links that file against
# the common test core and creates a test from it.
# Parameters:
# source Test source code file name
# name Name of the generated test executable and the test itself
# template Configuration file template file name. Should only be the last part of the file name. The file
# should be located in the /cnf/ directory and have prefix "maxscale.cnf.template.".
# labels Test labels. The labels can be given as "Label1;Label2;Label3..." or "Label1 Label2 Label3 ..."
# Example: to add simple_test.cpp with maxscale.cnf.template.simple_config to the
# test set, the function should be called as follows:
# add_test_executable(simple_test.cpp simple_test simple_config LABELS some_label)
function(add_test_executable source name template labels)
list(APPEND labels ${ARGN})
add_template(${name} ${template} "${labels}")
add_executable(${name} ${source})
target_link_libraries(${name} maxtest)
add_test(NAME ${name} COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${name} ${name} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
add_test_properties(${name} ${labels})
endfunction()
# Same as add_test_executable, but do not add executable into tests list
function(add_test_executable_notest source name template)
add_template(${name} ${template} "${ARGN}")
add_executable(${name} ${source})
target_link_libraries(${name} maxtest)
endfunction()
# Add a test which uses another test as the executable
function(add_test_derived name executable template labels)
list(APPEND labels ${ARGN})
add_template(${name} ${template} "${labels}")
add_test(NAME ${name} COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${executable} ${name} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
add_test_properties(${name} ${labels})
endfunction()
# This function adds a script as a test with the specified name and template.
# The naming of the templates follow the same principles as add_test_executable.
# also suitable for symlinks
function(add_test_script name script template labels)
list(APPEND labels ${ARGN})
add_template(${name} ${template} "${labels}")
add_test(NAME ${name} COMMAND non_native_setup ${name} ${script} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
add_test_properties(${name} ${labels})
endfunction()
# Label a list of tests as heavy, long running tests
macro(heavy_weight_tests)
foreach(name IN ITEMS ${ARGN})
set_property(TEST ${name} PROPERTY LABELS "HEAVY")
endforeach()
endmacro()
# Label tests as medium weight tests. These tests take more than 180 seconds to complete.
macro(medium_weight_tests)
foreach(name IN ITEMS ${ARGN})
set_property(TEST ${name} PROPERTY LABELS "MEDIUM")
endforeach()
endmacro()
# Label tests as light weight tests. These tests take less than 90 seconds to complete.
macro(light_weight_tests)
foreach(name IN ITEMS ${ARGN})
set_property(TEST ${name} PROPERTY LABELS "LIGHT")
endforeach()
endmacro()
# Unstable tests. Ideally, there should be no tests with this label.
macro(unstable_tests)
foreach(name IN ITEMS ${ARGN})
set_property(TEST ${name} PROPERTY LABELS "UNSTABLE")
set_property(TEST ${name} PROPERTY LABELS "HEAVY")
endforeach()
endmacro()
# Test utilities
add_test_executable_notest(non_native_setup.cpp non_native_setup replication)
add_test_executable_notest(sysbench_example.cpp sysbench_example replication)
#
# Check that all required components are present. To build even without them,
# add e.g. -DHAVE_PHP=Y to the CMake invocation
#
find_program(HAVE_MYSQLTEST mysqltest)
if (NOT HAVE_MYSQLTEST)
message(FATAL_ERROR "Could not find mysqltest. Add -DHAVE_MYSQLTEST=Y to CMake invocation ignore this.")
endif()
find_program(HAVE_PHP php)
if (NOT HAVE_PHP)
message(FATAL_ERROR "Could not find php. Add -DHAVE_PHP=Y to CMake invocation ignore this.")
endif()