@@ -48,57 +48,165 @@ add_custom_target(h5mkgrp_files ALL COMMENT "Copying files needed by h5mkgrp tes
4848
4949configure_file (${HDF5_TOOLS_TEST_MISC_SOURCE_DIR} /testfiles/h5mkgrp_version.txt.in ${PROJECT_BINARY_DIR} /testfiles/h5mkgrp_version.txt @ONLY)
5050
51+ # Generate testfiles for VOL connector(s), if any
52+ set (h5mkgrp_vol_files_list "" )
53+
54+ foreach (external_vol_tgt ${HDF5_EXTERNAL_VOL_TARGETS} )
55+ HDF5_GET_VOL_TGT_INFO(${external_vol_tgt} vol vol_env)
56+
57+ # Setup testfiles directory
58+ file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR} /${vol} /testfiles" RESULT)
59+ if (NOT ${RESULT} EQUAL 0)
60+ message (FATAL_ERROR "Failed to create directory: ${PROJECT_BINARY_DIR} /${vol} /testfiles" )
61+ endif ()
62+
63+ # h5mkgrp depends on no pre-existing HDF5 files; no need to use h5gentest here
64+
65+ # Copy expected output files
66+ foreach (h5_mkgrp_file ${HDF5_MKGRP_TEST_FILES} )
67+ HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR} /misc/expected/${h5_mkgrp_file} "
68+ "${PROJECT_BINARY_DIR} /${vol} /testfiles/${h5_mkgrp_file} "
69+ "h5mkgrp_vol_files" )
70+ endforeach ()
71+ endforeach ()
72+
73+ add_custom_target (h5mkgrp_vol_files ALL COMMENT "Copying files needed by h5mkgrp VOL tests" DEPENDS ${h5mkgrp_vol_files_list} )
5174##############################################################################
5275##############################################################################
5376### T H E T E S T S M A C R O S ###
5477##############################################################################
5578##############################################################################
5679
57- macro (ADD_H5_TEST resultfile resultcode resultoption)
58- if (HDF5_ENABLE_USING_MEMCHECKER)
59- add_test (
60- NAME H5MKGRP-${resultfile}
61- COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5mkgrp> ${resultoption} ${resultfile} .h5 ${ARGN}
62- )
63- if ("H5MKGRP-${resultfile} " MATCHES "${HDF5_DISABLE_TESTS_REGEX} " )
64- set_tests_properties (H5MKGRP-${resultfile} PROPERTIES DISABLED true )
80+ #
81+ # Adds a test that performs h5mkgrp according to given parameters
82+ #
83+ # REQUIRED POSITIONAL ARGUMENTS:
84+ # testname - name of the test (used to name the test and output files)
85+ #
86+ # REQUIRED KEYWORD ARGUMENTS:
87+ # RESULT_CODE <resultcode> - expected return code from h5mkgrp
88+ #
89+ # OPTIONAL KEYWORD ARGUMENTS:
90+ # RESULT_OPTION <flag> - a flag to pass to h5mkgrp
91+ #
92+ macro (ADD_H5_TEST testname)
93+ # === Argument processing ===
94+ cmake_parse_arguments (
95+ ARG
96+ "" # flags
97+ "RESULT_CODE;RESULT_OPTION" # one value args
98+ "" # multi value args
99+ ${ARGN}
100+ )
101+
102+ if (NOT DEFINED ARG_RESULT_CODE)
103+ message (FATAL_ERROR "ADD_H5_TEST: RESULT_CODE must be defined" )
104+ endif ()
105+
106+ if (NOT DEFINED ARG_RESULT_OPTION)
107+ set (ARG_RESULT_OPTION "" )
108+ endif ()
109+
110+ # === Adding the Test ===
111+ list (LENGTH HDF5_EXTERNAL_VOL_TARGETS num_ext_vols)
112+
113+ # Add a test for the native connector and each external VOL connector
114+ foreach (vol_idx RANGE 0 ${num_ext_vols} )
115+ # First, populate VOL info to be passed to tests
116+ if (${vol_idx} EQUAL 0)
117+ set (vol "native" )
118+ set (vol_prefix "" )
119+ set (vol_workdir "${PROJECT_BINARY_DIR} /testfiles" )
120+ else ()
121+ # An external VOL connector
122+ set (vol_env "" )
123+
124+ math (EXPR vol_idx_fixed "${vol_idx} - 1" )
125+ list (GET HDF5_EXTERNAL_VOL_TARGETS ${vol_idx_fixed} ext_vol_tgt)
126+ HDF5_GET_VOL_TGT_INFO(${ext_vol_tgt} vol vol_env)
127+
128+ set (vol_prefix "HDF5_VOL_${vol} -" )
129+ set (vol_workdir "${PROJECT_BINARY_DIR} /${vol} /testfiles" )
130+ set (vol_fixtures "${vol_prefix} files" )
65131 endif ()
66- else ()
132+
133+ # == Clean up ==
134+ if (NOT HDF5_ENABLE_USING_MEMCHECKER)
135+ add_test (
136+ NAME ${vol_prefix} H5MKGRP-${testname} -clear-objects
137+ COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5delete> ${testname} .h5
138+ )
139+
140+ set_tests_properties (${vol_prefix} H5MKGRP-${testname} -clear-objects PROPERTIES
141+ WORKING_DIRECTORY "${vol_workdir} "
142+ # h5delete will return an error code if targeted file does not exist - accept any result
143+ PASS_REGULAR_EXPRESSION "^$|"
144+ )
145+
146+ if (NOT "${vol} " STREQUAL "native" )
147+ set_tests_properties (${vol_prefix} H5MKGRP-${testname} -clear-objects PROPERTIES
148+ DEPENDS h5mkgrp_vol_files
149+ ENVIRONMENT "${vol_env} "
150+ )
151+ endif ()
152+ endif ()
153+
154+ # == Main test ==
67155 add_test (
68- NAME H5MKGRP-${resultfile} -clear-objects
69- COMMAND ${CMAKE_COMMAND} -E remove ${resultfile} .h5
70- )
71- set_tests_properties (H5MKGRP-${resultfile} -clear-objects PROPERTIES
72- WORKING_DIRECTORY "${PROJECT_BINARY_DIR} /testfiles"
156+ NAME ${vol_prefix} H5MKGRP-${testname}
157+ COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5mkgrp> ${ARG_RESULT_OPTION} ${testname} .h5 ${ARG_UNPARSED_ARGUMENTS}
73158 )
159+
160+ if ("${vol_prefix} H5MKGRP-${testname} " MATCHES "${HDF5_DISABLE_TESTS_REGEX} " )
161+ set_tests_properties (${vol_prefix} H5MKGRP-${testname} PROPERTIES DISABLED true )
162+ endif ()
163+
164+ if (NOT HDF5_ENABLE_USING_MEMCHECKER)
165+ set_tests_properties (${vol_prefix} H5MKGRP-${testname} PROPERTIES
166+ DEPENDS ${vol_prefix} H5MKGRP-${testname} -clear-objects
167+ )
168+ endif ()
169+
170+ if (NOT "${vol} " STREQUAL "native" )
171+ set_tests_properties (${vol_prefix} H5MKGRP-${testname} PROPERTIES
172+ DEPENDS h5mkgrp_vol_files
173+ ENVIRONMENT "${vol_env} "
174+ )
175+ endif ()
176+
177+ # == Verify with h5ls ==
74178 add_test (
75- NAME H5MKGRP-${resultfile}
76- COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5mkgrp> ${resultoption} ${resultfile} .h5 ${ARGN}
179+ NAME ${vol_prefix} H5MKGRP-${testname} -h5ls
180+ COMMAND "${CMAKE_COMMAND} "
181+ -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR} "
182+ -D "TEST_PROGRAM=$<TARGET_FILE:h5ls>"
183+ -D "TEST_ARGS:STRING=-v;-r;${testname} .h5"
184+ -D "TEST_FOLDER=${vol_workdir} "
185+ -D "TEST_OUTPUT=${testname} .out"
186+ -D "TEST_EXPECT=${ARG_RESULT_CODE} "
187+ -D "TEST_REFERENCE=${testname} .ls"
188+ -P "${HDF_RESOURCES_DIR} /runTest.cmake"
77189 )
78- set_tests_properties (H5MKGRP- ${resultfile} PROPERTIES
79- DEPENDS H5MKGRP-${resultfile} -clear-objects
80- WORKING_DIRECTORY " ${PROJECT_BINARY_DIR} /testfiles"
190+
191+ set_tests_properties ( ${vol_prefix} H5MKGRP-${testname} -h5ls PROPERTIES
192+ DEPENDS ${vol_prefix} H5MKGRP- ${testname}
81193 )
82- if ("H5MKGRP-${resultfile} " MATCHES "${HDF5_DISABLE_TESTS_REGEX} " )
83- set_tests_properties (H5MKGRP-${resultfile} PROPERTIES DISABLED true )
194+
195+ if (NOT "${vol} " STREQUAL "native" )
196+ set_tests_properties (${vol_prefix} H5MKGRP-${testname} -h5ls PROPERTIES
197+ DEPENDS h5mkgrp_vol_files
198+ ENVIRONMENT "${vol_env} "
199+ )
84200 endif ()
85- add_test (
86- NAME H5MKGRP-${resultfile} -h5ls
87- COMMAND "${CMAKE_COMMAND} "
88- -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR} "
89- -D "TEST_PROGRAM=$<TARGET_FILE:h5ls>"
90- -D "TEST_ARGS:STRING=-v;-r;${resultfile} .h5"
91- -D "TEST_FOLDER=${PROJECT_BINARY_DIR} /testfiles"
92- -D "TEST_OUTPUT=${resultfile} .out"
93- -D "TEST_EXPECT=${resultcode} "
94- -D "TEST_REFERENCE=${resultfile} .ls"
95- -P "${HDF_RESOURCES_DIR} /runTest.cmake"
96- )
97- set_tests_properties (H5MKGRP-${resultfile} -h5ls PROPERTIES DEPENDS H5MKGRP-${resultfile} )
98- if ("H5MKGRP-${resultfile} -h5ls" MATCHES "${HDF5_DISABLE_TESTS_REGEX} " )
99- set_tests_properties (H5MKGRP-${resultfile} -h5ls PROPERTIES DISABLED true )
201+
202+ if ("${vol_prefix} H5MKGRP-${testname} -h5ls" MATCHES "${HDF5_DISABLE_TESTS_REGEX} " )
203+ set_tests_properties (${vol_prefix} H5MKGRP-${testname} -h5ls PROPERTIES DISABLED true )
100204 endif ()
101- endif ()
205+
206+ set_tests_properties ("${vol_prefix} H5MKGRP-${testname} " PROPERTIES
207+ WORKING_DIRECTORY "${vol_workdir} "
208+ )
209+ endforeach () # per-VOL loop
102210endmacro ()
103211
104212macro (ADD_H5_CMP resultfile resultcode)
@@ -165,19 +273,19 @@ ADD_H5_CMP (h5mkgrp_help 0 "-h")
165273ADD_H5_CMP (h5mkgrp_version 0 "-V" )
166274
167275# Create single group at root level
168- ADD_H5_TEST (h5mkgrp_single 0 "" single)
169- ADD_H5_TEST (h5mkgrp_single_v 0 "-v" single)
170- ADD_H5_TEST (h5mkgrp_single_p 0 "-p" single)
171- ADD_H5_TEST (h5mkgrp_single_l 0 "-l" latest)
276+ ADD_H5_TEST (h5mkgrp_single RESULT_CODE 0 single)
277+ ADD_H5_TEST (h5mkgrp_single_v RESULT_CODE 0 RESULT_OPTION "-v" single)
278+ ADD_H5_TEST (h5mkgrp_single_p RESULT_CODE 0 RESULT_OPTION "-p" single)
279+ ADD_H5_TEST (h5mkgrp_single_l RESULT_CODE 0 RESULT_OPTION "-l" latest)
172280
173281# Create several groups at root level
174- ADD_H5_TEST (h5mkgrp_several 0 "" one two)
175- ADD_H5_TEST (h5mkgrp_several_v 0 "-v" one two)
176- ADD_H5_TEST (h5mkgrp_several_p 0 "-p" one two)
177- ADD_H5_TEST (h5mkgrp_several_l 0 "-l" one two)
282+ ADD_H5_TEST (h5mkgrp_several RESULT_CODE 0 one two)
283+ ADD_H5_TEST (h5mkgrp_several_v RESULT_CODE 0 RESULT_OPTION "-v" one two)
284+ ADD_H5_TEST (h5mkgrp_several_p RESULT_CODE 0 RESULT_OPTION "-p" one two)
285+ ADD_H5_TEST (h5mkgrp_several_l RESULT_CODE 0 RESULT_OPTION "-l" one two)
178286
179287# Create various nested groups
180- ADD_H5_TEST (h5mkgrp_nested_p 0 "-p" /one/two)
181- ADD_H5_TEST (h5mkgrp_nested_lp 0 "-lp" /one/two)
182- ADD_H5_TEST (h5mkgrp_nested_mult_p 0 "-p" /one/two /three/four)
183- ADD_H5_TEST (h5mkgrp_nested_mult_lp 0 "-lp" /one/two /three/four)
288+ ADD_H5_TEST (h5mkgrp_nested_p RESULT_CODE 0 RESULT_OPTION "-p" /one/two)
289+ ADD_H5_TEST (h5mkgrp_nested_lp RESULT_CODE 0 RESULT_OPTION "-lp" /one/two)
290+ ADD_H5_TEST (h5mkgrp_nested_mult_p RESULT_CODE 0 RESULT_OPTION "-p" /one/two /three/four)
291+ ADD_H5_TEST (h5mkgrp_nested_mult_lp RESULT_CODE 0 RESULT_OPTION "-lp" /one/two /three/four)
0 commit comments