Skip to content

Commit 6ea1f50

Browse files
authored
Generate VOL tests for h5mkgrp (#5772)
* Rework h5mkgrp ADD_H5_TEST * Generate VOL tests for h5mkgrp * Fix h5ls-verification test not being skipped with regex
1 parent a8ceb1d commit 6ea1f50

File tree

1 file changed

+157
-49
lines changed

1 file changed

+157
-49
lines changed

tools/test/misc/CMakeTestsMkgrp.cmake

Lines changed: 157 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -48,57 +48,165 @@ add_custom_target(h5mkgrp_files ALL COMMENT "Copying files needed by h5mkgrp tes
4848

4949
configure_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
102210
endmacro ()
103211

104212
macro (ADD_H5_CMP resultfile resultcode)
@@ -165,19 +273,19 @@ ADD_H5_CMP (h5mkgrp_help 0 "-h")
165273
ADD_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

Comments
 (0)