CMake: allow fine-tuning tests

- The Python configuration tests sometimes need extra setup, so
  do that through a CMakeTests.txt file in the test directory.
- Patch up existing tests:
  - grubcfg needs /tmp/calamares/etc/default to exist
  - rawfs won't work on FreeBSD because of differences in /proc
This commit is contained in:
Adriaan de Groot 2020-05-15 14:38:45 +02:00
parent fe069bdb23
commit c3d8112187
4 changed files with 38 additions and 3 deletions

View File

@ -16,6 +16,8 @@ This release contains contributions from (alphabetically by first name):
QML-based modules -- with a single `-DWITH_QML=OFF` at CMake time. QML-based modules -- with a single `-DWITH_QML=OFF` at CMake time.
This removes QML from Calamares' dependency footprint (but only saves This removes QML from Calamares' dependency footprint (but only saves
200kB in Calamares itself). 200kB in Calamares itself).
- Tests have been extended and now support a tests/CMakeTests.txt file
for fine-tuning tests for Python modules.
## Modules ## ## Modules ##
- No module changes yet - No module changes yet

View File

@ -126,10 +126,10 @@ function( calamares_add_module_subdirectory )
endif() endif()
message( "" ) message( "" )
# We copy over the lang directory, if any # We copy over the lang directory, if any
if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/lang" ) if( IS_DIRECTORY "${_mod_dir}/lang" )
install_calamares_gettext_translations( install_calamares_gettext_translations(
${SUBDIRECTORY} ${SUBDIRECTORY}
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/lang" SOURCE_DIR "${_mod_dir}/lang"
FILENAME ${SUBDIRECTORY}.mo FILENAME ${SUBDIRECTORY}.mo
RENAME calamares-${SUBDIRECTORY}.mo RENAME calamares-${SUBDIRECTORY}.mo
) )
@ -162,6 +162,16 @@ function( calamares_add_module_subdirectory )
# may try to do things to the running system. Needs work to make that a # may try to do things to the running system. Needs work to make that a
# safe thing to do. # safe thing to do.
# #
# If the module has a tests/ subdirectory with *.global and *.job
# files (YAML files holding global and job-configurations for
# testing purposes) then those files are used to drive additional
# tests. The files must be numbered (starting from 1) for this to work;
# 1.global and 1.job together make the configuration for test 1.
#
# If the module has a tests/CMakeLists.txt while it doesn't have its
# own CMakeLists.txt (e.g. a Python module), then the subdirectory
# for tests/ is added on its own.
#
if ( BUILD_TESTING AND _mod_enabled AND _mod_testing ) if ( BUILD_TESTING AND _mod_enabled AND _mod_testing )
add_test( add_test(
NAME load-${SUBDIRECTORY} NAME load-${SUBDIRECTORY}
@ -170,7 +180,7 @@ function( calamares_add_module_subdirectory )
) )
# Try it with the tests/ configurations shipped with the module # Try it with the tests/ configurations shipped with the module
set( _count 1 ) set( _count 1 )
set( _testdir ${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/tests ) set( _testdir ${_mod_dir}/tests )
while ( EXISTS "${_testdir}/${_count}.global" OR EXISTS "${_testdir}/${_count}.job" ) while ( EXISTS "${_testdir}/${_count}.global" OR EXISTS "${_testdir}/${_count}.job" )
set( _dash_g "" ) set( _dash_g "" )
set( _dash_j "" ) set( _dash_j "" )
@ -187,5 +197,8 @@ function( calamares_add_module_subdirectory )
) )
math( EXPR _count "${_count} + 1" ) math( EXPR _count "${_count} + 1" )
endwhile() endwhile()
if ( EXISTS ${_testdir}/CMakeTests.txt AND NOT EXISTS ${_mod_dir}/CMakeLists.txt )
include( ${_testdir}/CMakeTests.txt )
endif()
endif() endif()
endfunction() endfunction()

View File

@ -0,0 +1,12 @@
# Special cases for grubcfg configuration tests:
# - 2.global specifies /tmp/calamares as the rootMountPath,
# so we end up editing files there. Create the directory
# beforehand, so the test doesn't blow up.
set(_grub_root /tmp/calamares/etc/default)
set(_grub_file ${_grub_root}/bogus)
add_test(
NAME make-grubcfg-dirs
COMMAND ${CMAKE_COMMAND} -E make_directory ${_grub_root}
)
set_tests_properties(load-grubcfg-2 PROPERTIES DEPENDS make-grubcfg-dirs)

View File

@ -0,0 +1,8 @@
# Special cases for rawfs tests
#
# - On FreeBSD, /proc/mounts doesn't exist (/proc is only about processes,
# and is rarely used). Expect the test to fail.
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
set_tests_properties(load-rawfs-1 PROPERTIES WILL_FAIL TRUE)
endif()