diff --git a/.github/workflows/vol_cache.yml b/.github/workflows/vol_cache.yml index 58eecfc0d5d..b24c14896b6 100644 --- a/.github/workflows/vol_cache.yml +++ b/.github/workflows/vol_cache.yml @@ -161,4 +161,4 @@ jobs: # that this should be re-enabled in the future. if: ${{ ! matrix.async }} run: | - ctest --build-config ${{ inputs.build_mode }} -VV -R "HDF5_VOL_vol-cache" . + ctest --build-config ${{ inputs.build_mode }} -VV -R "HDF5_VOL_vol-cache" . \ No newline at end of file diff --git a/.github/workflows/vol_rest.yml b/.github/workflows/vol_rest.yml index 0887614a596..1594afdb1dd 100644 --- a/.github/workflows/vol_rest.yml +++ b/.github/workflows/vol_rest.yml @@ -191,4 +191,5 @@ jobs: HSDS_ENDPOINT=http+unix://%2Ftmp%2Fhs%2Fsn_1.sock \ ROOT_DIR=${{github.workspace}}/hsdsdata \ BUCKET_NAME=hsdstest \ - ctest --build-config ${{ inputs.build_mode }} -VV -R "h5_api" . \ No newline at end of file + ctest --build-config ${{ inputs.build_mode }} -VV -R "h5_api" -E "H5COPY" . + \ No newline at end of file diff --git a/config/HDF5Macros.cmake b/config/HDF5Macros.cmake index e1bb13315f5..98b4381e5bb 100644 --- a/config/HDF5Macros.cmake +++ b/config/HDF5Macros.cmake @@ -118,3 +118,30 @@ macro (H5_CREATE_VFD_DIR) file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/${vfdtest}") endforeach () endmacro () + +# Given the name of a CMake target for an external VOL connector, +# populate variables with the names vol_name_out and vol_env_out with +# the connector's name and the environment string needed to load the connector, +# respectively. +macro(HDF5_GET_VOL_TGT_INFO vol_tgt vol_name_out vol_env_out) + set(${vol_env_out} "") + # HDF5_VOL_CONNECTOR + get_target_property (ext_vol_name "${vol_tgt}" HDF5_VOL_NAME) + list(APPEND ${vol_env_out} "HDF5_VOL_CONNECTOR=${ext_vol_name}") + + # HDF5_PLUGIN_PATH + get_target_property(vol_lib_targets "${vol_tgt}" HDF5_VOL_TARGETS) + set(vol_plugin_paths "${CMAKE_BINARY_DIR}/${HDF5_INSTALL_BIN_DIR}") + foreach (lib_target ${vol_lib_targets}) + get_target_property (lib_target_output_dir "${lib_target}" LIBRARY_OUTPUT_DIRECTORY) + if (NOT "${lib_target_output_dir}" STREQUAL "lib_target_output_dir-NOTFOUND" + AND NOT "${lib_target_output_dir}" STREQUAL "" + AND NOT "${lib_target_output_dir}" STREQUAL "${CMAKE_BINARY_DIR}/${HDF5_INSTALL_BIN_DIR}") + set (vol_plugin_paths "${vol_plugin_paths}${CMAKE_SEP}${lib_target_output_dir}") + endif () + endforeach () + list(APPEND ${vol_env_out} "HDF5_PLUGIN_PATH=${vol_plugin_paths}") + + # VOL name + string(REPLACE "HDF5_VOL_" "" ${vol_name_out} "${vol_tgt}") +endmacro() diff --git a/tools/test/h5copy/CMakeTests.cmake b/tools/test/h5copy/CMakeTests.cmake index 7ffebc5c60c..5ff1b796c06 100644 --- a/tools/test/h5copy/CMakeTests.cmake +++ b/tools/test/h5copy/CMakeTests.cmake @@ -10,6 +10,14 @@ # help@hdfgroup.org. # +include(${HDF_CONFIG_DIR}/HDF5Macros.cmake) + +# System-independent path separator +if (WIN32) + set (CMAKE_SEP "\;") +else () + set (CMAKE_SEP ":") +endif () ############################################################################## ############################################################################## ### T E S T I N G ### @@ -38,9 +46,41 @@ h5copy_help2.ddl ) + # Testfile directory setup file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles") - + # Generate testfiles for VOL connector(s) through script, if enabled + if (HDF5_BUILD_GENERATORS) + set(h5copy_vol_files_list "") + foreach (external_vol_tgt ${HDF5_EXTERNAL_VOL_TARGETS}) + HDF5_GET_VOL_TGT_INFO(${external_vol_tgt} ext_vol_dir_name vol_env) + + # Setup testfiles directory + file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/${ext_vol_dir_name}/testfiles" RESULT) + if (NOT ${RESULT} EQUAL 0) + message(FATAL_ERROR "Could not create directory ${PROJECT_BINARY_DIR}/${external_vol_tgt}/testfiles") + endif() + + add_test(NAME ${external_vol_tgt}-h5copygentest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ --h5copy) + + set_tests_properties(${external_vol_tgt}-h5copygentest PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/${ext_vol_dir_name}/testfiles" + FIXTURES_SETUP ${external_vol_tgt}-files + ) + + # These aren't HDF5 files, just copy them to the VOL's subdirectory + foreach (listothers ${LIST_OTHER_TEST_FILES}) + HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/${listothers}" + "${PROJECT_BINARY_DIR}/${ext_vol_dir_name}/testfiles/${listothers}" + "h5copy_vol_files" + ) + endforeach () + endforeach () + add_custom_target(h5copy_vol_files ALL COMMENT "Copying files needed by h5copy tests" DEPENDS ${h5copy_vol_files_list}) + endif() + + # Copy pre-existing files for Native tests foreach (listfiles ${LIST_HDF5_TEST_FILES}) HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/${listfiles}" "${PROJECT_BINARY_DIR}/testfiles/${listfiles}" "h5copy_files") endforeach () @@ -48,6 +88,7 @@ foreach (listothers ${LIST_OTHER_TEST_FILES}) HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/h5copy/expected/${listothers}" "${PROJECT_BINARY_DIR}/testfiles/${listothers}" "h5copy_files") endforeach () + add_custom_target(h5copy_files ALL COMMENT "Copying files needed by h5copy tests" DEPENDS ${h5copy_files_list}) ############################################################################## @@ -58,216 +99,105 @@ # # Perform h5copy according to passing parameters + # testname - name of test to add + # resultcode - expected resultcode after test execution + # result_errcheck - if provided, compare the error output of the test to this file. + # infile - name of input file + # sameflag - flag indicating whether the input/output file should be the same for the main test. TRUE or FALSE. + # psparam - source file for optional prefill test step. must be paired with nonempty pdparam. + # pdparam - dest file for optional prefill test step. must be paired with nonempty psparam. + # fparam - optional value to pass to h5copy's "-f" argument. "" for no flag. + # vparam - optional verbose argument to h5copy. "-v" or "" + # sparam - "source" argument to h5copy. should always be "-s" + # srcname - name of src for h5copy + # dparam - "dest" argument to h5copy. should always be "-d" + # dstname - name of dest for h5copy # - macro (ADD_H5_F_TEST testname resultcode infile fparam vparam sparam srcname dparam dstname) - # Remove any output file left over from previous test run - add_test ( - NAME H5COPY_F-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}.out.h5 - ) - - add_test ( - NAME H5COPY_F-${testname} - COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -f ${fparam} -i ./testfiles/${infile} -o ./testfiles/${testname}.out.h5 ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN} - ) - set_tests_properties (H5COPY_F-${testname} PROPERTIES DEPENDS H5COPY_F-${testname}-clear-objects) - if ("H5COPY_F-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY_F-${testname} PROPERTIES DISABLED true) + macro (ADD_H5_TEST testname resultcode result_errcheck infile sameflag psparam pdparam fparam vparam sparam srcname dparam dstname) + if (NOT "${fparam}" STREQUAL "") + set (fparam_flag "-f") + else() + set (fparam_flag "") endif () - # resultcode=2 will cause the test to skip the diff test - if (NOT "${resultcode}" STREQUAL "2") - add_test ( - NAME H5COPY_F-${testname}-DIFF - COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -v ./testfiles/${infile} ./testfiles/${testname}.out.h5 ${srcname} ${dstname} - ) - set_tests_properties (H5COPY_F-${testname}-DIFF PROPERTIES DEPENDS H5COPY_F-${testname}) - if ("${resultcode}" STREQUAL "1") - set_tests_properties (H5COPY_F-${testname}-DIFF PROPERTIES WILL_FAIL "true") - endif () - if ("H5COPY_F-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY_F-${testname}-DIFF PROPERTIES DISABLED true) - endif () - endif () - add_test ( - NAME H5COPY_F-${testname}-clean-objects - COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}.out.h5 - ) - if (NOT "${resultcode}" STREQUAL "2") - set_tests_properties (H5COPY_F-${testname}-clean-objects PROPERTIES DEPENDS H5COPY_F-${testname}-DIFF) - else () - set_tests_properties (H5COPY_F-${testname}-clean-objects PROPERTIES DEPENDS H5COPY_F-${testname}) - endif () - endmacro () + if (${sameflag}) + set (main_infile "${testname}.out.h5") + else() + set (main_infile "${infile}") + endif() - macro (ADD_H5_TEST testname resultcode infile vparam sparam srcname dparam dstname) - # Remove any output file left over from previous test run - add_test ( - NAME H5COPY-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}.out.h5 - ) - - add_test ( - NAME H5COPY-${testname} - COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -i ./testfiles/${infile} -o ./testfiles/${testname}.out.h5 ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN} - ) - set_tests_properties (H5COPY-${testname} PROPERTIES DEPENDS H5COPY-${testname}-clear-objects) - if ("H5COPY-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY-${testname} PROPERTIES DISABLED true) - endif () + list(LENGTH HDF5_EXTERNAL_VOL_TARGETS num_ext_vols) - # resultcode=2 will cause the test to skip the diff test - if (NOT "${resultcode}" STREQUAL "2") - add_test ( - NAME H5COPY-${testname}-DIFF - COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -v ./testfiles/${infile} ./testfiles/${testname}.out.h5 ${srcname} ${dstname} - ) - set_tests_properties (H5COPY-${testname}-DIFF PROPERTIES DEPENDS H5COPY-${testname}) - if ("${resultcode}" STREQUAL "1") - set_tests_properties (H5COPY-${testname}-DIFF PROPERTIES WILL_FAIL "true") - endif () - if ("H5COPY-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY-${testname}-DIFF PROPERTIES DISABLED true) + # Add a test for the native connector and each external VOL connector + foreach (vol_idx RANGE 0 ${num_ext_vols}) + # First, populate VOL info to be passed to tests + if (${vol_idx} EQUAL 0) + set(vol "native") + set(volprefix "") + else () + # An external VOL connector + set(vol_env "") + + math(EXPR vol_idx_fixed "${vol_idx} - 1") + list(GET HDF5_EXTERNAL_VOL_TARGETS ${vol_idx_fixed} ext_vol_tgt) + HDF5_GET_VOL_TGT_INFO(${ext_vol_tgt} vol vol_env) + + set (volprefix "HDF5_VOL_${vol}-") + set (vol_workdir "${PROJECT_BINARY_DIR}/${vol}") + set (vol_fixtures "${volprefix}files") endif () - endif () - add_test ( - NAME H5COPY-${testname}-clean-objects - COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}.out.h5 - ) - if (NOT "${resultcode}" STREQUAL "2") - set_tests_properties (H5COPY-${testname}-clean-objects PROPERTIES DEPENDS H5COPY-${testname}-DIFF) - else () - set_tests_properties (H5COPY-${testname}-clean-objects PROPERTIES DEPENDS H5COPY-${testname}) - endif () - endmacro () - macro (ADD_SKIP_H5_TEST testname skipresultfile) - if (NOT HDF5_USING_ANALYSIS_TOOL) + # Remove any output file left over from previous test run add_test ( - NAME H5COPY-${testname}-${skipresultfile} - COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${testname}-${skipresultfile} ${ARGN}" + NAME ${volprefix}H5COPY-${testname}-clear-objects + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ./testfiles/${testname}.out.h5 ) - set_property(TEST H5COPY-${testname}-${skipresultfile} PROPERTY DISABLED true) - endif () - endmacro () - - macro (ADD_H5_TEST2 testname resultcode infile psparam pdparam vparam sparam srcname dparam dstname) - # Remove any output file left over from previous test run - add_test ( - NAME H5COPY-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}.out.h5 - ) - - add_test ( - NAME H5COPY-${testname}-prefill - COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -i ./testfiles/${infile} -o ./testfiles/${testname}.out.h5 -v -s ${psparam} -d ${pdparam} - ) - set_tests_properties (H5COPY-${testname}-prefill PROPERTIES DEPENDS H5COPY-${testname}-clear-objects) - if ("H5COPY-${testname}-prefill" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY-${testname}-prefill PROPERTIES DISABLED true) - endif () - add_test ( - NAME H5COPY-${testname} - COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -i ./testfiles/${infile} -o ./testfiles/${testname}.out.h5 ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN} - ) - set_tests_properties (H5COPY-${testname} PROPERTIES DEPENDS H5COPY-${testname}-prefill) - if ("H5COPY-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY-${testname} PROPERTIES DISABLED true) - endif () - # resultcode=2 will cause the test to skip the diff test - if (NOT "${resultcode}" STREQUAL "2") - add_test ( - NAME H5COPY-${testname}-DIFF - COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -v ./testfiles/${infile} ./testfiles/${testname}.out.h5 ${srcname} ${dstname} + set_tests_properties (${volprefix}H5COPY-${testname}-clear-objects PROPERTIES + # h5delete will return an error code if targeted file does not exist - accept any result + PASS_REGULAR_EXPRESSION "^$|" ) - set_tests_properties (H5COPY-${testname}-DIFF PROPERTIES DEPENDS H5COPY-${testname}) - if ("${resultcode}" STREQUAL "1") - set_tests_properties (H5COPY-${testname}-DIFF PROPERTIES WILL_FAIL "true") - endif () - if ("H5COPY-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY-${testname}-DIFF PROPERTIES DISABLED true) + + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY-${testname}-clear-objects PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) endif () - endif () - add_test ( - NAME H5COPY-${testname}-clean-objects - COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}.out.h5 - ) - if (NOT "${resultcode}" STREQUAL "2") - set_tests_properties (H5COPY-${testname}-clean-objects PROPERTIES DEPENDS H5COPY-${testname}-DIFF) - else () - set_tests_properties (H5COPY-${testname}-clean-objects PROPERTIES DEPENDS H5COPY-${testname}) - endif () - endmacro () - macro (ADD_H5_TEST_SAME testname resultcode pfile psparam pdparam vparam sparam srcname dparam dstname) - # Remove any output file left over from previous test run - add_test ( - NAME H5COPY_SAME-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}.out.h5 - ) - - add_test ( - NAME H5COPY_SAME-${testname}-prefill - COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -i ./testfiles/${pfile} -o ./testfiles/${testname}.out.h5 -v -s ${psparam} -d ${pdparam} - ) - set_tests_properties (H5COPY_SAME-${testname}-prefill PROPERTIES DEPENDS H5COPY_SAME-${testname}-clear-objects) - if ("H5COPY_SAME-${testname}-prefill" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY_SAME-${testname}-prefill PROPERTIES DISABLED true) - endif () + # Optional prefill sub-test, to be done before main test + if (NOT ${psparam} STREQUAL "" OR NOT ${pdparam} STREQUAL "") + if (${psparam} STREQUAL "" OR ${pdparam} STREQUAL "") + message(FATAL_ERROR "Prefill test requires prefill src and prefill dest") + endif () - add_test ( - NAME H5COPY_SAME-${testname} - COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -i ./testfiles/${testname}.out.h5 -o ./testfiles/${testname}.out.h5 ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN} - ) - set_tests_properties (H5COPY_SAME-${testname} PROPERTIES DEPENDS H5COPY_SAME-${testname}-prefill) - if ("H5COPY_SAME-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY_SAME-${testname} PROPERTIES DISABLED true) - endif () - # resultcode=2 will cause the test to skip the diff test - if (NOT "${resultcode}" STREQUAL "2") - add_test ( - NAME H5COPY_SAME-${testname}-DIFF - COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -v ./testfiles/${testname}.out.h5 ./testfiles/${testname}.out.h5 ${srcname} ${dstname} - ) - set_tests_properties (H5COPY_SAME-${testname}-DIFF PROPERTIES DEPENDS H5COPY_SAME-${testname}) - if ("${resultcode}" STREQUAL "1") - set_tests_properties (H5COPY_SAME-${testname}-DIFF PROPERTIES WILL_FAIL "true") - endif () - if ("H5COPY_SAME-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY_SAME-${testname}-DIFF PROPERTIES DISABLED true) - endif () - endif () - add_test ( - NAME H5COPY_SAME-${testname}-clean-objects - COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}.out.h5 - ) - if (NOT "${resultcode}" STREQUAL "2") - set_tests_properties (H5COPY_SAME-${testname}-clean-objects PROPERTIES DEPENDS H5COPY_SAME-${testname}-DIFF) - else () - set_tests_properties (H5COPY_SAME-${testname}-clean-objects PROPERTIES DEPENDS H5COPY_SAME-${testname}) - endif () - endmacro () + add_test ( + NAME ${volprefix}H5COPY-${testname}-prefill + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -i ./testfiles/${infile} -o ./testfiles/${testname}.out.h5 -v -s ${psparam} -d ${pdparam} + ) + set_tests_properties (${volprefix}H5COPY-${testname}-prefill PROPERTIES + DEPENDS ${volprefix}H5COPY-${testname}-clear-objects + ) - # - # Similar to ADD_H5_TEST macro. Compare to outputs from source & target - # files instead of checking with h5ls. - # - macro (ADD_H5_CMP_TEST testname resultcode result_errcheck infile vparam sparam srcname dparam dstname) - # Remove any output file left over from previous test run - add_test ( - NAME H5COPY-CMP-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}.out.h5 - ) - # If using memchecker add tests without using scripts - if (HDF5_ENABLE_USING_MEMCHECKER) - add_test (NAME H5COPY-CMP-${testname} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -i ./testfiles/${infile} -o ./testfiles/${testname}.out.h5 ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN}) - if ("${resultcode}" STREQUAL "1") - set_tests_properties (H5COPY-CMP-${testname} PROPERTIES WILL_FAIL "true") - endif () - else () - add_test ( - NAME H5COPY-CMP-${testname} + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY-${testname}-prefill PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + + if ("${volprefix}H5COPY-${testname}-prefill" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") + set_tests_properties (${volprefix}H5COPY-${testname}-prefill PROPERTIES DISABLED true) + endif () + + set(prefill_dep "${volprefix}H5COPY-${testname}-prefill") + endif () # prefill step + + if (NOT "${result_errcheck}" STREQUAL "" AND NOT HDF5_ENABLE_USING_MEMCHECKER) + add_test ( + NAME ${volprefix}H5COPY-${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" @@ -277,31 +207,141 @@ -D "TEST_EXPECT=${resultcode}" -D "TEST_REFERENCE=./testfiles/${testname}.out" -D "TEST_ERRREF=${result_errcheck}" + -D "TEST_MASK_STORE=true" -D "TEST_GREP_COMPARE=TRUE" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) - endif () - set_tests_properties (H5COPY-CMP-${testname} PROPERTIES DEPENDS H5COPY-CMP-${testname}-clear-objects) - if ("H5COPY-CMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY-CMP-${testname} PROPERTIES DISABLED true) - endif () - add_test ( - NAME H5COPY-CMP-${testname}-clean-objects - COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}.out.h5 - ) - set_tests_properties (H5COPY-CMP-${testname}-clean-objects PROPERTIES DEPENDS H5COPY-CMP-${testname}) - endmacro () + else () + add_test ( + NAME ${volprefix}H5COPY-${testname} + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${fparam_flag} ${fparam} -i ./testfiles/${main_infile} -o ./testfiles/${testname}.out.h5 ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN} + ) + endif () - macro (ADD_H5_UD_TEST testname resultcode infile sparam srcname dparam dstname cmpfile) - if (NOT HDF5_ENABLE_USING_MEMCHECKER) - # Remove any output file left over from previous test run + set_tests_properties (${volprefix}H5COPY-${testname} PROPERTIES + DEPENDS "${volprefix}H5COPY-${testname}-clear-objects;${prefill_dep}" + ) + + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY-${testname} PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + + if ("${volprefix}H5COPY-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") + set_tests_properties (${volprefix}H5COPY-${testname} PROPERTIES DISABLED true) + endif () + + # resultcode=2 will cause the test to skip the diff test + if (NOT "${resultcode}" STREQUAL "2") + add_test ( + NAME ${volprefix}H5COPY-${testname}-DIFF + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -v ./testfiles/${main_infile} ./testfiles/${testname}.out.h5 ${srcname} ${dstname} + ) + set_tests_properties (${volprefix}H5COPY-${testname}-DIFF PROPERTIES + DEPENDS ${volprefix}H5COPY-${testname} + ) + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY-${testname}-DIFF PROPERTIES + DEPENDS ${volprefix}H5COPY-${testname} + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + + if ("${resultcode}" STREQUAL "1") + set_tests_properties (${volprefix}H5COPY-${testname}-DIFF PROPERTIES WILL_FAIL "true") + endif () + if ("${volprefix}H5COPY-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") + set_tests_properties (${volprefix}H5COPY-${testname}-DIFF PROPERTIES DISABLED true) + endif () + endif () add_test ( - NAME H5COPY_UD-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove testfiles/${testname}.out.h5 + NAME ${volprefix}H5COPY-${testname}-clean-objects + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ./testfiles/${testname}.out.h5 + ) + set_tests_properties (${volprefix}H5COPY-${testname}-clean-objects PROPERTIES + # h5delete will return an error code if targeted file does not exist - accept any result + PASS_REGULAR_EXPRESSION "^$|" ) - if ("${resultcode}" STREQUAL "2") + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY-${testname}-clean-objects PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + + if (NOT "${resultcode}" STREQUAL "2") + set_tests_properties (${volprefix}H5COPY-${testname}-clean-objects PROPERTIES DEPENDS ${volprefix}H5COPY-${testname}-DIFF) + else () + set_tests_properties (${volprefix}H5COPY-${testname}-clean-objects PROPERTIES DEPENDS ${volprefix}H5COPY-${testname}) + endif () + endforeach() # foreach VOL connector + endmacro () + + macro (ADD_H5_UD_TEST testname resultcode infile sparam srcname dparam dstname cmpfile) + list(LENGTH HDF5_EXTERNAL_VOL_TARGETS num_ext_vols) + + # Add a test for the native connector and each external VOL connector + foreach (vol_idx RANGE 0 ${num_ext_vols}) + # First, populate VOL info to be passed to tests + if (${vol_idx} EQUAL 0) + set(vol "native") + set(volprefix "") + else () + # An external VOL connector + set(vol_env "") + + math(EXPR vol_idx_fixed "${vol_idx} - 1") + list(GET HDF5_EXTERNAL_VOL_TARGETS ${vol_idx_fixed} ext_vol_tgt) + HDF5_GET_VOL_TGT_INFO(${ext_vol_tgt} vol vol_env) + + set (volprefix "HDF5_VOL_${vol}-") + set (vol_workdir "${PROJECT_BINARY_DIR}/${vol}") + set (vol_fixtures "${volprefix}files") + + # Isolate plugin path string + string(FIND "${vol_env}" "HDF5_PLUGIN_PATH=" vol_plugin_path_posn) + if (vol_plugin_path_posn GREATER -1) + # Grab path string after HDF5_PLUGIN_PATH= + math(EXPR vol_plugin_path_posn "${vol_plugin_path_posn} + 17") + string(SUBSTRING "${vol_env}" ${vol_plugin_path_posn} -1 vol_plugin_path) + else() + set(vol_plugin_path "") + endif() + endif () + + if (NOT HDF5_ENABLE_USING_MEMCHECKER) + # Remove any output file left over from previous test run add_test ( - NAME H5COPY_UD-${testname} + NAME ${volprefix}H5COPY_UD-${testname}-clear-objects + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ testfiles/${testname}.out.h5 + ) + set_tests_properties(${volprefix}H5COPY_UD-${testname}-clear-objects PROPERTIES + # h5delete will return an error code if targeted file does not exist - accept any result + PASS_REGULAR_EXPRESSION "^$|" + ) + + if (NOT "${vol}" STREQUAL "native") + set_tests_properties(${volprefix}H5COPY_UD-${testname}-clear-objects PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + if ("${resultcode}" STREQUAL "2") + # force an error to occur because plugin will not be found + set (ud_search_path ${CMAKE_BINARY_DIR}) + else () + set (ud_search_path ${CMAKE_BINARY_DIR}/plugins) + endif () + + add_test ( + NAME ${volprefix}H5COPY_UD-${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" @@ -311,158 +351,274 @@ -D "TEST_EXPECT=${resultcode}" -D "TEST_REFERENCE=./testfiles/${infile}.txt" -D "TEST_ENV_VAR=HDF5_PLUGIN_PATH" - -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}" + -D "TEST_ENV_VALUE=${ud_search_path}${CMAKE_SEP}${vol_plugin_path}" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) - else () + + set_tests_properties (${volprefix}H5COPY_UD-${testname} PROPERTIES + DEPENDS ${volprefix}H5COPY_UD-${testname}-clear-objects + ) + + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY_UD-${testname} PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + + if ("${volprefix}H5COPY_UD-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") + set_tests_properties (${volprefix}H5COPY_UD-${testname} PROPERTIES DISABLED true) + endif () add_test ( - NAME H5COPY_UD-${testname} + NAME ${volprefix}H5COPY_UD-${testname}-DIFF COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" - -D "TEST_PROGRAM=$" - -D "TEST_ARGS:STRING=-v;-i;./testfiles/${infile};-o;./testfiles/${testname}.out.h5;${sparam};${srcname};${dparam};${dstname}" + -D "TEST_PROGRAM=$" + -D "TEST_ARGS:STRING=-v;./testfiles/${cmpfile};./testfiles/${testname}.out.h5;${srcname};${dstname}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_OUTPUT=./testfiles/${infile}.out" + -D "TEST_OUTPUT=./testfiles/${testname}.out.h5.out" -D "TEST_EXPECT=${resultcode}" - -D "TEST_REFERENCE=./testfiles/${infile}.txt" + -D "TEST_REFERENCE=./testfiles/${testname}.out.h5.txt" -D "TEST_ENV_VAR=HDF5_PLUGIN_PATH" - -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins" + -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins${CMAKE_SEP}${vol_plugin_path}" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) - endif () - set_tests_properties (H5COPY_UD-${testname} PROPERTIES DEPENDS H5COPY_UD-${testname}-clear-objects) - if ("H5COPY_UD-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY_UD-${testname} PROPERTIES DISABLED true) - endif () - add_test ( - NAME H5COPY_UD-${testname}-DIFF - COMMAND "${CMAKE_COMMAND}" - -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" - -D "TEST_PROGRAM=$" - -D "TEST_ARGS:STRING=-v;./testfiles/${cmpfile};./testfiles/${testname}.out.h5;${srcname};${dstname}" - -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_OUTPUT=./testfiles/${testname}.out.h5.out" - -D "TEST_EXPECT=${resultcode}" - -D "TEST_REFERENCE=./testfiles/${testname}.out.h5.txt" - -D "TEST_ENV_VAR=HDF5_PLUGIN_PATH" - -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins" - -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}" - -P "${HDF_RESOURCES_DIR}/runTest.cmake" - ) - set_tests_properties (H5COPY_UD-${testname}-DIFF PROPERTIES DEPENDS H5COPY_UD-${testname}) - if ("H5COPY_UD-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY_UD-${testname}-DIFF PROPERTIES DISABLED true) - endif () - add_test ( - NAME H5COPY_UD-${testname}-clean-objects - COMMAND ${CMAKE_COMMAND} -E remove testfiles/${testname}.out.h5 - ) - set_tests_properties (H5COPY_UD-${testname}-clean-objects PROPERTIES DEPENDS H5COPY_UD-${testname}-DIFF) - endif () + set_tests_properties (${volprefix}H5COPY_UD-${testname}-DIFF PROPERTIES + DEPENDS ${volprefix}H5COPY_UD-${testname} + ) + + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY_UD-${testname}-DIFF PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + + if ("${volprefix}H5COPY_UD-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") + set_tests_properties (${volprefix}H5COPY_UD-${testname}-DIFF PROPERTIES DISABLED true) + endif () + add_test ( + NAME ${volprefix}H5COPY_UD-${testname}-clean-objects + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ testfiles/${testname}.out.h5 + ) + + set_tests_properties (${volprefix}H5COPY_UD-${testname}-clean-objects PROPERTIES + DEPENDS ${volprefix}H5COPY_UD-${testname}-DIFF + # h5delete will return an error code if targeted file does not exist - accept any result + PASS_REGULAR_EXPRESSION "^$|" + ) + + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY_UD-${testname}-clean-objects PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif() + endif() + endforeach() # vol_idx endmacro () macro (ADD_H5_UD_ERR_TEST testname resultcode infile sparam srcname dparam dstname cmpfile) - if (NOT HDF5_ENABLE_USING_MEMCHECKER) - # Remove any output file left over from previous test run - add_test ( - NAME H5COPY_UD_ERR-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove testfiles/${testname}_ERR.out.h5 - ) - if ("${resultcode}" STREQUAL "2") + list(LENGTH HDF5_EXTERNAL_VOL_TARGETS num_ext_vols) + + # Add a test for the native connector and each external VOL connector + foreach (vol_idx RANGE 0 ${num_ext_vols}) + # First, populate VOL info to be passed to tests + if (${vol_idx} EQUAL 0) + set(vol "native") + set(volprefix "") + else () + # An external VOL connector + set(vol_env "") + + math(EXPR vol_idx_fixed "${vol_idx} - 1") + list(GET HDF5_EXTERNAL_VOL_TARGETS ${vol_idx_fixed} ext_vol_tgt) + HDF5_GET_VOL_TGT_INFO(${ext_vol_tgt} vol vol_env) + + set (volprefix "HDF5_VOL_${vol}-") + set (vol_workdir "${PROJECT_BINARY_DIR}/${vol}") + set (vol_fixtures "${volprefix}files") + + # Isolate plugin path string + string(FIND "${vol_env}" "HDF5_PLUGIN_PATH=" vol_plugin_path_posn) + if (vol_plugin_path_posn GREATER -1) + # Grab path string after HDF5_PLUGIN_PATH= + math(EXPR vol_plugin_path_posn "${vol_plugin_path_posn} + 17") + string(SUBSTRING "${vol_env}" ${vol_plugin_path_posn} -1 vol_plugin_path) + else() + set(vol_plugin_path "") + endif() + endif () + + if (NOT HDF5_ENABLE_USING_MEMCHECKER) + # Remove any output file left over from previous test run add_test ( - NAME H5COPY_UD_ERR-${testname} + NAME ${volprefix}H5COPY_UD_ERR-${testname}-clear-objects + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ testfiles/${testname}_ERR.out.h5 + ) + set_tests_properties (${volprefix}H5COPY_UD_ERR-${testname}-clear-objects PROPERTIES + # h5delete will return an error code if targeted file does not exist - accept any result + PASS_REGULAR_EXPRESSION "^$|" + ) + + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY_UD_ERR-${testname}-clear-objects PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + + if ("${resultcode}" STREQUAL "2") + # force an error to occur because plugin will not be found + set (ud_search_path "${CMAKE_BINARY_DIR}") + set (expected_result "0") + else () + set (ud_search_path "${CMAKE_BINARY_DIR}/plugins") + set (expected_result "${resultcode}") + endif () + + add_test ( + NAME ${volprefix}H5COPY_UD_ERR-${testname} COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" -D "TEST_ARGS:STRING=-v;--enable-error-stack;-i;./testfiles/${infile};-o;./testfiles/${testname}_ERR.out.h5;${sparam};${srcname};${dparam};${dstname}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" -D "TEST_OUTPUT=./testfiles/${infile}_ERR.out" - -D "TEST_EXPECT=0" + -D "TEST_EXPECT=${expected_result}" -D "TEST_REFERENCE=./testfiles/${infile}_ERR.txt" -D "TEST_MASK_ERROR=true" -D "TEST_ENV_VAR=HDF5_PLUGIN_PATH" - -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}" + -D "TEST_ENV_VALUE=${ud_search_path}${CMAKE_SEP}${vol_plugin_path}" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) - else () + set_tests_properties (${volprefix}H5COPY_UD_ERR-${testname} PROPERTIES + DEPENDS ${volprefix}H5COPY_UD_ERR-${testname}-clear-objects + ) + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY_UD_ERR-${testname} PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + + if ("${volprefix}H5COPY_UD_ERR-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") + set_tests_properties (${volprefix}H5COPY_UD_ERR-${testname} PROPERTIES DISABLED true) + endif () add_test ( - NAME H5COPY_UD_ERR-${testname} + NAME ${volprefix}H5COPY_UD_ERR-${testname}-DIFF COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" - -D "TEST_PROGRAM=$" - -D "TEST_ARGS:STRING=-v;--enable-error-stack;-i;./testfiles/${infile};-o;./testfiles/${testname}_ERR.out.h5;${sparam};${srcname};${dparam};${dstname}" + -D "TEST_PROGRAM=$" + -D "TEST_ARGS:STRING=-v;./testfiles/${cmpfile};./testfiles/${testname}_ERR.out.h5;${srcname};${dstname}" -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_OUTPUT=./testfiles/${infile}_ERR.out" - -D "TEST_EXPECT=${resultcode}" - -D "TEST_REFERENCE=./testfiles/${infile}_ERR.txt" - -D "TEST_MASK_ERROR=true" + -D "TEST_OUTPUT=./testfiles/${testname}_ERR.out.h5.out" + -D "TEST_EXPECT=0" + -D "TEST_REFERENCE=./testfiles/${testname}_ERR.out.h5.txt" -D "TEST_ENV_VAR=HDF5_PLUGIN_PATH" - -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins" + -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins${CMAKE_SEP}${vol_plugin_path}" -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) + set_tests_properties (${volprefix}H5COPY_UD_ERR-${testname}-DIFF PROPERTIES + DEPENDS ${volprefix}H5COPY_UD_ERR-${testname} + ) + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY_UD_ERR-${testname}-DIFF PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + + if ("${volprefix}H5COPY_UD_ERR-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") + set_tests_properties (${volprefix}H5COPY_UD_ERR-${testname}-DIFF PROPERTIES DISABLED true) + endif () + add_test ( + NAME ${volprefix}H5COPY_UD_ERR-${testname}-clean-objects + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ testfiles/${testname}_ERR.out.h5 + ) + set_tests_properties (${volprefix}H5COPY_UD_ERR-${testname}-clean-objects PROPERTIES + DEPENDS ${volprefix}H5COPY_UD_ERR-${testname}-DIFF + # h5delete will return an error code if targeted file does not exist - accept any result + PASS_REGULAR_EXPRESSION "^$|" + ) + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY_UD_ERR-${testname}-clean-objects PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () endif () - set_tests_properties (H5COPY_UD_ERR-${testname} PROPERTIES DEPENDS H5COPY_UD_ERR-${testname}-clear-objects) - if ("H5COPY_UD_ERR-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY_UD_ERR-${testname} PROPERTIES DISABLED true) - endif () - add_test ( - NAME H5COPY_UD_ERR-${testname}-DIFF - COMMAND "${CMAKE_COMMAND}" - -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" - -D "TEST_PROGRAM=$" - -D "TEST_ARGS:STRING=-v;./testfiles/${cmpfile};./testfiles/${testname}_ERR.out.h5;${srcname};${dstname}" - -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_OUTPUT=./testfiles/${testname}_ERR.out.h5.out" - -D "TEST_EXPECT=0" - -D "TEST_REFERENCE=./testfiles/${testname}_ERR.out.h5.txt" - -D "TEST_ENV_VAR=HDF5_PLUGIN_PATH" - -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins" - -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}" - -P "${HDF_RESOURCES_DIR}/runTest.cmake" - ) - set_tests_properties (H5COPY_UD_ERR-${testname}-DIFF PROPERTIES DEPENDS H5COPY_UD_ERR-${testname}) - if ("H5COPY_UD_ERR-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY_UD_ERR-${testname}-DIFF PROPERTIES DISABLED true) - endif () - add_test ( - NAME H5COPY_UD_ERR-${testname}-clean-objects - COMMAND ${CMAKE_COMMAND} -E remove testfiles/${testname}_ERR.out.h5 - ) - set_tests_properties (H5COPY_UD_ERR-${testname}-clean-objects PROPERTIES DEPENDS H5COPY_UD_ERR-${testname}-DIFF) - endif () + endforeach() # vol_idx endmacro () macro (ADD_SIMPLE_TEST resultfile resultcode) - # If using memchecker add tests without using scripts - if (HDF5_ENABLE_USING_MEMCHECKER) - add_test (NAME H5COPY-${resultfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${ARGN}) - if (${resultcode}) - set_tests_properties (H5COPY-${resultfile} PROPERTIES WILL_FAIL "true") + list(LENGTH HDF5_EXTERNAL_VOL_TARGETS num_ext_vols) + + # Add a test for the native connector and each external VOL connector + foreach (vol_idx RANGE 0 ${num_ext_vols}) + # First, populate VOL info to be passed to tests + if (${vol_idx} EQUAL 0) + set(vol "native") + set(volprefix "") + else () + # An external VOL connector + set(vol_env "") + + math(EXPR vol_idx_fixed "${vol_idx} - 1") + list(GET HDF5_EXTERNAL_VOL_TARGETS ${vol_idx_fixed} ext_vol_tgt) + HDF5_GET_VOL_TGT_INFO(${ext_vol_tgt} vol vol_env) + + set (volprefix "HDF5_VOL_${vol}-") + set (vol_workdir "${PROJECT_BINARY_DIR}/${vol}") + set (vol_fixtures "${volprefix}files") endif () - else () - add_test ( - NAME H5COPY-${resultfile} - COMMAND "${CMAKE_COMMAND}" - -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" - -D "TEST_PROGRAM=$" - -D "TEST_ARGS=${ARGN}" - -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_OUTPUT=./testfiles/${resultfile}.out" - -D "TEST_EXPECT=${resultcode}" - -D "TEST_REFERENCE=./testfiles/${resultfile}.ddl" - -P "${HDF_RESOURCES_DIR}/runTest.cmake" + + # If using memchecker add tests without using scripts + if (HDF5_ENABLE_USING_MEMCHECKER) + add_test (NAME ${volprefix}H5COPY-${resultfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${ARGN}) + if (${resultcode}) + set_tests_properties (${volprefix}H5COPY-${resultfile} PROPERTIES WILL_FAIL "true") + endif () + else () + add_test ( + NAME ${volprefix}H5COPY-${resultfile} + COMMAND "${CMAKE_COMMAND}" + -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" + -D "TEST_PROGRAM=$" + -D "TEST_ARGS=${ARGN}" + -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" + -D "TEST_OUTPUT=./testfiles/${resultfile}.out" + -D "TEST_EXPECT=${resultcode}" + -D "TEST_REFERENCE=./testfiles/${resultfile}.ddl" + -P "${HDF_RESOURCES_DIR}/runTest.cmake" + ) + endif () + set_tests_properties (${volprefix}H5COPY-${resultfile} PROPERTIES + WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" ) - endif () - set_tests_properties (H5COPY-${resultfile} PROPERTIES - WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" - ) - if ("H5COPY-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") - set_tests_properties (H5COPY-${resultfile} PROPERTIES DISABLED true) - endif () + if (NOT "${vol}" STREQUAL "native") + set_tests_properties (${volprefix}H5COPY-${resultfile} PROPERTIES + ENVIRONMENT "${vol_env}" + WORKING_DIRECTORY "${vol_workdir}" + FIXTURES_REQUIRED "${vol_fixtures}" + ) + endif () + + if ("${volprefix}H5COPY-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") + set_tests_properties (${volprefix}H5COPY-${resultfile} PROPERTIES DISABLED true) + endif () + endforeach() # vol_idx endmacro () ############################################################################## @@ -492,118 +648,120 @@ set (USE_FILTER_SZIP "true") endif () -# Test for help flag + + + # Test for help flag ADD_SIMPLE_TEST (h5copy_help1 0 -h) ADD_SIMPLE_TEST (h5copy_help2 0 --help) # "Test copying various forms of datasets" - ADD_H5_TEST (simple 0 ${HDF_FILE1}.h5 -v -s simple -d simple) - ADD_H5_TEST (chunk 0 ${HDF_FILE1}.h5 -v -s chunk -d chunk) - ADD_H5_TEST (compact 0 ${HDF_FILE1}.h5 -v -s compact -d compact) - ADD_H5_TEST (compound 0 ${HDF_FILE1}.h5 -v -s compound -d compound) + ADD_H5_TEST (simple 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s simple -d simple) + ADD_H5_TEST (chunk 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s chunk -d chunk) + ADD_H5_TEST (compact 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s compact -d compact) + ADD_H5_TEST (compound 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s compound -d compound) if (USE_FILTER_DEFLATE) - ADD_H5_TEST (compressed 0 ${HDF_FILE1}.h5 -v -s compressed -d compressed) + ADD_H5_TEST (compressed 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s compressed -d compressed) else () - ADD_H5_TEST (compressed 2 ${HDF_FILE1}.h5 -v -s compressed -d compressed) + ADD_H5_TEST (compressed 2 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s compressed -d compressed) endif () - ADD_H5_TEST (named_vl 0 ${HDF_FILE1}.h5 -v -s named_vl -d named_vl) - ADD_H5_TEST (nested_vl 0 ${HDF_FILE1}.h5 -v -s nested_vl -d nested_vl) - ADD_H5_TEST (dset_attr 0 ${HDF_FILE1}.h5 -v -s dset_attr -d dset_attr) + ADD_H5_TEST (named_vl 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s named_vl -d named_vl) + ADD_H5_TEST (nested_vl 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s nested_vl -d nested_vl) + ADD_H5_TEST (dset_attr 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s dset_attr -d dset_attr) # "Test copying dataset within group in source file to root of destination" - ADD_H5_TEST (simple_top 0 ${HDF_FILE1}.h5 -v -s grp_dsets/simple -d simple_top) + ADD_H5_TEST (simple_top 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s grp_dsets/simple -d simple_top) # "Test copying & renaming dataset" - ADD_H5_TEST (dsrename 0 ${HDF_FILE1}.h5 -v -s compound -d rename) + ADD_H5_TEST (dsrename 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s compound -d rename) # "Test copying empty, 'full' & 'nested' groups" - ADD_H5_TEST (grp_empty 0 ${HDF_FILE1}.h5 -v -s grp_empty -d grp_empty) + ADD_H5_TEST (grp_empty 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s grp_empty -d grp_empty) if (USE_FILTER_DEFLATE) - ADD_H5_TEST (grp_dsets 0 ${HDF_FILE1}.h5 -v -s grp_dsets -d grp_dsets) - ADD_H5_TEST (grp_nested 0 ${HDF_FILE1}.h5 -v -s grp_nested -d grp_nested) + ADD_H5_TEST (grp_dsets 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s grp_dsets -d grp_dsets) + ADD_H5_TEST (grp_nested 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s grp_nested -d grp_nested) else () - ADD_H5_TEST (grp_dsets 2 ${HDF_FILE1}.h5 -v -s grp_dsets -d grp_dsets) - ADD_H5_TEST (grp_nested 2 ${HDF_FILE1}.h5 -v -s grp_nested -d grp_nested) + ADD_H5_TEST (grp_dsets 2 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s grp_dsets -d grp_dsets) + ADD_H5_TEST (grp_nested 2 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s grp_nested -d grp_nested) endif () - ADD_H5_TEST (grp_attr 0 ${HDF_FILE1}.h5 -v -s grp_attr -d grp_attr) + ADD_H5_TEST (grp_attr 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s grp_attr -d grp_attr) # "Test copying dataset within group in source file to group in destination" - ADD_H5_TEST2 (simple_group 0 ${HDF_FILE1}.h5 grp_dsets grp_dsets -v -s /grp_dsets/simple -d /grp_dsets/simple_group) + ADD_H5_TEST (simple_group 0 "" ${HDF_FILE1}.h5 FALSE grp_dsets grp_dsets "" -v -s /grp_dsets/simple -d /grp_dsets/simple_group) if (USE_FILTER_DEFLATE) # "Test copying & renaming group" - ADD_H5_TEST (grp_rename 0 ${HDF_FILE1}.h5 -v -s grp_dsets -d grp_rename) + ADD_H5_TEST (grp_rename 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s grp_dsets -d grp_rename) # "Test copying 'full' group hierarchy into group in destination file" - ADD_H5_TEST2 (grp_dsets_rename 0 ${HDF_FILE1}.h5 grp_dsets grp_rename -v -s grp_dsets -d /grp_rename/grp_dsets) + ADD_H5_TEST (grp_dsets_rename 0 "" ${HDF_FILE1}.h5 FALSE grp_dsets grp_rename "" -v -s grp_dsets -d /grp_rename/grp_dsets) else () # "Test copying & renaming group" - ADD_H5_TEST (grp_rename 2 ${HDF_FILE1}.h5 -v -s grp_dsets -d grp_rename) + ADD_H5_TEST (grp_rename 2 "" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s grp_dsets -d grp_rename) # "Test copying 'full' group hierarchy into group in destination file" - ADD_H5_TEST2 (grp_dsets_rename 2 ${HDF_FILE1}.h5 grp_dsets grp_rename -v -s grp_dsets -d /grp_rename/grp_dsets) + ADD_H5_TEST (grp_dsets_rename 2 "" ${HDF_FILE1}.h5 FALSE grp_dsets grp_rename "" -v -s grp_dsets -d /grp_rename/grp_dsets) endif () # "Test copying objects into group that doesn't exist yet in destination file" - ADD_H5_TEST (A_B1_simple 0 ${HDF_FILE1}.h5 -vp -s simple -d /A/B1/simple) - ADD_H5_TEST (A_B2_simple2 0 ${HDF_FILE1}.h5 -vp -s simple -d /A/B2/simple2) - ADD_H5_TEST (C_D_simple 0 ${HDF_FILE1}.h5 -vp -s /grp_dsets/simple -d /C/D/simple) + ADD_H5_TEST (A_B1_simple 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -vp -s simple -d /A/B1/simple) + ADD_H5_TEST (A_B2_simple2 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -vp -s simple -d /A/B2/simple2) + ADD_H5_TEST (C_D_simple 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -vp -s /grp_dsets/simple -d /C/D/simple) if (USE_FILTER_DEFLATE) - ADD_H5_TEST (E_F_grp_dsets 0 ${HDF_FILE1}.h5 -vp -s /grp_dsets -d /E/F/grp_dsets) - ADD_H5_TEST (G_H_grp_nested 0 ${HDF_FILE1}.h5 -vp -s /grp_nested -d /G/H/grp_nested) + ADD_H5_TEST (E_F_grp_dsets 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -vp -s /grp_dsets -d /E/F/grp_dsets) + ADD_H5_TEST (G_H_grp_nested 0 "" ${HDF_FILE1}.h5 FALSE "" "" "" -vp -s /grp_nested -d /G/H/grp_nested) else () - ADD_H5_TEST (E_F_grp_dsets 2 ${HDF_FILE1}.h5 -vp -s /grp_dsets -d /E/F/grp_dsets) - ADD_H5_TEST (G_H_grp_nested 2 ${HDF_FILE1}.h5 -vp -s /grp_nested -d /G/H/grp_nested) + ADD_H5_TEST (E_F_grp_dsets 2 "" ${HDF_FILE1}.h5 FALSE "" "" "" -vp -s /grp_dsets -d /E/F/grp_dsets) + ADD_H5_TEST (G_H_grp_nested 2 "" ${HDF_FILE1}.h5 FALSE "" "" "" -vp -s /grp_nested -d /G/H/grp_nested) endif () ############# COPY REFERENCES ############## # "Test copying object and region references" - ADD_H5_F_TEST (region_ref 2 ${HDF_FILE2}.h5 ref -v -s / -d /COPY) + ADD_H5_TEST (region_ref 2 "" ${HDF_FILE2}.h5 FALSE "" "" ref -v -s / -d /COPY) ############# COPY EXT LINKS ############## # "Test copying external link directly without -f ext" - ADD_H5_TEST (ext_link 2 ${HDF_EXT_SRC_FILE}.h5 -v -s /group_ext/extlink_dset -d /copy1_dset) + ADD_H5_TEST (ext_link 2 "" ${HDF_EXT_SRC_FILE}.h5 FALSE "" "" "" -v -s /group_ext/extlink_dset -d /copy1_dset) # "Test copying external link directly with -f ext" - ADD_H5_F_TEST (ext_link_f 2 ${HDF_EXT_SRC_FILE}.h5 ext -v -s /group_ext/extlink_dset -d /copy2_dset) + ADD_H5_TEST (ext_link_f 2 "" ${HDF_EXT_SRC_FILE}.h5 FALSE "" "" ext -v -s /group_ext/extlink_dset -d /copy2_dset) # "Test copying dangling external link (no obj) directly without -f ext" - ADD_H5_TEST (ext_dangle_noobj 2 ${HDF_EXT_SRC_FILE}.h5 -v -s /group_ext/extlink_notyet1 -d /copy_dangle1_1) + ADD_H5_TEST (ext_dangle_noobj 2 "" ${HDF_EXT_SRC_FILE}.h5 FALSE "" "" "" -v -s /group_ext/extlink_notyet1 -d /copy_dangle1_1) # "Test copying dangling external link (no obj) directly with -f ext" - ADD_H5_F_TEST (ext_dangle_noobj_f 2 ${HDF_EXT_SRC_FILE}.h5 ext -v -s /group_ext/extlink_notyet1 -d /copy_dangle1_2) + ADD_H5_TEST (ext_dangle_noobj_f 2 "" ${HDF_EXT_SRC_FILE}.h5 FALSE "" "" ext -v -s /group_ext/extlink_notyet1 -d /copy_dangle1_2) # "Test copying dangling external link (no file) directly without -f ext" - ADD_H5_TEST (ext_dangle_nofile 2 ${HDF_EXT_SRC_FILE}.h5 -v -s /group_ext/extlink_notyet2 -d /copy_dangle2_1) + ADD_H5_TEST (ext_dangle_nofile 2 "" ${HDF_EXT_SRC_FILE}.h5 FALSE "" "" "" -v -s /group_ext/extlink_notyet2 -d /copy_dangle2_1) # "Test copying dangling external link (no file) directly with -f ext" - ADD_H5_F_TEST (ext_dangle_nofile_f 2 ${HDF_EXT_SRC_FILE}.h5 ext -v -s /group_ext/extlink_notyet2 -d /copy_dangle2_2) + ADD_H5_TEST (ext_dangle_nofile_f 2 "" ${HDF_EXT_SRC_FILE}.h5 FALSE "" "" ext -v -s /group_ext/extlink_notyet2 -d /copy_dangle2_2) # "Test copying a group contains external links without -f ext" - ADD_H5_TEST (ext_link_group 2 ${HDF_EXT_SRC_FILE}.h5 -v -s /group_ext -d /copy1_group) + ADD_H5_TEST (ext_link_group 2 "" ${HDF_EXT_SRC_FILE}.h5 FALSE "" "" "" -v -s /group_ext -d /copy1_group) # "Test copying a group contains external links with -f ext" - ADD_H5_F_TEST (ext_link_group_f 2 ${HDF_EXT_SRC_FILE}.h5 ext -v -s /group_ext -d /copy2_group) + ADD_H5_TEST (ext_link_group_f 2 "" ${HDF_EXT_SRC_FILE}.h5 FALSE "" "" ext -v -s /group_ext -d /copy2_group) ############# Test misc. ############## #----------------------------------------------------------------- # "Test copying object into group which doesn't exist, without -p" # - ADD_H5_CMP_TEST (h5copy_misc1 1 "h5copy error" ${HDF_FILE1}.h5 -v -s /simple -d /g1/g2/simple) + ADD_H5_TEST (h5copy_misc1 1 "h5copy error" ${HDF_FILE1}.h5 FALSE "" "" "" -v -s /simple -d /g1/g2/simple) #------------------------------------------- # "Test copying objects to the same file " # # - dataset - ADD_H5_TEST_SAME (samefile1 0 ${HDF_FILE1}.h5 /simple /simple -v -s /simple -d /simple_cp) + ADD_H5_TEST (samefile1 0 "" ${HDF_FILE1}.h5 TRUE /simple /simple "" -v -s /simple -d /simple_cp) # - group with some datasets if (USE_FILTER_DEFLATE) - ADD_H5_TEST_SAME (samefile2 0 ${HDF_FILE1}.h5 /grp_dsets /grp_dsets -v -s /grp_dsets -d /grp_dsets_cp) + ADD_H5_TEST (samefile2 0 "" ${HDF_FILE1}.h5 TRUE /grp_dsets /grp_dsets "" -v -s /grp_dsets -d /grp_dsets_cp) else () - ADD_H5_TEST_SAME (samefile2 2 ${HDF_FILE1}.h5 /grp_dsets /grp_dsets -v -s /grp_dsets -d /grp_dsets_cp) + ADD_H5_TEST (samefile2 2 "" ${HDF_FILE1}.h5 TRUE /grp_dsets /grp_dsets "" -v -s /grp_dsets -d /grp_dsets_cp) endif () ############################################################################## @@ -612,4 +770,4 @@ if (BUILD_SHARED_LIBS) ADD_H5_UD_TEST (h5copy_plugin_test 0 tudfilter.h5 -s /dynlibud -d /dynlibud tudfilter2.h5 ) ADD_H5_UD_ERR_TEST (h5copy_plugin_fail 2 tudfilter.h5 -s /dynlibud -d /dynlibud tudfilter2.h5) -endif () +endif () \ No newline at end of file