Rodrigo Arias
df0e7b2bd4
The test ensures that the generated documentation of emulation events is kept up to date. To locate the events.md file, the source root path is now exported to tests in OVNI_SOURCE_DIR. The "Built on ..." message with the date of the build is removed as otherwise it will always make the comparison fail.
126 lines
3.4 KiB
CMake
126 lines
3.4 KiB
CMake
# Copyright (c) 2022-2024 Barcelona Supercomputing Center (BSC)
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
include(CMakeParseArguments)
|
|
|
|
function(ovni_test source)
|
|
set(switches MP SHOULD_FAIL NOEMU SORT BREAKDOWN DISABLED)
|
|
set(single NPROC REGEX NAME DRIVER)
|
|
set(multi ENV)
|
|
|
|
cmake_parse_arguments(
|
|
OVNI_TEST "${switches}" "${single}" "${multi}" ${ARGN})
|
|
|
|
if(OVNI_TEST_NAME)
|
|
set(test_name "${OVNI_TEST_NAME}")
|
|
else()
|
|
set(test_name "${source}")
|
|
endif()
|
|
|
|
# Compute the test name from the source and path
|
|
cmake_path(RELATIVE_PATH CMAKE_CURRENT_SOURCE_DIR
|
|
BASE_DIRECTORY "${OVNI_TEST_SOURCE_DIR}"
|
|
OUTPUT_VARIABLE name_prefix)
|
|
set(full_path "${name_prefix}/${test_name}")
|
|
string(REGEX REPLACE "\.c$" "" full_path_noext "${full_path}")
|
|
string(REPLACE "/" "-" name "${full_path_noext}")
|
|
|
|
set(OVNI_TEST_NAME ${name})
|
|
set(OVNI_TEST_NAME ${OVNI_TEST_NAME} PARENT_SCOPE)
|
|
set(OVNI_TEST_SOURCE ${source})
|
|
|
|
if(NOT OVNI_TEST_NPROC)
|
|
if(NOT OVNI_TEST_MP)
|
|
set(OVNI_TEST_NPROC 1)
|
|
else()
|
|
set(OVNI_TEST_NPROC 4)
|
|
endif()
|
|
endif()
|
|
|
|
list(APPEND OVNI_TEST_ENV
|
|
"OVNI_NPROCS=${OVNI_TEST_NPROC}")
|
|
|
|
list(APPEND OVNI_TEST_ENV
|
|
"OVNI_BUILD_DIR=${CMAKE_BINARY_DIR}/src/emu")
|
|
|
|
list(APPEND OVNI_TEST_ENV
|
|
"OVNI_CURRENT_DIR=${CMAKE_CURRENT_BINARY_DIR}")
|
|
|
|
list(APPEND OVNI_TEST_ENV
|
|
"OVNI_CONFIG_DIR=${CMAKE_SOURCE_DIR}/cfg")
|
|
|
|
list(APPEND OVNI_TEST_ENV
|
|
"OVNI_SOURCE_DIR=${CMAKE_SOURCE_DIR}")
|
|
|
|
if(OVNI_TEST_SORT)
|
|
list(APPEND OVNI_TEST_ENV "OVNI_DO_SORT=1")
|
|
endif()
|
|
|
|
if(OVNI_TEST_NOEMU)
|
|
list(APPEND OVNI_TEST_ENV "OVNI_NOEMU=1")
|
|
endif()
|
|
|
|
if(OVNI_TEST_BREAKDOWN)
|
|
list(APPEND OVNI_TEST_ENV "OVNI_EMU_ARGS=-b")
|
|
endif()
|
|
|
|
if(OVNI_TEST_DRIVER)
|
|
list(APPEND OVNI_TEST_ENV
|
|
"OVNI_DRIVER=${CMAKE_CURRENT_SOURCE_DIR}/${OVNI_TEST_DRIVER}")
|
|
endif()
|
|
|
|
include_directories(
|
|
"${CMAKE_SOURCE_DIR}/src/include"
|
|
"${CMAKE_SOURCE_DIR}/src/emu"
|
|
"${CMAKE_SOURCE_DIR}/src"
|
|
"${CMAKE_SOURCE_DIR}/include"
|
|
)
|
|
|
|
add_executable("${OVNI_TEST_NAME}" "${OVNI_TEST_SOURCE}")
|
|
|
|
target_link_libraries("${OVNI_TEST_NAME}" PRIVATE ovni emu)
|
|
|
|
set(driver "${OVNI_TEST_SOURCE_DIR}/ovni-driver.sh")
|
|
|
|
if(OVNI_TEST_SHOULD_FAIL)
|
|
if(NOT OVNI_TEST_REGEX)
|
|
message(FATAL_ERROR "You must provide a REGEX for a failing test")
|
|
endif()
|
|
# Custom error handler, as ctest doesn't behave as one would expect.
|
|
add_test(NAME "${OVNI_TEST_NAME}"
|
|
COMMAND
|
|
"${OVNI_TEST_SOURCE_DIR}/match-error.sh"
|
|
"${OVNI_TEST_REGEX}"
|
|
"${driver}"
|
|
"${OVNI_TEST_NAME}"
|
|
WORKING_DIRECTORY "${OVNI_TEST_BUILD_DIR}")
|
|
else()
|
|
if(OVNI_TEST_REGEX)
|
|
# Custom error handler for ok too
|
|
add_test(NAME "${OVNI_TEST_NAME}"
|
|
COMMAND
|
|
"${OVNI_TEST_SOURCE_DIR}/match-ok.sh"
|
|
"${OVNI_TEST_REGEX}"
|
|
"${driver}"
|
|
"${OVNI_TEST_NAME}"
|
|
WORKING_DIRECTORY "${OVNI_TEST_BUILD_DIR}")
|
|
else()
|
|
add_test(NAME "${OVNI_TEST_NAME}"
|
|
COMMAND
|
|
"${driver}"
|
|
"${OVNI_TEST_NAME}"
|
|
WORKING_DIRECTORY "${OVNI_TEST_BUILD_DIR}")
|
|
endif()
|
|
endif()
|
|
|
|
set_tests_properties("${OVNI_TEST_NAME}"
|
|
PROPERTIES
|
|
RUN_SERIAL TRUE
|
|
ENVIRONMENT "${OVNI_TEST_ENV}"
|
|
WORKING_DIRECTORY "${OVNI_TEST_BUILD_DIR}")
|
|
|
|
if(OVNI_TEST_DISABLED)
|
|
set_property(TEST "${OVNI_TEST_NAME}" PROPERTY DISABLED TRUE)
|
|
endif()
|
|
endfunction(ovni_test)
|