Skip to content

Commit 77ab9af

Browse files
committed
Generate VOL tests for h5diff
1 parent a8c1e19 commit 77ab9af

File tree

1 file changed

+212
-58
lines changed

1 file changed

+212
-58
lines changed

tools/test/h5diff/CMakeTests.cmake

Lines changed: 212 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@
1010
1111
#
1212

13+
include(${HDF_CONFIG_DIR}/HDF5Macros.cmake)
14+
15+
# System-independent path separator
16+
if (WIN32)
17+
set (CMAKE_SEP "\;")
18+
else ()
19+
set (CMAKE_SEP ":")
20+
endif ()
21+
1322
##############################################################################
1423
##############################################################################
1524
### T E S T I N G ###
@@ -365,6 +374,61 @@ if (H5_HAVE_PARALLEL)
365374
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/tvlstr.h5" "${PROJECT_BINARY_DIR}/PAR/testfiles/tvlstr2.h5" "h5diff_files")
366375
endif ()
367376

377+
# create test files for each external VOL connector
378+
set(h5diff_vol_files_list "")
379+
foreach(external_vol_tgt ${HDF5_EXTERNAL_VOL_TARGETS})
380+
HDF5_GET_VOL_TGT_INFO(${external_vol_tgt} ext_vol_dir_name vol_env)
381+
382+
# Setup testfiles directory
383+
file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/${ext_vol_dir_name}/testfiles")
384+
if (H5_HAVE_PARALLEL)
385+
file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/PAR/${ext_vol_dir_name}/testfiles")
386+
endif ()
387+
388+
# Generate test files
389+
add_test(NAME ${external_vol_tgt}-h5diffgentest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5gentest> -h5diff)
390+
set_tests_properties(${external_vol_tgt}-h5diffgentest PROPERTIES
391+
ENVIRONMENT "${vol_env}"
392+
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/${ext_vol_dir_name}/testfiles"
393+
FIXTURES_SETUP ${ext_vol_dir_name}-files
394+
)
395+
396+
if (H5_HAVE_PARALLEL)
397+
add_test(NAME ${external_vol_tgt}-h5diffgentest-PAR COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5gentest> -h5diff)
398+
set_tests_properties(${external_vol_tgt}-h5diffgentest-PAR PROPERTIES
399+
ENVIRONMENT "${vol_env}"
400+
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/PAR/${ext_vol_dir_name}/testfiles"
401+
FIXTURES_SETUP ${ext_vol_dir_name}-files
402+
)
403+
endif ()
404+
405+
# These aren't HDF5 files, just copy them to the VOL's subdirectory
406+
foreach (listothers ${LIST_OTHER_TEST_FILES})
407+
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/${listothers}"
408+
"${PROJECT_BINARY_DIR}/${ext_vol_dir_name}/testfiles/${listothers}"
409+
"h5diff_vol_files"
410+
)
411+
endforeach ()
412+
413+
if (COPY_WINDOWS_FILES)
414+
foreach(h5_tstfiles ${LIST_WIN_TEST_FILES})
415+
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/${h5_tstfiles}w.txt" "${PROJECT_BINARY_DIR}/${ext_vol_dir_name}/testfiles/${h5_tstfiles}.txt" "h5diff_vol_files")
416+
417+
if (H5_HAVE_PARALLEL)
418+
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/${h5_tstfiles}w.txt" "${PROJECT_BINARY_DIR}/PAR/${ext_vol_dir_name}/testfiles/${h5_tstfiles}.txt" "h5diff_vol_files")
419+
endif ()
420+
endforeach()
421+
else ()
422+
foreach(h5_tstfiles ${LIST_WIN_TEST_FILES})
423+
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/${h5_tstfiles}.txt" "${PROJECT_BINARY_DIR}/${ext_vol_dir_name}/testfiles/${h5_tstfiles}.txt" "h5diff_vol_files")
424+
425+
if (H5_HAVE_PARALLEL)
426+
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/${h5_tstfiles}.txt" "${PROJECT_BINARY_DIR}/PAR/${ext_vol_dir_name}/testfiles/${h5_tstfiles}.txt" "h5diff_vol_files")
427+
endif ()
428+
endforeach()
429+
endif ()
430+
endforeach () # per-VOL loop
431+
add_custom_target(h5diff_vol_files ALL COMMENT "Copying files needed by h5diff VOL tests" DEPENDS ${h5diff_vol_files_list})
368432

369433
#
370434
# Overwrite system dependent files (Windows) and not VS2015
@@ -440,6 +504,7 @@ macro (ADD_H5_TEST testname)
440504
if (HDF5_TEST_SERIAL)
441505
ADD_SH5_TEST (${testname} RESULT_CODE ${ARG_RESULT_CODE} ${ARG_ERROR_REF} ${ARG_UNPARSED_ARGUMENTS})
442506
endif ()
507+
443508
if (H5_HAVE_PARALLEL AND HDF5_TEST_PARALLEL AND NOT ARG_SERIAL_ONLY)
444509
ADD_PH5_TEST (${testname} RESULT_CODE ${ARG_RESULT_CODE} ${ARG_ERROR_REF} ${ARG_UNPARSED_ARGUMENTS})
445510
endif ()
@@ -458,39 +523,84 @@ macro (ADD_SH5_TEST testname)
458523
message(FATAL_ERROR "ADD_SH5_TEST: RESULT_CODE is required")
459524
endif ()
460525

461-
# If using memchecker add tests without using scripts
462-
if (HDF5_ENABLE_USING_MEMCHECKER)
463-
add_test (NAME H5DIFF-${testname} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff> ${ARG_UNPARSED_ARGUMENTS})
464-
if (${ARG_RESULT_CODE})
465-
set_tests_properties (H5DIFF-${testname} PROPERTIES WILL_FAIL "true")
526+
list(LENGTH HDF5_EXTERNAL_VOL_TARGETS num_ext_vols)
527+
528+
# Add a test for the native connector and each external VOL connector
529+
foreach (vol_idx RANGE 0 ${num_ext_vols})
530+
set(vol_env "")
531+
532+
# First, populate VOL info to be passed to tests
533+
if (${vol_idx} EQUAL 0)
534+
set(vol "native")
535+
set(vol_prefix "")
536+
set (workdir "${PROJECT_BINARY_DIR}/testfiles")
537+
else ()
538+
# An external VOL connector
539+
math(EXPR vol_idx_fixed "${vol_idx} - 1")
540+
list(GET HDF5_EXTERNAL_VOL_TARGETS ${vol_idx_fixed} ext_vol_tgt)
541+
HDF5_GET_VOL_TGT_INFO(${ext_vol_tgt} vol vol_env)
542+
543+
set (vol_prefix "HDF5_VOL_${vol}-")
544+
545+
set (workdir "${PROJECT_BINARY_DIR}/${vol}/testfiles")
546+
# Isolate plugin path string
547+
string(FIND "${vol_env}" "HDF5_PLUGIN_PATH=" vol_plugin_path_posn)
548+
549+
if (vol_plugin_path_posn GREATER -1)
550+
# Grab path string after HDF5_PLUGIN_PATH=
551+
string(LENGTH "HDF5_PLUGIN_PATH=" path_prefix_len)
552+
math(EXPR vol_plugin_path_posn "${vol_plugin_path_posn} + ${path_prefix_len}")
553+
string(SUBSTRING "${vol_env}" ${vol_plugin_path_posn} -1 vol_plugin_path)
554+
else()
555+
set(vol_plugin_path "")
556+
endif()
466557
endif ()
467-
else ()
468-
add_test (
469-
NAME H5DIFF-${testname}
470-
COMMAND "${CMAKE_COMMAND}"
471-
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
472-
-D "TEST_PROGRAM=$<TARGET_FILE:h5diff>"
473-
-D "TEST_ARGS:STRING=${ARG_UNPARSED_ARGUMENTS}"
474-
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
475-
-D "TEST_OUTPUT=${testname}.out"
476-
-D "TEST_EXPECT=${ARG_RESULT_CODE}"
477-
-D "TEST_REFERENCE=${testname}.txt"
478-
-D "TEST_ERRREF=${ARG_ERROR_REF}"
479-
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
558+
559+
# If using memchecker add tests without using scripts
560+
if (HDF5_ENABLE_USING_MEMCHECKER)
561+
add_test (NAME ${vol_prefix}H5DIFF-${testname} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff> ${ARG_UNPARSED_ARGUMENTS})
562+
if (${ARG_RESULT_CODE})
563+
set_tests_properties (${vol_prefix}H5DIFF-${testname} PROPERTIES WILL_FAIL "true")
564+
endif ()
565+
else ()
566+
add_test (
567+
NAME ${vol_prefix}H5DIFF-${testname}
568+
COMMAND "${CMAKE_COMMAND}"
569+
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
570+
-D "TEST_PROGRAM=$<TARGET_FILE:h5diff>"
571+
-D "TEST_ARGS:STRING=${ARG_UNPARSED_ARGUMENTS}"
572+
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
573+
-D "TEST_OUTPUT=${testname}.out"
574+
-D "TEST_EXPECT=${ARG_RESULT_CODE}"
575+
-D "TEST_REFERENCE=${testname}.txt"
576+
-D "TEST_ERRREF=${ARG_ERROR_REF}"
577+
-D "TEST_ENV_VAR=HDF5_PLUGIN_PATH"
578+
-D "TEST_ENV_VALUE=${vol_plugin_path}"
579+
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
580+
)
581+
endif ()
582+
583+
set_tests_properties (${vol_prefix}H5DIFF-${testname} PROPERTIES
584+
WORKING_DIRECTORY "${workdir}"
480585
)
481-
endif ()
482-
set_tests_properties (H5DIFF-${testname} PROPERTIES
483-
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
484-
)
485-
if ("H5DIFF-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
486-
set_tests_properties (H5DIFF-${testname} PROPERTIES DISABLED true)
487-
endif ()
586+
587+
if (NOT "${vol}" STREQUAL "native")
588+
set_tests_properties (${vol_prefix}H5DIFF-${testname} PROPERTIES
589+
ENVIRONMENT "${vol_env}"
590+
FIXTURES_REQUIRED "h5diff_vol_files"
591+
)
592+
endif ()
593+
594+
if ("${vol_prefix}H5DIFF-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
595+
set_tests_properties (${vol_prefix}H5DIFF-${testname} PROPERTIES DISABLED true)
596+
endif ()
597+
endforeach() # per-VOL loop
488598
endmacro ()
489599

490600
macro (ADD_PH5_TEST testname)
491601
cmake_parse_arguments(ARG
492602
""
493-
"RESULT_CODE;ERROR_REF"
603+
"RESULT_CODE;ERROR_REF;VOL_NAME;VOL_ENV"
494604
""
495605
${ARGN}
496606
)
@@ -500,37 +610,81 @@ macro (ADD_PH5_TEST testname)
500610
message(FATAL_ERROR "ADD_PH5_TEST: RESULT_CODE is required")
501611
endif ()
502612

503-
# If using memchecker add tests without using scripts
504-
if (HDF5_ENABLE_USING_MEMCHECKER)
505-
add_test (NAME MPI_TEST_H5DIFF-${testname} COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:ph5diff> ${MPIEXEC_POSTFLAGS} ${ARG_UNPARSED_ARGUMENTS})
506-
set_tests_properties (MPI_TEST_H5DIFF-${testname} PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/PAR/testfiles")
507-
if (${ARG_RESULT_CODE})
508-
set_tests_properties (MPI_TEST_H5DIFF-${testname} PROPERTIES WILL_FAIL "true")
613+
list(LENGTH HDF5_EXTERNAL_VOL_TARGETS num_ext_vols)
614+
615+
# Add a test for the native connector and each external VOL connector
616+
foreach (vol_idx RANGE 0 ${num_ext_vols})
617+
set(vol_env "")
618+
619+
# First, populate VOL info to be passed to tests
620+
if (${vol_idx} EQUAL 0)
621+
set(vol "native")
622+
set(vol_prefix "")
623+
set (workdir "${PROJECT_BINARY_DIR}/PAR/testfiles")
624+
else ()
625+
# An external VOL connector
626+
math(EXPR vol_idx_fixed "${vol_idx} - 1")
627+
list(GET HDF5_EXTERNAL_VOL_TARGETS ${vol_idx_fixed} ext_vol_tgt)
628+
HDF5_GET_VOL_TGT_INFO(${ext_vol_tgt} vol vol_env)
629+
630+
set (vol_prefix "HDF5_VOL_${vol}-")
631+
632+
set (workdir "${PROJECT_BINARY_DIR}/PAR/${vol}/testfiles")
633+
# Isolate plugin path string
634+
string(FIND "${vol_env}" "HDF5_PLUGIN_PATH=" vol_plugin_path_posn)
635+
636+
if (vol_plugin_path_posn GREATER -1)
637+
# Grab path string after HDF5_PLUGIN_PATH=
638+
string(LENGTH "HDF5_PLUGIN_PATH=" path_prefix_len)
639+
math(EXPR vol_plugin_path_posn "${vol_plugin_path_posn} + ${path_prefix_len}")
640+
string(SUBSTRING "${vol_env}" ${vol_plugin_path_posn} -1 vol_plugin_path)
641+
else()
642+
set(vol_plugin_path "")
643+
endif()
509644
endif ()
510-
else ()
511-
add_test (
512-
NAME MPI_TEST_H5DIFF-${testname}
513-
COMMAND "${CMAKE_COMMAND}"
514-
-D "TEST_PROGRAM=${MPIEXEC_EXECUTABLE}"
515-
-D "TEST_ARGS:STRING=${MPIEXEC_NUMPROC_FLAG};${MPIEXEC_MAX_NUMPROCS};${MPIEXEC_PREFLAGS};$<TARGET_FILE:ph5diff>;${MPIEXEC_POSTFLAGS};${ARG_UNPARSED_ARGUMENTS}"
516-
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}/PAR/testfiles"
517-
-D "TEST_OUTPUT=${testname}.out"
518-
#-D "TEST_EXPECT=${ARG_RESULT_CODE}"
519-
-D "TEST_EXPECT=0" # ph5diff currently always exits with a zero status code due to
520-
# output from some MPI implementations from a non-zero exit code
521-
-D "TEST_REFERENCE=${testname}.txt"
522-
-D "TEST_REF_FILTER="
523-
-D "TEST_SORT_COMPARE=TRUE"
524-
-D "TEST_ERRREF=${ARG_ERROR_REF}"
525-
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
645+
646+
# If using memchecker add tests without using scripts
647+
if (HDF5_ENABLE_USING_MEMCHECKER)
648+
add_test (NAME MPI_TEST_${vol_prefix}H5DIFF-${testname} COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:ph5diff> ${MPIEXEC_POSTFLAGS} ${ARG_UNPARSED_ARGUMENTS})
649+
set_tests_properties (MPI_TEST_${vol_prefix}H5DIFF-${testname} PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/PAR/testfiles")
650+
if (${ARG_RESULT_CODE})
651+
set_tests_properties (MPI_TEST_${vol_prefix}H5DIFF-${testname} PROPERTIES WILL_FAIL "true")
652+
endif ()
653+
else ()
654+
add_test (
655+
NAME MPI_TEST_${vol_prefix}H5DIFF-${testname}
656+
COMMAND "${CMAKE_COMMAND}"
657+
-D "TEST_PROGRAM=${MPIEXEC_EXECUTABLE}"
658+
-D "TEST_ARGS:STRING=${MPIEXEC_NUMPROC_FLAG};${MPIEXEC_MAX_NUMPROCS};${MPIEXEC_PREFLAGS};$<TARGET_FILE:ph5diff>;${MPIEXEC_POSTFLAGS};${ARG_UNPARSED_ARGUMENTS}"
659+
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}/PAR/testfiles"
660+
-D "TEST_OUTPUT=${testname}.out"
661+
#-D "TEST_EXPECT=${ARG_RESULT_CODE}"
662+
-D "TEST_EXPECT=0" # ph5diff currently always exits with a zero status code due to
663+
# output from some MPI implementations from a non-zero exit code
664+
-D "TEST_REFERENCE=${testname}.txt"
665+
-D "TEST_REF_FILTER="
666+
-D "TEST_SORT_COMPARE=TRUE"
667+
-D "TEST_ERRREF=${ARG_ERROR_REF}"
668+
-D "TEST_ENV_VAR=HDF5_PLUGIN_PATH"
669+
-D "TEST_ENV_VALUE=${vol_plugin_path}"
670+
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
671+
)
672+
endif ()
673+
set_tests_properties (MPI_TEST_${vol_prefix}H5DIFF-${testname} PROPERTIES
674+
WORKING_DIRECTORY "${workdir}"
526675
)
527-
endif ()
528-
set_tests_properties (MPI_TEST_H5DIFF-${testname} PROPERTIES
529-
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/PAR/testfiles"
530-
)
531-
if ("MPI_TEST_H5DIFF-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
532-
set_tests_properties (MPI_TEST_H5DIFF-${testname} PROPERTIES DISABLED true)
533-
endif ()
676+
677+
if (NOT "${vol}" STREQUAL "native")
678+
set_tests_properties (MPI_TEST_${vol_prefix}H5DIFF-${testname} PROPERTIES
679+
ENVIRONMENT "${vol_env}"
680+
FIXTURES_REQUIRED "h5diff_vol_files"
681+
)
682+
endif ()
683+
684+
if ("MPI_TEST_${vol_prefix}H5DIFF-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
685+
set_tests_properties (MPI_TEST_${vol_prefix}H5DIFF-${testname} PROPERTIES DISABLED true)
686+
endif ()
687+
endforeach() # per-VOL loop
534688
endmacro ()
535689

536690
macro (ADD_H5_UD_TEST testname resultcode resultfile)
@@ -544,7 +698,7 @@ macro (ADD_H5_UD_TEST testname resultcode resultfile)
544698
endif ()
545699

546700
add_test (
547-
NAME H5DIFF_UD-${testname}
701+
NAME ${vol_prefix}H5DIFF_UD-${testname}
548702
COMMAND "${CMAKE_COMMAND}"
549703
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
550704
-D "TEST_PROGRAM=$<TARGET_FILE:h5diff>"
@@ -560,8 +714,8 @@ macro (ADD_H5_UD_TEST testname resultcode resultfile)
560714
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
561715
)
562716

563-
if ("H5DIFF_UD-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
564-
set_tests_properties (H5DIFF_UD-${testname} PROPERTIES DISABLED true)
717+
if ("${vol_prefix}H5DIFF_UD-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
718+
set_tests_properties (${vol_prefix}H5DIFF_UD-${testname} PROPERTIES DISABLED true)
565719
endif ()
566720
endif ()
567721
endmacro ()

0 commit comments

Comments
 (0)