diff --git a/.gitignore b/.gitignore index e53b5370e9e2ce635df0b3508e5da3c8a71eb3bf..2516bb9f9be92eb7b9dfd9ebf0b705e9857edcb7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ build*/ *.sw[op] tags +.ExternalData_* diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b244b97e423382a5fe3bc1bc0eb70ee29052c5c..4ffcd71f112ad2cfdf733a5f6c1fef89dcd836fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,16 +148,18 @@ IF( OGS_BUILD_CLI ) ADD_SUBDIRECTORY( OGS ) ENDIF() # OGS_BUILD_CLI IF( OGS_BUILD_TESTS AND NOT IS_SUBPROJECT ) - ADD_SUBDIRECTORY( Tests ) - ADD_SUBDIRECTORY( SimpleTests/MatrixTests ) - ADD_SUBDIRECTORY( SimpleTests/MeshTests ) + IF(CMAKE_VERSION VERSION_LESS 2.8.11) + MESSAGE(FATAL_ERROR "CMAKE 2.8.11 or higher is required to build the tests!") + ENDIF() ADD_SUBDIRECTORY( Tests EXCLUDE_FROM_ALL ) ADD_SUBDIRECTORY( SimpleTests/MatrixTests EXCLUDE_FROM_ALL ) ADD_SUBDIRECTORY( SimpleTests/MeshTests EXCLUDE_FROM_ALL ) IF(NOT MSVC AND BLAS_FOUND AND LAPACK_FOUND) - ADD_SUBDIRECTORY( SimpleTests/SolverTests ) ADD_SUBDIRECTORY( SimpleTests/SolverTests EXCLUDE_FROM_ALL ) ENDIF() + # Create a target 'data', which downloads all referenced data sets into the build tree + # This has to be defined after all tests are defined + ExternalData_Add_Target(data) ENDIF() # OGS_BUILD_TESTS IF(OGS_BUILD_UTILS AND NOT IS_SUBPROJECT) ADD_SUBDIRECTORY( Utils/SimpleMeshCreation ) diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake index 63abac3081bda753372e0829bfe8e9969e99e41a..c37f75396f97525f0e872485c152a2a9efa1aebd 100644 --- a/scripts/cmake/test/AddTest.cmake +++ b/scripts/cmake/test/AddTest.cmake @@ -22,7 +22,8 @@ FUNCTION (AddTest executable case_path case_name wrapper) ## ----------- - ADD_TEST(NAME "${executable}-${case_path}-${wrapper}" + ExternalData_Add_Test(data + NAME "${executable}-${case_path}-${wrapper}" COMMAND ${CMAKE_COMMAND} -Dexecutable=$<TARGET_FILE:${executable}> -Dcase_path=${case_path} @@ -31,6 +32,7 @@ FUNCTION (AddTest executable case_path case_name wrapper) -DWRAPPER_COMMAND=${WRAPPER_COMMAND} -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} -P ${PROJECT_SOURCE_DIR}/scripts/cmake/test/AddTestWrapper.cmake + DATA{${case_path}/${case_name}.cnd, ${case_path}/${case_name}.gml, ${case_path}/${case_name}.vtu} ) IF(NOT tester) diff --git a/scripts/cmake/test/Data.cmake b/scripts/cmake/test/Data.cmake new file mode 100644 index 0000000000000000000000000000000000000000..df82e198e21585e12fe77e7c1fda645d47383ac1 --- /dev/null +++ b/scripts/cmake/test/Data.cmake @@ -0,0 +1,32 @@ +INCLUDE(ExternalData) + +SET(ExternalData_OBJECT_STORES "${ExternalData_OBJECT_STORES_DEFAULT}" CACHE STRING + "Semicolon-separated list of local directories holding test data files in the layout %(algo)/%(hash).") +MARK_AS_ADVANCED(ExternalData_OBJECT_STORES) +IF(NOT ExternalData_OBJECT_STORES) + SET(ExternalData_OBJECT_STORES "${CMAKE_SOURCE_DIR}/../ogs6-data") + FILE(MAKE_DIRECTORY "${ExternalData_OBJECT_STORES}") +ENDIF() + +SET(ExternalData_SOURCE_ROOT ${CMAKE_SOURCE_DIR}/Tests/Data) +SET(ExternalData_BINARY_ROOT ${CMAKE_BINARY_DIR}/Tests/Data) +SET(ExternalData_LINK_CONTENT MD5) + +SET(ExternalData_URL_TEMPLATES "http://www.opengeosys.org/images/dev/%(algo)/%(hash)") + +ADD_CUSTOM_TARGET( + move-data + COMMAND ${CMAKE_COMMAND} + -DExternalData_SOURCE_ROOT=${ExternalData_SOURCE_ROOT} + -DExternalData_LINK_CONTENT=${ExternalData_LINK_CONTENT} + -DExternalData_OBJECT_STORES=${ExternalData_OBJECT_STORES} + -P ${PROJECT_SOURCE_DIR}/scripts/cmake/test/MoveDataToStore.cmake + VERBATIM +) + +ExternalData_Add_Test( + data # data target specified above + NAME External-Data-Test + COMMAND ls -ll ${ExternalData_SOURCE_ROOT}/Elliptic/2d-quads-x1000-y1000/ + DATA{${ExternalData_SOURCE_ROOT}/Elliptic/2d-quads-x1000-y1000/,REGEX:.*} +) diff --git a/scripts/cmake/test/MoveDataToStore.cmake b/scripts/cmake/test/MoveDataToStore.cmake new file mode 100644 index 0000000000000000000000000000000000000000..2e70b1720a31f35996a37d1f6c47a46589454d11 --- /dev/null +++ b/scripts/cmake/test/MoveDataToStore.cmake @@ -0,0 +1,7 @@ +# Get all files matching .ExternalData_<algo>_<hash> +FILE(GLOB_RECURSE FILES "" ${ExternalData_SOURCE_ROOT}/.ExternalData_${ExternalData_LINK_CONTENT}_*) +FOREACH(HASH_FILE ${FILES}) + STRING(REGEX MATCH [^_]+$ HASH ${HASH_FILE}) + MESSAGE("Copying ${HASH_FILE} to ${ExternalData_OBJECT_STORES}/${HASH}") + FILE(RENAME ${HASH_FILE} ${ExternalData_OBJECT_STORES}/${ExternalData_LINK_CONTENT}/${HASH}) +ENDFOREACH()