diff options
author | jhendersonHDF <jhenderson@hdfgroup.org> | 2023-05-02 19:52:39 (GMT) |
---|---|---|
committer | Jordan Henderson <jhenderson@hdfgroup.org> | 2023-05-03 18:26:57 (GMT) |
commit | c75b4af1a2630ace445da1ec661191601583f79a (patch) | |
tree | a345b94dc09dd1ea1c38c1136a133b00939ba395 /test/API/CMakeLists.txt | |
parent | 75d64819b050bb30b2a2751d9ba55651f9a1af79 (diff) | |
download | hdf5-c75b4af1a2630ace445da1ec661191601583f79a.zip hdf5-c75b4af1a2630ace445da1ec661191601583f79a.tar.gz hdf5-c75b4af1a2630ace445da1ec661191601583f79a.tar.bz2 |
Add initial version of HDF5 API tests (#2877)
Diffstat (limited to 'test/API/CMakeLists.txt')
-rw-r--r-- | test/API/CMakeLists.txt | 314 |
1 files changed, 314 insertions, 0 deletions
diff --git a/test/API/CMakeLists.txt b/test/API/CMakeLists.txt new file mode 100644 index 0000000..d189d67 --- /dev/null +++ b/test/API/CMakeLists.txt @@ -0,0 +1,314 @@ +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +#------------------------------------------------------------------------------ +# Set module path +#------------------------------------------------------------------------------ +set(HDF5_TEST_API_CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${HDF5_TEST_API_CMAKE_MODULE_PATH}) + +# TODO: probably not necessary +#------------------------------------------------------------------------------ +# Setup CMake Environment +#------------------------------------------------------------------------------ +if (WIN32) + message("The HDF5 API test suite is currently not supported on this platform." FATAL_ERROR) +endif () + +#------------------------------------------------------------------------------ +# Setup testing configuration file +#------------------------------------------------------------------------------ +if (HDF5_TEST_PARALLEL) + set (HDF5_TEST_API_HAVE_PARALLEL 1) +endif () +if (HDF5_TEST_API_ENABLE_ASYNC) + set (H5_API_TEST_HAVE_ASYNC 1) +endif () + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/H5_api_test_config.h.in + ${HDF5_TEST_BINARY_DIR}/H5_api_test_config.h +) + +#------------------------------------------------------------------------------ +# Compile kwsys library and setup TestDriver +#------------------------------------------------------------------------------ +if (HDF5_TEST_API_ENABLE_DRIVER) + add_subdirectory (driver) +endif () + +#------------------------------------------------------------------------------ +# Setup for API tests +#------------------------------------------------------------------------------ + +# Ported HDF5 tests +set (HDF5_API_TESTS_EXTRA + testhdf5 +) + +# List of files generated by the HDF5 API tests which +# should be cleaned up in case the test failed to remove +# them +set (HDF5_API_TESTS_FILES + H5_api_test.h5 + H5_api_async_test.h5 + H5_api_async_test_0.h5 + H5_api_async_test_1.h5 + H5_api_async_test_2.h5 + H5_api_async_test_3.h5 + H5_api_async_test_4.h5 + test_file.h5 + invalid_params_file.h5 + excl_flag_file.h5 + overlapping_file.h5 + file_permission.h5 + flush_file.h5 + property_list_test_file1.h5 + property_list_test_file2.h5 + intent_test_file.h5 + file_obj_count1.h5 + file_obj_count2.h5 + file_mount.h5 + file_name_retrieval.h5 + filespace_info.h5 + test_file_id.h5 + test_close_degree.h5 + test_free_sections.h5 + file_size.h5 + file_info.h5 + double_group_open.h5 + ext_link_file.h5 + ext_link_file_2.h5 + ext_link_file_3.h5 + ext_link_file_4.h5 + ext_link_file_ping_pong_1.h5 + ext_link_file_ping_pong_2.h5 + ext_link_invalid_params_file.h5 + object_copy_test_file.h5 +) + +#----------------------------------------------------------------------------- +# Build the main API test executable +#----------------------------------------------------------------------------- +foreach (api_test ${HDF5_API_TESTS}) + set (HDF5_API_TEST_SRCS + ${HDF5_API_TEST_SRCS} + ${CMAKE_CURRENT_SOURCE_DIR}/H5_api_${api_test}_test.c + ) +endforeach () + +set (HDF5_API_TEST_SRCS + ${HDF5_API_TEST_SRCS} + ${CMAKE_CURRENT_SOURCE_DIR}/H5_api_test.c + ${HDF5_TEST_API_SRC_DIR}/H5_api_test_util.c +) + +add_executable (h5_api_test ${HDF5_API_TEST_SRCS}) +target_include_directories ( + h5_api_test + PRIVATE + "${HDF5_SRC_INCLUDE_DIRS}" + "${HDF5_TEST_SRC_DIR}" + "${HDF5_TEST_API_SRC_DIR}" + "${HDF5_SRC_BINARY_DIR}" + "${HDF5_TEST_BINARY_DIR}" +) +target_compile_options ( + h5_api_test + PRIVATE + "${HDF5_CMAKE_C_FLAGS}" +) +target_compile_definitions ( + h5_api_test + PRIVATE + $<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}> +) +if (NOT BUILD_SHARED_LIBS) + TARGET_C_PROPERTIES (h5_api_test STATIC) + target_link_libraries ( + h5_api_test + PRIVATE + ${HDF5_TEST_LIB_TARGET} + ) +else () + TARGET_C_PROPERTIES (h5_api_test SHARED) + target_link_libraries ( + h5_api_test + PRIVATE + ${HDF5_TEST_LIBSH_TARGET} + ) +endif () +set_target_properties ( + h5_api_test + PROPERTIES + FOLDER test/API +) +# Add Target to clang-format +if (HDF5_ENABLE_FORMATTERS) + clang_format (HDF5_TEST_h5_api_test_FORMAT h5_api_test) +endif () + +#----------------------------------------------------------------------------- +# Build the ported HDF5 test executables +#----------------------------------------------------------------------------- +foreach (api_test_extra ${HDF5_API_TESTS_EXTRA}) + unset (HDF5_API_TEST_EXTRA_SRCS) + + set (HDF5_API_TEST_EXTRA_SRCS + ${HDF5_API_TEST_EXTRA_SRCS} + ${CMAKE_CURRENT_SOURCE_DIR}/${api_test_extra}.c + ) + + if (${api_test_extra} STREQUAL "testhdf5") + set (HDF5_API_TEST_EXTRA_SRCS + ${HDF5_API_TEST_EXTRA_SRCS} + ${CMAKE_CURRENT_SOURCE_DIR}/tarray.c + ${CMAKE_CURRENT_SOURCE_DIR}/tattr.c + ${CMAKE_CURRENT_SOURCE_DIR}/tchecksum.c + ${CMAKE_CURRENT_SOURCE_DIR}/tconfig.c + ${CMAKE_CURRENT_SOURCE_DIR}/tcoords.c + ${CMAKE_CURRENT_SOURCE_DIR}/tfile.c + ${CMAKE_CURRENT_SOURCE_DIR}/tgenprop.c + ${CMAKE_CURRENT_SOURCE_DIR}/th5o.c + ${CMAKE_CURRENT_SOURCE_DIR}/th5s.c + ${CMAKE_CURRENT_SOURCE_DIR}/tid.c + ${CMAKE_CURRENT_SOURCE_DIR}/titerate.c + ${CMAKE_CURRENT_SOURCE_DIR}/tmisc.c + ${CMAKE_CURRENT_SOURCE_DIR}/trefer.c + ${CMAKE_CURRENT_SOURCE_DIR}/tselect.c + ${CMAKE_CURRENT_SOURCE_DIR}/ttime.c + ${CMAKE_CURRENT_SOURCE_DIR}/tunicode.c + ${CMAKE_CURRENT_SOURCE_DIR}/tvlstr.c + ${CMAKE_CURRENT_SOURCE_DIR}/tvltypes.c + ) + endif () + + add_executable (h5_api_test_${api_test_extra} ${HDF5_API_TEST_EXTRA_SRCS}) + target_include_directories ( + h5_api_test_${api_test_extra} + PRIVATE + "${HDF5_SRC_INCLUDE_DIRS}" + "${HDF5_TEST_SRC_DIR}" + "${HDF5_TEST_API_SRC_DIR}" + "${HDF5_SRC_BINARY_DIR}" + "${HDF5_TEST_BINARY_DIR}" + ) + target_compile_options ( + h5_api_test_${api_test_extra} + PRIVATE + "${HDF5_CMAKE_C_FLAGS}" + ) + target_compile_definitions ( + h5_api_test_${api_test_extra} + PRIVATE + $<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}> + ) + if (NOT BUILD_SHARED_LIBS) + TARGET_C_PROPERTIES (h5_api_test_${api_test_extra} STATIC) + target_link_libraries (h5_api_test_${api_test_extra} PRIVATE ${HDF5_TEST_LIB_TARGET}) + else () + TARGET_C_PROPERTIES (h5_api_test_${api_test_extra} SHARED) + target_link_libraries (h5_api_test_${api_test_extra} PRIVATE ${HDF5_TEST_LIBSH_TARGET}) + endif () + set_target_properties ( + h5_api_test_${api_test_extra} + PROPERTIES + FOLDER test/API + ) + # Add Target to clang-format + if (HDF5_ENABLE_FORMATTERS) + clang_format (HDF5_TEST_h5_api_test_${api_test_extra}_FORMAT h5_api_test_${api_test_extra}) + endif () +endforeach () + +#----------------------------------------------------------------------------- +# Add tests if HDF5 serial testing is enabled +#----------------------------------------------------------------------------- +if (HDF5_TEST_SERIAL) + if (HDF5_TEST_API_ENABLE_DRIVER) + if ("${HDF5_TEST_API_SERVER}" STREQUAL "") + message (FATAL_ERROR "Please set HDF5_TEST_API_SERVER to point to a server executable for the test driver program.") + endif () + + # Driver options + if (HDF5_TEST_API_SERVER_ALLOW_ERRORS) + set (HDF5_TEST_API_DRIVER_EXTRA_FLAGS --allow-server-errors) + endif () + if (HDF5_TEST_API_CLIENT_HELPER) + set (HDF5_TEST_API_DRIVER_EXTRA_FLAGS ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS} + --client-helper ${HDF5_TEST_API_CLIENT_HELPER} + ) + endif () + if (HDF5_TEST_API_CLIENT_INIT) + set (HDF5_TEST_API_DRIVER_EXTRA_FLAGS ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS} + --client-init ${HDF5_TEST_API_CLIENT_INIT} + ) + endif () + + set(last_api_test "") + foreach (api_test ${HDF5_API_TESTS}) + add_test ( + NAME "h5_api_test_${api_test}" + COMMAND $<TARGET_FILE:h5_api_test_driver> + --server ${HDF5_TEST_API_SERVER} + --client $<TARGET_FILE:h5_api_test> "${api_test}" + --serial + ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS} + ) + + set_tests_properties("h5_api_test_${api_test}" PROPERTIES DEPENDS "${last_api_test}") + + set(last_api_test "h5_api_test_${api_test}") + endforeach () + + foreach (hdf5_test ${HDF5_API_TESTS_EXTRA}) + add_test ( + NAME "h5_api_test_${hdf5_test}" + COMMAND $<TARGET_FILE:h5_api_test_driver> + --server ${HDF5_TEST_API_SERVER} + --client $<TARGET_FILE:h5_api_test_${hdf5_test}> + --serial + ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS} + ) + endforeach () + + # Hook external tests to same test suite + foreach (ext_api_test ${HDF5_API_EXT_SERIAL_TESTS}) + add_test ( + NAME "h5_api_ext_test_${ext_api_test}" + COMMAND $<TARGET_FILE:h5_api_test_driver> + --server ${HDF5_TEST_API_SERVER} + --client $<TARGET_FILE:${ext_api_test}> + --serial + ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS} + ) + endforeach () + else () + set(last_api_test "") + foreach (api_test ${HDF5_API_TESTS}) + add_test ( + NAME "h5_api_test_${api_test}" + COMMAND $<TARGET_FILE:h5_api_test> "${api_test}" + ) + + set_tests_properties("h5_api_test_${api_test}" PROPERTIES DEPENDS "${last_api_test}") + + set(last_api_test "h5_api_test_${api_test}") + endforeach () + + foreach (hdf5_test ${HDF5_API_TESTS_EXTRA}) + add_test ( + NAME "h5_api_test_${hdf5_test}" + COMMAND $<TARGET_FILE:h5_api_test_${hdf5_test}> + ) + endforeach () + endif () +endif () |