summaryrefslogtreecommitdiffstats
path: root/tools/libtest
diff options
context:
space:
mode:
authorLarry Knox <lrknox@hdfgroup.org>2020-10-16 22:47:27 (GMT)
committerLarry Knox <lrknox@hdfgroup.org>2020-10-16 22:47:27 (GMT)
commitdb30c2da68ece4a155e9e50c28ec16d6057509b2 (patch)
tree1d36f673c36dfee71c266bba39511da21ecc782e /tools/libtest
parent5b9cf732caab9daa6ed1e00f2df4f5a792340196 (diff)
parent2e2b87d1cbdee3b919e6e5cba6c5ecd1b9434434 (diff)
downloadhdf5-db30c2da68ece4a155e9e50c28ec16d6057509b2.zip
hdf5-db30c2da68ece4a155e9e50c28ec16d6057509b2.tar.gz
hdf5-db30c2da68ece4a155e9e50c28ec16d6057509b2.tar.bz2
Merge HDF5 1.10.7 release files into 1.10/masterhdf5-1_10_7
Diffstat (limited to 'tools/libtest')
-rw-r--r--tools/libtest/CMakeLists.txt7
-rw-r--r--tools/libtest/Makefile.am13
-rw-r--r--tools/libtest/Makefile.in180
-rw-r--r--tools/libtest/h5tools_test_utils.c1615
4 files changed, 726 insertions, 1089 deletions
diff --git a/tools/libtest/CMakeLists.txt b/tools/libtest/CMakeLists.txt
index f3d28da..3e0f671 100644
--- a/tools/libtest/CMakeLists.txt
+++ b/tools/libtest/CMakeLists.txt
@@ -1,10 +1,11 @@
-cmake_minimum_required (VERSION 3.10)
+cmake_minimum_required (VERSION 3.12)
project (HDF5_TOOLS_LIBTEST C)
#-----------------------------------------------------------------------------
# Add the h5tools_utils test executables
#-----------------------------------------------------------------------------
add_executable (h5tools_test_utils ${HDF5_TOOLS_LIBTEST_SOURCE_DIR}/h5tools_test_utils.c)
+target_compile_options(h5tools_test_utils PRIVATE "${HDF5_CMAKE_C_FLAGS}")
target_include_directories(h5tools_test_utils PRIVATE "${HDF5_TOOLS_DIR}/lib;${HDF5_SRC_DIR};${HDF5_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT ONLY_SHARED_LIBS)
TARGET_C_PROPERTIES (h5tools_test_utils STATIC)
@@ -15,4 +16,6 @@ else ()
endif ()
set_target_properties (h5tools_test_utils PROPERTIES FOLDER tools)
-include (CMakeTests.cmake)
+if (HDF5_TEST_TOOLS AND HDF5_TEST_SERIAL)
+ include (CMakeTests.cmake)
+endif ()
diff --git a/tools/libtest/Makefile.am b/tools/libtest/Makefile.am
index a93e25d..0dc18e9 100644
--- a/tools/libtest/Makefile.am
+++ b/tools/libtest/Makefile.am
@@ -20,15 +20,14 @@
include $(top_srcdir)/config/commence.am
# Include src and tools/lib directories
-AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/tools/lib
-
-# All programs depend on the hdf5 and h5tools libraries
-LDADD=$(LIBH5TOOLS) $(LIBHDF5)
+AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/test -I$(top_srcdir)/tools/lib
+#test programs
+TEST_PROG=h5tools_test_utils
-# main target
-bin_PROGRAMS=h5tools_test_utils
-# check_PROGRAMS=$(TEST_PROG)
+check_PROGRAMS=$(TEST_PROG)
+# All programs depend on the hdf5 and h5tools libraries
+LDADD=$(LIBH5TOOLS) $(LIBH5TEST) $(LIBHDF5)
include $(top_srcdir)/config/conclude.am
diff --git a/tools/libtest/Makefile.in b/tools/libtest/Makefile.in
index 8ac69a6..3798b7c 100644
--- a/tools/libtest/Makefile.in
+++ b/tools/libtest/Makefile.in
@@ -29,7 +29,6 @@
#
# HDF5 Library Makefile(.in)
#
-
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@@ -104,8 +103,8 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-bin_PROGRAMS = h5tools_test_utils$(EXEEXT)
-TESTS =
+check_PROGRAMS = $(am__EXEEXT_1)
+TESTS = $(am__EXEEXT_1)
subdir = tools/libtest
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
@@ -134,12 +133,12 @@ CONFIG_HEADER = $(top_builddir)/src/H5config.h \
$(top_builddir)/fortran/src/H5config_f.inc
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)"
-PROGRAMS = $(bin_PROGRAMS)
+am__EXEEXT_1 = h5tools_test_utils$(EXEEXT)
h5tools_test_utils_SOURCES = h5tools_test_utils.c
h5tools_test_utils_OBJECTS = h5tools_test_utils.$(OBJEXT)
h5tools_test_utils_LDADD = $(LDADD)
-h5tools_test_utils_DEPENDENCIES = $(LIBH5TOOLS) $(LIBHDF5)
+h5tools_test_utils_DEPENDENCIES = $(LIBH5TOOLS) $(LIBH5TEST) \
+ $(LIBHDF5)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -389,11 +388,8 @@ am__set_TESTS_bases = \
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
TEST_SUITE_LOG = test-suite.log
-am__test_logs1 = $(TESTS:=.log)
-am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
-TEST_LOGS = $(am__test_logs2:.sh.log=.log)
-SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
-SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
+LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
am__set_b = \
case '$@' in \
*/*) \
@@ -404,6 +400,11 @@ am__set_b = \
*) \
b='$*';; \
esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.sh.log=.log)
+SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
+SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/bin/depcomp \
$(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \
$(top_srcdir)/config/conclude.am
@@ -414,15 +415,15 @@ AMTAR = @AMTAR@
# H5_CFLAGS holds flags that should be used when building hdf5,
# but which should not be exported to h5cc for building other programs.
-# AM_CFLAGS is an automake construct which should be used by Makefiles
+# AM_CFLAGS is an automake construct which should be used by Makefiles
# instead of CFLAGS, as CFLAGS is reserved solely for the user to define.
# This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well.
-AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@
+AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@ @H5_ECFLAGS@
# Include src and tools/lib directories
AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
- -I$(top_srcdir)/tools/lib
-AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
+ -I$(top_srcdir)/test -I$(top_srcdir)/tools/lib
+AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@ @H5_ECXXFLAGS@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
AM_JAVACFLAGS = @AM_JAVACFLAGS@
@@ -442,6 +443,7 @@ CC = @CC@
CCDEPMODE = @CCDEPMODE@
CC_VERSION = @CC_VERSION@
CFLAGS = @CFLAGS@
+CLANG_SANITIZE_CHECKS = @CLANG_SANITIZE_CHECKS@
CODESTACK = @CODESTACK@
CONFIG_DATE = @CONFIG_DATE@
CONFIG_MODE = @CONFIG_MODE@
@@ -458,6 +460,7 @@ DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DESIRED_FILE_LOCKING = @DESIRED_FILE_LOCKING@
DEV_WARNINGS = @DEV_WARNINGS@
DIRECT_VFD = @DIRECT_VFD@
DLLTOOL = @DLLTOOL@
@@ -494,8 +497,11 @@ H5_CFLAGS = @H5_CFLAGS@
H5_CLASSPATH = @H5_CLASSPATH@
H5_CPPFLAGS = @H5_CPPFLAGS@
H5_CXXFLAGS = @H5_CXXFLAGS@
+H5_ECFLAGS = @H5_ECFLAGS@
+H5_ECXXFLAGS = @H5_ECXXFLAGS@
H5_FCFLAGS = @H5_FCFLAGS@
H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_IS_DARWIN = @H5_IS_DARWIN@
H5_JAVACFLAGS = @H5_JAVACFLAGS@
H5_JAVAFLAGS = @H5_JAVAFLAGS@
H5_JNIFLAGS = @H5_JNIFLAGS@
@@ -518,6 +524,7 @@ HL = @HL@
HL_FOR = @HL_FOR@
HSIZE_T = @HSIZE_T@
HSSIZE_T = @HSSIZE_T@
+IGNORE_DISABLED_FILE_LOCKS = @IGNORE_DISABLED_FILE_LOCKS@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -554,6 +561,7 @@ MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+MIRROR_VFD = @MIRROR_VFD@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
NM = @NM@
@@ -613,6 +621,7 @@ TIME = @TIME@
TR = @TR@
TRACE_API = @TRACE_API@
UNAME_INFO = @UNAME_INFO@
+USE_FILE_LOCKING = @USE_FILE_LOCKING@
USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
USE_FILTER_SZIP = @USE_FILTER_SZIP@
USINGMEMCHECKER = @USINGMEMCHECKER@
@@ -648,6 +657,7 @@ docdir = $(exec_prefix)/doc
dvidir = @dvidir@
enable_shared = @enable_shared@
enable_static = @enable_static@
+examplesdir = @examplesdir@
exec_prefix = @exec_prefix@
fortran_linux_linker_option = @fortran_linux_linker_option@
host = @host@
@@ -704,15 +714,15 @@ LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la
-# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below
-# has been removed. According to the official description of DESTDIR by Gnu at
-# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is
-# prepended to the normal and complete install path that it precedes for the
-# purpose of installing in a temporary directory which is useful for building
-# rpms and other packages. The '/' after ${DESTDIR} will be followed by another
-# '/' at the beginning of the normal install path. When DESTDIR is empty the
-# path then begins with '//', which is incorrect and causes problems at least for
-# Cygwin.
+# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below
+# has been removed. According to the official description of DESTDIR by Gnu at
+# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is
+# prepended to the normal and complete install path that it precedes for the
+# purpose of installing in a temporary directory which is useful for building
+# rpms and other packages. The '/' after ${DESTDIR} will be followed by another
+# '/' at the beginning of the normal install path. When DESTDIR is empty the
+# path then begins with '//', which is incorrect and causes problems at least for
+# Cygwin.
# Scripts used to build examples
# If only shared libraries have been installed, have h5cc build examples with
@@ -733,8 +743,11 @@ TRACE = perl $(top_srcdir)/bin/trace
# *.clog and *.clog2 are from the MPE option.
CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
+#test programs
+TEST_PROG = h5tools_test_utils
+
# All programs depend on the hdf5 and h5tools libraries
-LDADD = $(LIBH5TOOLS) $(LIBHDF5)
+LDADD = $(LIBH5TOOLS) $(LIBH5TEST) $(LIBHDF5)
# Automake needs to be taught how to build lib, progs and tests targets.
# These will be filled in automatically for the most part (e.g.,
@@ -747,7 +760,7 @@ LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \
PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \
$(EXTRA_PROG)
-chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST)
+chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST)
TEST_EXTENSIONS = .sh
SH_LOG_COMPILER = $(SHELL)
AM_SH_LOG_FLAGS =
@@ -790,49 +803,9 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
-install-binPROGRAMS: $(bin_PROGRAMS)
- @$(NORMAL_INSTALL)
- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
- if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
- fi; \
- for p in $$list; do echo "$$p $$p"; done | \
- sed 's/$(EXEEXT)$$//' | \
- while read p p1; do if test -f $$p \
- || test -f $$p1 \
- ; then echo "$$p"; echo "$$p"; else :; fi; \
- done | \
- sed -e 'p;s,.*/,,;n;h' \
- -e 's|.*|.|' \
- -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
- sed 'N;N;N;s,\n, ,g' | \
- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
- if ($$2 == $$4) files[d] = files[d] " " $$1; \
- else { print "f", $$3 "/" $$4, $$1; } } \
- END { for (d in files) print "f", d, files[d] }' | \
- while read type dir files; do \
- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
- test -z "$$files" || { \
- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
- } \
- ; done
-
-uninstall-binPROGRAMS:
- @$(NORMAL_UNINSTALL)
- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
- files=`for p in $$list; do echo "$$p"; done | \
- sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
- -e 's/$$/$(EXEEXT)/' \
- `; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(bindir)" && rm -f $$files
-
-clean-binPROGRAMS:
- @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
@@ -1053,7 +1026,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
echo "$$col$$br$$std"; \
fi; \
$$success || exit 1
-recheck: all
+recheck: all $(check_PROGRAMS)
@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
@set +e; $(am__set_TESTS_bases); \
bases=`for i in $$bases; do echo $$i; done \
@@ -1064,6 +1037,13 @@ recheck: all
am__force_recheck=am--force-recheck \
TEST_LOGS="$$log_list"; \
exit $$?
+h5tools_test_utils.log: h5tools_test_utils$(EXEEXT)
+ @p='h5tools_test_utils$(EXEEXT)'; \
+ b='h5tools_test_utils'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
.sh.log:
@p='$<'; \
$(am__set_b); \
@@ -1110,13 +1090,11 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
-all-am: Makefile $(PROGRAMS) all-local
+all-am: Makefile all-local
installdirs:
- for dir in "$(DESTDIR)$(bindir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@@ -1152,7 +1130,8 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
@@ -1178,7 +1157,7 @@ install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am: install-binPROGRAMS
+install-exec-am:
install-html: install-html-am
@@ -1218,24 +1197,23 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-binPROGRAMS
+uninstall-am:
.MAKE: check-am install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-TESTS \
- check-am clean clean-binPROGRAMS clean-generic clean-libtool \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
cscopelist-am ctags ctags-am distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
- install-binPROGRAMS install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
- mostlyclean-local pdf pdf-am ps ps-am recheck tags tags-am \
- uninstall uninstall-am uninstall-binPROGRAMS
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \
+ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
@@ -1344,28 +1322,37 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_:
echo "============================" > $${log}; \
fi; \
if test "X$(FORTRAN_API)" = "Xyes"; then \
- echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \
if test -n "$(REALTIMEOUTPUT)"; then \
- echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" | tee -a $${log}; \
+ echo "Fortran API: Test log for $${tname} $(TEST_FLAGS)" | tee -a $${log}; \
else \
- echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+ echo "Fortran API: Test log for $${tname} $(TEST_FLAGS)" >> $${log}; \
fi; \
elif test "X$(CXX_API)" = "Xyes"; then \
- echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+ echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \
if test -n "$(REALTIMEOUTPUT)"; then \
- echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" | tee -a $${log};\
+ echo "C++ API: Test log for $${tname} $(TEST_FLAGS)" | tee -a $${log};\
else \
- echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\
+ echo "C++ API: Test log for $${tname} $(TEST_FLAGS)" >> $${log};\
fi; \
else \
- echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+ echo "Testing: $${tname} $(TEST_FLAGS)"; \
if test -n "$(REALTIMEOUTPUT)"; then \
- echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" | tee -a $${log}; \
+ echo "Test log for $${tname} $(TEST_FLAGS)" | tee -a $${log}; \
else \
- echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+ echo "Test log for $${tname} $(TEST_FLAGS)" >> $${log}; \
fi; \
fi; \
if test -n "$(REALTIMEOUTPUT)"; then \
+ if test -n "$(HDF5_DRIVER)"; then \
+ echo "Virtual file driver (VFD): $(HDF5_DRIVER)" | tee -a $${log}; \
+ fi; \
+ else \
+ if test -n "$(HDF5_DRIVER)"; then \
+ echo "Virtual file driver (VFD): $(HDF5_DRIVER)" >> $${log}; \
+ fi; \
+ fi; \
+ if test -n "$(REALTIMEOUTPUT)"; then \
echo "============================" | tee -a $${log}; \
else \
echo "============================" >> $${log}; \
@@ -1479,7 +1466,6 @@ check-vfd: $(LIB) $(PROGS) $(chk_TESTS)
HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check || exit 1; \
fi; \
done
-# check_PROGRAMS=$(TEST_PROG)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/tools/libtest/h5tools_test_utils.c b/tools/libtest/h5tools_test_utils.c
index 120f803..dbc22d2 100644
--- a/tools/libtest/h5tools_test_utils.c
+++ b/tools/libtest/h5tools_test_utils.c
@@ -16,663 +16,438 @@
* Jacob Smith 2017-11-10
*/
+#include "h5tools.h"
#include "h5tools_utils.h"
#include "h5test.h"
-#define UTIL_TEST_DEBUG 0
-
-#ifndef __js_test__
-
-#define __js_test__ 1L
-
-/*****************************************************************************
- *
- * FILE-LOCAL TESTING MACROS
- *
- * Purpose:
- *
- * 1. Upon test failure, goto-jump to single-location teardown in test
- * function. E.g., `error:` (consistency with HDF corpus) or
- * `failed:` (reflects purpose).
- * >>> using "error", in part because `H5E_BEGIN_TRY` expects it.
- * 2. Increase clarity and reduce overhead found with `TEST_ERROR`.
- * e.g., "if(somefunction(arg, arg2) < 0) TEST_ERROR:"
- * requires reading of entire line to know whether this if/call is
- * part of the test setup, test operation, or a test unto itself.
- * 3. Provide testing macros with optional user-supplied failure message;
- * if not supplied (NULL), generate comparison output in the spirit of
- * test-driven development. E.g., "expected 5 but was -3"
- * User messages clarify test's purpose in code, encouraging description
- * without relying on comments.
- * 4. Configurable expected-actual order in generated comparison strings.
- * Some prefer `VERIFY(expected, actual)`, others
- * `VERIFY(actual, expected)`. Provide preprocessor ifdef switch
- * to satifsy both parties, assuming one paradigm per test file.
- * (One could #undef and redefine the flag through the file as desired,
- * but _why_.)
- *
- * Provided as courtesy, per consideration for inclusion in the library
- * proper.
- *
- * Macros:
- *
- * JSVERIFY_EXP_ACT - ifdef flag, configures comparison order
- * FAIL_IF() - check condition
- * FAIL_UNLESS() - check _not_ condition
- * JSVERIFY() - long-int equality check; prints reason/comparison
- * JSVERIFY_NOT() - long-int inequality check; prints
- * JSVERIFY_STR() - string equality check; prints
- *
- * Programmer: Jacob Smith
- * 2017-10-24
- *
- *****************************************************************************/
-
-
-/*----------------------------------------------------------------------------
- *
- * ifdef flag: JSVERIFY_EXP_ACT
- *
- * JSVERIFY macros accept arguments as (EXPECTED, ACTUAL[, reason])
- * default, if this is undefined, is (ACTUAL, EXPECTED[, reason])
- *
- *----------------------------------------------------------------------------
- */
-#define JSVERIFY_EXP_ACT 1L
-
-
-/*----------------------------------------------------------------------------
- *
- * Macro: JSFAILED_AT()
- *
- * Purpose:
- *
- * Preface a test failure by printing "*FAILED*" and location to stdout
- * Similar to `H5_FAILED(); AT();` from h5test.h
- *
- * *FAILED* at somefile.c:12 in function_name()...
- *
- * Programmer: Jacob Smith
- * 2017-10-24
- *
- *----------------------------------------------------------------------------
- */
-#define JSFAILED_AT() { \
- HDprintf("*FAILED* at %s:%d in %s()...\n", __FILE__, __LINE__, FUNC); \
-}
-
-
-/*----------------------------------------------------------------------------
- *
- * Macro: FAIL_IF()
- *
- * Purpose:
- *
- * Make tests more accessible and less cluttered than
- * `if (thing == otherthing()) TEST_ERROR`
- * paradigm.
- *
- * The following lines are roughly equivalent:
- *
- * `if (myfunc() < 0) TEST_ERROR;` (as seen elsewhere in HDF tests)
- * `FAIL_IF(myfunc() < 0)`
- *
- * Prints a generic "FAILED AT" line to stdout and jumps to `error`,
- * similar to `TEST_ERROR` in h5test.h
- *
- * Programmer: Jacob Smith
- * 2017-10-23
- *
- *----------------------------------------------------------------------------
- */
-#define FAIL_IF(condition) \
-if (condition) { \
- JSFAILED_AT() \
- goto error; \
-}
-
-
-/*----------------------------------------------------------------------------
- *
- * Macro: FAIL_UNLESS()
- *
- * Purpose:
- *
- * TEST_ERROR wrapper to reduce cognitive overhead from "negative tests",
- * e.g., "a != b".
- *
- * Opposite of FAIL_IF; fails if the given condition is _not_ true.
- *
- * `FAIL_IF( 5 != my_op() )`
- * is equivalent to
- * `FAIL_UNLESS( 5 == my_op() )`
- * However, `JSVERIFY(5, my_op(), "bad return")` may be even clearer.
- * (see JSVERIFY)
- *
- * Programmer: Jacob Smith
- * 2017-10-24
- *
- *----------------------------------------------------------------------------
- */
-#define FAIL_UNLESS(condition) \
-if (!(condition)) { \
- JSFAILED_AT() \
- goto error; \
-}
-
-
-/*----------------------------------------------------------------------------
- *
- * Macro: JSERR_LONG()
- *
- * Purpose:
- *
- * Print an failure message for long-int arguments.
- * ERROR-AT printed first.
- * If `reason` is given, it is printed on own line and newlined after
- * else, prints "expected/actual" aligned on own lines.
- *
- * *FAILED* at myfile.c:488 in somefunc()...
- * forest must be made of trees.
- *
- * or
- *
- * *FAILED* at myfile.c:488 in somefunc()...
- * ! Expected 425
- * ! Actual 3
- *
- * Programmer: Jacob Smith
- * 2017-10-24
- *
- *----------------------------------------------------------------------------
- */
-#define JSERR_LONG(expected, actual, reason) { \
- JSFAILED_AT() \
- if (reason!= NULL) { \
- HDprintf("%s\n", (reason)); \
- } else { \
- HDprintf(" ! Expected %ld\n ! Actual %ld\n", \
- (long)(expected), (long)(actual)); \
- } \
-}
-
-
-/*----------------------------------------------------------------------------
- *
- * Macro: JSERR_STR()
- *
- * Purpose:
- *
- * Print an failure message for string arguments.
- * ERROR-AT printed first.
- * If `reason` is given, it is printed on own line and newlined after
- * else, prints "expected/actual" aligned on own lines.
- *
- * *FAILED* at myfile.c:421 in myfunc()...
- * Blue and Red strings don't match!
- *
- * or
- *
- * *FAILED* at myfile.c:421 in myfunc()...
- * !!! Expected:
- * this is my expected
- * string
- * !!! Actual:
- * not what I expected at all
- *
- * Programmer: Jacob Smith
- * 2017-10-24
- *
- *----------------------------------------------------------------------------
- */
-#define JSERR_STR(expected, actual, reason) { \
- JSFAILED_AT() \
- if ((reason) != NULL) { \
- HDprintf("%s\n", (reason)); \
- } else { \
- HDprintf("!!! Expected:\n%s\n!!!Actual:\n%s\n", \
- (expected), (actual)); \
- } \
-}
-
-#ifdef JSVERIFY_EXP_ACT
-
-
-/*----------------------------------------------------------------------------
- *
- * Macro: JSVERIFY()
- *
- * Purpose:
- *
- * Verify that two long integers are equal.
- * If unequal, print failure message
- * (with `reason`, if not NULL; expected/actual if NULL)
- * and jump to `error` at end of function
- *
- * Programmer: Jacob Smith
- * 2017-10-24
- *
- *----------------------------------------------------------------------------
- */
-#define JSVERIFY(expected, actual, reason) \
-if ((long)(actual) != (long)(expected)) { \
- JSERR_LONG((expected), (actual), (reason)) \
- goto error; \
-} /* JSVERIFY */
-
-
-/*----------------------------------------------------------------------------
- *
- * Macro: JSVERIFY_NOT()
- *
- * Purpose:
- *
- * Verify that two long integers are _not_ equal.
- * If equal, print failure message
- * (with `reason`, if not NULL; expected/actual if NULL)
- * and jump to `error` at end of function
- *
- * Programmer: Jacob Smith
- * 2017-10-24
- *
- *----------------------------------------------------------------------------
- */
-#define JSVERIFY_NOT(expected, actual, reason) \
-if ((long)(actual) == (long)(expected)) { \
- JSERR_LONG((expected), (actual), (reason)) \
- goto error; \
-} /* JSVERIFY_NOT */
-
-
-/*----------------------------------------------------------------------------
- *
- * Macro: JSVERIFY_STR()
- *
- * Purpose:
- *
- * Verify that two strings are equal.
- * If unequal, print failure message
- * (with `reason`, if not NULL; expected/actual if NULL)
- * and jump to `error` at end of function
- *
- * Programmer: Jacob Smith
- * 2017-10-24
- *
- *----------------------------------------------------------------------------
- */
-#define JSVERIFY_STR(expected, actual, reason) \
-if (HDstrcmp((actual), (expected)) != 0) { \
- JSERR_STR((expected), (actual), (reason)); \
- goto error; \
-} /* JSVERIFY_STR */
-
-
-#else /* JSVERIFY_EXP_ACT not defined */
- /* Repeats macros above, but with actual/expected parameters reversed. */
-
-
-/*----------------------------------------------------------------------------
- * Macro: JSVERIFY()
- * See: JSVERIFY documentation above.
- * Programmer: Jacob Smith
- * 2017-10-14
- *----------------------------------------------------------------------------
- */
-#define JSVERIFY(actual, expected, reason) \
-if ((long)(actual) != (long)(expected)) { \
- JSERR_LONG((expected), (actual), (reason)); \
- goto error; \
-} /* JSVERIFY */
-
-
-/*----------------------------------------------------------------------------
- * Macro: JSVERIFY_NOT()
- * See: JSVERIFY_NOT documentation above.
- * Programmer: Jacob Smith
- * 2017-10-14
- *----------------------------------------------------------------------------
- */
-#define JSVERIFY_NOT(actual, expected, reason) \
-if ((long)(actual) == (long)(expected)) { \
- JSERR_LONG((expected), (actual), (reason)) \
- goto error; \
-} /* JSVERIFY_NOT */
-
+/* Selector for which test cases to run */
+typedef enum vfd_tests_e {
+ VFD_TESTS_COMMON,
+ VFD_TESTS_ROS3,
+ VFD_TESTS_HDFS
+} vfd_tests_e;
+
+/* Whether we pass in H5I_INVALID_HID, H5P_DEFAULT, or a created fapl */
+typedef enum fapl_choice_e {
+ FAPL_CHOICE_INVALID,
+ FAPL_CHOICE_DEFAULT,
+ FAPL_CHOICE_CREATE
+} fapl_choice_e;
+
+/* Test case data */
+typedef struct fapl_testcase_t {
+ const char error_message[88];
+ herr_t expected_result;
+ fapl_choice_e fapl_choice;
+ const char vfd_name[12];
+ void *fa;
+} fapl_testcase_t;
+
+/* Generic "incorrect" VFD struct */
+typedef struct other_fa_t {
+ int a;
+ int b;
+ int c;
+} other_fa_t;
+
+other_fa_t wrong_fa_g = {0x432, 0xf82, 0x9093};
+
+/******************************/
+/* Common test configurations */
+/******************************/
+
+fapl_testcase_t common_cases_g[] = {
+ { "(common) H5I_INVALID_HID + NULL VFD struct (UNEXPECTED SUCCESS)",
+ FAIL,
+ FAPL_CHOICE_INVALID,
+ "",
+ NULL,
+ },
+ { "(common) H5I_INVALID_HID + inappropriate VFD struct (UNEXPECTED SUCCESS)",
+ FAIL,
+ FAPL_CHOICE_INVALID,
+ "",
+ &wrong_fa_g,
+ },
+ { "(common) H5P_DEFAULT + NULL VFD struct (FAILED)",
+ SUCCEED,
+ FAPL_CHOICE_DEFAULT,
+ "",
+ NULL,
+ },
+ { "(common) H5P_DEFAULT + ignored VFD struct (FAILED)",
+ SUCCEED,
+ FAPL_CHOICE_DEFAULT,
+ "",
+ &wrong_fa_g,
+ },
+ { "(common) H5Pcreate() + NULL VFD struct (FAILED)",
+ SUCCEED,
+ FAPL_CHOICE_CREATE,
+ "",
+ NULL,
+ },
+ { "(common) H5Pcreate() + ignored VFD struct (FAILED)",
+ SUCCEED,
+ FAPL_CHOICE_CREATE,
+ "",
+ &wrong_fa_g,
+ },
+ { "(common) H5P_DEFAULT + non-VFD name + NULL VFD struct (UNEXPECTED SUCCESS)",
+ FAIL,
+ FAPL_CHOICE_DEFAULT,
+ "unknown",
+ NULL,
+ }
+};
-/*----------------------------------------------------------------------------
- * Macro: JSVERIFY_STR()
- * See: JSVERIFY_STR documentation above.
- * Programmer: Jacob Smith
- * 2017-10-14
- *----------------------------------------------------------------------------
- */
-#define JSVERIFY_STR(actual, expected, reason) \
-if (HDstrcmp((actual), (expected)) != 0) { \
- JSERR_STR((expected), (actual), (reason)); \
- goto error; \
-} /* JSVERIFY_STR */
+#ifdef H5_HAVE_ROS3_VFD
-#endif /* ifdef/else JSVERIFY_EXP_ACT */
+/****************************/
+/* ROS3 test configurations */
+/****************************/
+
+H5FD_ros3_fapl_t ros3_anon_fa_g = {1, FALSE, "", "", ""};
+
+fapl_testcase_t ros3_cases_g[] = {
+ { "(ROS3) H5I_INVALID_HID + NULL VFD struct (UNEXPECTED SUCCESS)",
+ FAIL,
+ FAPL_CHOICE_INVALID,
+ "ros3",
+ NULL,
+ },
+ { "(ROS3) H5I_INVALID_HID + valid VFD struct (UNEXPECTED SUCCESS)",
+ FAIL,
+ FAPL_CHOICE_INVALID,
+ "ros3",
+ &ros3_anon_fa_g,
+ },
+ { "(ROS3) H5Pcreate() + NULL VFD struct (UNEXPECTED SUCCESS)",
+ FAIL,
+ FAPL_CHOICE_CREATE,
+ "ros3",
+ NULL,
+ },
+ { "(ROS3) H5Pcreate() + valid VFD struct (FAILED)",
+ SUCCEED,
+ FAPL_CHOICE_CREATE,
+ "ros3",
+ &ros3_anon_fa_g,
+ },
+ { "(ROS3) H5P_DEFAULT + valid VFD struct (FAILED)",
+ SUCCEED,
+ FAPL_CHOICE_DEFAULT,
+ "ros3",
+ &ros3_anon_fa_g,
+ }
+};
+#endif /* H5_HAVE_ROS3_VFD */
-#endif /* __js_test__ */
+#ifdef H5_HAVE_LIBHDFS
-/* if > 0, be very verbose when performing tests */
-#define H5TOOLS_UTILS_TEST_DEBUG 0
+/****************************/
+/* HDFS test configurations */
+/****************************/
+
+H5FD_hdfs_fapl_t hdfs_fa_g = {
+ 1, /* fapl version */
+ "", /* namenode name */
+ 0, /* namenode port */
+ "", /* kerberos ticket cache */
+ "", /* user name */
+ 2048, /* stream buffer size */
+};
+
+fapl_testcase_t hdfs_cases_g[] = {
+ { "(HDFS) H5I_INVALID_HID + NULL VFD struct (UNEXPECTED SUCCESS)",
+ FAIL,
+ FAPL_CHOICE_INVALID,
+ "hdfs",
+ NULL,
+ },
+ { "(HDFS) H5I_INVALID_HID + valid VFD struct (UNEXPECTED SUCCESS)",
+ FAIL,
+ FAPL_CHOICE_INVALID,
+ "hdfs",
+ &hdfs_fa_g,
+ },
+ { "(HDFS) H5Pcreate() + NULL VFD struct (UNEXPECTED SUCCESS)",
+ FAIL,
+ FAPL_CHOICE_CREATE,
+ "hdfs",
+ NULL,
+ },
+ { "(HDFS) H5Pcreate() + valid VFD struct (FAILED)",
+ SUCCEED,
+ FAPL_CHOICE_CREATE,
+ "hdfs",
+ &hdfs_fa_g,
+ },
+ { "(HDFS) H5P_DEFAULT + valid VFD struct (FAILED)",
+ SUCCEED,
+ FAPL_CHOICE_DEFAULT,
+ "hdfs",
+ &hdfs_fa_g,
+ }
+};
+#endif /* H5_HAVE_LIBHDFS */
-/******************/
-/* TEST FUNCTIONS */
-/******************/
+typedef struct tuple_testcase_t {
+ const char *test_msg; /* info about test case */
+ const char *in_str; /* input string */
+ int sep; /* separator "character" */
+ herr_t expected_result; /* expected SUCCEED / FAIL */
+ unsigned exp_nelems; /* expected number of elements */
+ /* (no more than 7!) */
+ const char *exp_elems[7]; /* list of elements (no more than 7!) */
+} tuple_testcase_t;
+
+tuple_testcase_t tuple_cases_g[] = {
+ { "bad start",
+ "words(before)",
+ ';',
+ FAIL,
+ 0,
+ {NULL},
+ },
+ { "tuple not closed",
+ "(not ok",
+ ',',
+ FAIL,
+ 0,
+ {NULL},
+ },
+ { "empty tuple",
+ "()",
+ '-',
+ SUCCEED,
+ 1,
+ {""},
+ },
+ { "no separator",
+ "(stuff keeps on going)",
+ ',',
+ SUCCEED,
+ 1,
+ {"stuff keeps on going"},
+ },
+ { "4-ple, escaped seperator",
+ "(elem0,elem1,el\\,em2,elem3)", /* "el\,em" */
+ ',',
+ SUCCEED,
+ 4,
+ {"elem0", "elem1", "el,em2", "elem3"},
+ },
+ { "5-ple, escaped escaped separator",
+ "(elem0,elem1,el\\\\,em2,elem3)",
+ ',',
+ SUCCEED,
+ 5,
+ {"elem0", "elem1", "el\\", "em2", "elem3"},
+ },
+ { "escaped non-comma separator",
+ "(5-2-7-2\\-6-2)",
+ '-',
+ SUCCEED,
+ 5,
+ {"5","2","7","2-6","2"},
+ },
+ { "embedded close-paren",
+ "(be;fo)re)",
+ ';',
+ SUCCEED,
+ 2,
+ {"be", "fo)re"},
+ },
+ { "embedded non-escaping backslash",
+ "(be;fo\\re)",
+ ';',
+ SUCCEED,
+ 2,
+ {"be", "fo\\re"},
+ },
+ { "double close-paren at end",
+ "(be;fore))",
+ ';',
+ SUCCEED,
+ 2,
+ {"be", "fore)"},
+ },
+ { "empty elements",
+ "(;a1;;a4;)",
+ ';',
+ SUCCEED,
+ 5,
+ {"", "a1", "", "a4", ""},
+ },
+ { "nested tuples with different separators",
+ "((4,e,a);(6,2,a))",
+ ';',
+ SUCCEED,
+ 2,
+ {"(4,e,a)","(6,2,a)"},
+ },
+ { "nested tuples with same separators",
+ "((4,e,a),(6,2,a))",
+ ',',
+ SUCCEED,
+ 6,
+ {"(4","e","a)","(6","2","a)"},
+ },
+ { "real-world use case",
+ "(us-east-2,AKIAIMC3D3XLYXLN5COA,ugs5aVVnLFCErO/8uW14iWE3K5AgXMpsMlWneO/+)",
+ ',',
+ SUCCEED,
+ 3,
+ {"us-east-2",
+ "AKIAIMC3D3XLYXLN5COA",
+ "ugs5aVVnLFCErO/8uW14iWE3K5AgXMpsMlWneO/+"},
+ }
+};
/*----------------------------------------------------------------------------
*
- * Function: test_parse_tuple()
- *
- * Purpose:
- *
- * Provide unit tests and specification for the `parse_tuple()` function.
- *
- * Return:
+ * Function: test_parse_tuple()
*
- * 0 Tests passed.
- * 1 Tests failed.
+ * Purpose: Provide unit tests and specification for the `parse_tuple()`
+ * function.
*
- * Programmer: Jacob Smith
- * 2017-11-11
+ * Return: SUCCEED/FAIL
*
- * Changes: None.
+ * Programmer: Jacob Smith
+ * 2017-11-11
*
*----------------------------------------------------------------------------
*/
-static unsigned
+static herr_t
test_parse_tuple(void)
{
- /*************************
- * TEST-LOCAL STRUCTURES *
- *************************/
-
- struct testcase {
- const char *test_msg; /* info about test case */
- const char *in_str; /* input string */
- int sep; /* separator "character" */
- herr_t exp_ret; /* expected SUCCEED / FAIL */
- unsigned exp_nelems; /* expected number of elements */
- /* (no more than 7!) */
- const char *exp_elems[7]; /* list of elements (no more than 7!) */
- };
-
- /******************
- * TEST VARIABLES *
- ******************/
-
- struct testcase cases[] = {
- { "bad start",
- "words(before)",
- ';',
- FAIL,
- 0,
- {NULL},
- },
- { "tuple not closed",
- "(not ok",
- ',',
- FAIL,
- 0,
- {NULL},
- },
- { "empty tuple",
- "()",
- '-',
- SUCCEED,
- 1,
- {""},
- },
- { "no separator",
- "(stuff keeps on going)",
- ',',
- SUCCEED,
- 1,
- {"stuff keeps on going"},
- },
- { "4-ple, escaped seperator",
- "(elem0,elem1,el\\,em2,elem3)", /* "el\,em" */
- ',',
- SUCCEED,
- 4,
- {"elem0", "elem1", "el,em2", "elem3"},
- },
- { "5-ple, escaped escaped separator",
- "(elem0,elem1,el\\\\,em2,elem3)",
- ',',
- SUCCEED,
- 5,
- {"elem0", "elem1", "el\\", "em2", "elem3"},
- },
- { "escaped non-comma separator",
- "(5-2-7-2\\-6-2)",
- '-',
- SUCCEED,
- 5,
- {"5","2","7","2-6","2"},
- },
- { "embedded close-paren",
- "(be;fo)re)",
- ';',
- SUCCEED,
- 2,
- {"be", "fo)re"},
- },
- { "embedded non-escaping backslash",
- "(be;fo\\re)",
- ';',
- SUCCEED,
- 2,
- {"be", "fo\\re"},
- },
- { "double close-paren at end",
- "(be;fore))",
- ';',
- SUCCEED,
- 2,
- {"be", "fore)"},
- },
- { "empty elements",
- "(;a1;;a4;)",
- ';',
- SUCCEED,
- 5,
- {"", "a1", "", "a4", ""},
- },
- { "nested tuples with different separators",
- "((4,e,a);(6,2,a))",
- ';',
- SUCCEED,
- 2,
- {"(4,e,a)","(6,2,a)"},
- },
- { "nested tuples with same separators",
- "((4,e,a),(6,2,a))",
- ',',
- SUCCEED,
- 6,
- {"(4","e","a)","(6","2","a)"},
- },
- { "real-world use case",
- "(us-east-2,AKIAIMC3D3XLYXLN5COA,ugs5aVVnLFCErO/8uW14iWE3K5AgXMpsMlWneO/+)",
- ',',
- SUCCEED,
- 3,
- {"us-east-2",
- "AKIAIMC3D3XLYXLN5COA",
- "ugs5aVVnLFCErO/8uW14iWE3K5AgXMpsMlWneO/+"},
- }
- };
- struct testcase tc;
- unsigned n_tests = 14;
- unsigned i = 0;
- unsigned count = 0;
- unsigned elem_i = 0;
- char **parsed = NULL;
- char *cpy = NULL;
- herr_t success = TRUE;
- hbool_t show_progress = FALSE;
-
-
+ tuple_testcase_t tc;
+ unsigned n_tests = 14;
+ unsigned u = 0;
+ unsigned count = 0;
+ unsigned elem_u = 0;
+ char **parsed = NULL;
+ char *cpy = NULL;
+ herr_t ret;
TESTING("arbitrary-count tuple parsing");
-#if H5TOOLS_UTILS_TEST_DEBUG > 0
- show_progress = TRUE;
-#endif /* H5TOOLS_UTILS_TEST_DEBUG */
+ for (u = 0; u < n_tests; u++) {
- /*********
- * TESTS *
- *********/
+ tc = tuple_cases_g[u];
- for (i = 0; i < n_tests; i++) {
+ ret = parse_tuple(tc.in_str, tc.sep, &cpy, &count, &parsed);
- /* SETUP
- */
- HDassert(parsed == NULL);
- HDassert(cpy == NULL);
- tc = cases[i];
- if (show_progress == TRUE) {
- HDprintf("testing %d: %s...\n", i, tc.test_msg);
- }
+ if(tc.expected_result != ret)
+ FAIL_PUTS_ERROR("unexpected result from parse_tuple()")
+ if(tc.exp_nelems != count)
+ FAIL_PUTS_ERROR("incorrect number of elements returned from parse_tupble()")
- /* VERIFY
- */
- success = parse_tuple(tc.in_str, tc.sep, &cpy, &count, &parsed);
-
- JSVERIFY( tc.exp_ret, success, "function returned incorrect value" )
- JSVERIFY( tc.exp_nelems, count, NULL )
- if (success == SUCCEED) {
- FAIL_IF( parsed == NULL )
- for (elem_i = 0; elem_i < count; elem_i++) {
- JSVERIFY_STR( tc.exp_elems[elem_i], parsed[elem_i], NULL )
+ if (ret == SUCCEED) {
+ /* Successful return case checks */
+ if (NULL == parsed)
+ FAIL_PUTS_ERROR("parsed pointer should not be NULL on success");
+ for (elem_u = 0; elem_u < count; elem_u++) {
+ if (HDstrcmp(tc.exp_elems[elem_u], parsed[elem_u]))
+ FAIL_PUTS_ERROR("Bad elements detected")
}
- /* TEARDOWN */
- HDassert(parsed != NULL);
- HDassert(cpy != NULL);
- HDfree(parsed);
- parsed = NULL;
- HDfree(cpy);
- cpy = NULL;
- } else {
- FAIL_IF( parsed != NULL )
- } /* if parse_tuple() == SUCCEED or no */
+ }
+ else {
+ /* Failed return case checks */
+ if(parsed != NULL)
+ FAIL_PUTS_ERROR("should not have returned elements on failure")
+ }
+
+ HDfree(cpy);
+ HDfree(parsed);
} /* for each testcase */
PASSED();
- return 0;
+ return SUCCEED;
error:
- /***********
- * CLEANUP *
- ***********/
-
- if (parsed != NULL) HDfree(parsed);
- if (cpy != NULL) HDfree(cpy);
+ HDfree(parsed);
+ HDfree(cpy);
- return 1;
+ return FAIL;
} /* test_parse_tuple */
/*----------------------------------------------------------------------------
*
- * Function: test_populate_ros3_fa()
+ * Function: test_populate_ros3_fa()
*
- * Purpose: Verify behavior of `populate_ros3_fa()`
+ * Purpose: Verify behavior of `populate_ros3_fa()`
*
- * Return: 0 if test passes
- * 1 if failure
+ * Return: SUCCEED/FAIL
*
- * Programmer: Jacob Smith
- * 2017-11-13
- *
- * Changes: None
+ * Programmer: Jacob Smith
+ * 2017-11-13
*
*----------------------------------------------------------------------------
*/
-static unsigned
+#ifdef H5_HAVE_ROS3_VFD
+static herr_t
test_populate_ros3_fa(void)
{
-#ifdef H5_HAVE_ROS3_VFD
- /*************************
- * TEST-LOCAL STRUCTURES *
- *************************/
-
- /************************
- * TEST-LOCAL VARIABLES *
- ************************/
-
- hbool_t show_progress = FALSE;
int bad_version = 0xf87a; /* arbitrarily wrong version number */
-#endif /* H5_HAVE_ROS3_VFD */
-
- TESTING("programmatic ros3 fapl population");
-#ifndef H5_HAVE_ROS3_VFD
- HDputs(" -SKIP-");
- HDputs(" Read-Only S3 VFD not enabled");
- HDfflush(stdout);
- return 0;
-#else
-#if H5TOOLS_UTILS_TEST_DEBUG > 0
- show_progress = TRUE;
-#endif /* H5TOOLS_UTILS_TEST_DEBUG */
+ TESTING("ros3 fapl population");
HDassert(bad_version != H5FD_CURR_ROS3_FAPL_T_VERSION);
- /*********
- * TESTS *
- *********/
-
- /* NULL fapl config pointer fails
- */
+ /* NULL fapl config pointer fails */
{
const char *values[] = {"x", "y", "z"};
- if (show_progress) { HDprintf("NULL fapl pointer\n"); }
-
- JSVERIFY( 0, h5tools_populate_ros3_fapl(NULL, values),
- "fapl pointer cannot be null" )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(NULL, values))
+ TEST_ERROR
}
- /* NULL values pointer yields default fapl
- */
+ /* NULL values pointer yields default fapl */
{
H5FD_ros3_fapl_t fa = {bad_version, TRUE, "u", "v", "w"};
- if (show_progress) { HDprintf("NULL values pointer\n"); }
-
- JSVERIFY( 1, h5tools_populate_ros3_fapl(&fa, NULL),
- "NULL values pointer yields \"default\" fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should PASS */
+ if (FAIL == h5tools_populate_ros3_fapl(&fa, NULL))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
- /* all-empty values
- * yields default fapl
- */
+ /* all-empty values yields default fapl */
{
H5FD_ros3_fapl_t fa = {bad_version, TRUE, "u", "v", "w"};
const char *values[] = {"", "", ""};
- if (show_progress) { HDprintf("all empty values\n"); }
-
- JSVERIFY( 1, h5tools_populate_ros3_fapl(&fa, values),
- "empty values yields \"default\" fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should PASS */
+ if (FAIL == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* successfully set fapl with values
@@ -682,55 +457,70 @@ test_populate_ros3_fa(void)
H5FD_ros3_fapl_t fa = {bad_version, FALSE, "a", "b", "c"};
const char *values[] = {"x", "y", "z", "a"};
- if (show_progress) { HDprintf("successful full set\n"); }
-
- JSVERIFY( 1, h5tools_populate_ros3_fapl(&fa, values),
- "four values" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( TRUE, fa.authenticate, NULL )
- JSVERIFY_STR( "x", fa.aws_region, NULL )
- JSVERIFY_STR( "y", fa.secret_id, NULL )
- JSVERIFY_STR( "z", fa.secret_key, NULL )
+ /* Should PASS */
+ if (FAIL == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != TRUE)
+ TEST_ERROR
+ if (HDstrcmp("x", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("y", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("z", fa.secret_key))
+ TEST_ERROR
}
/* NULL region
- * yeilds default fapl
+ * yields default fapl
*/
{
H5FD_ros3_fapl_t fa = {bad_version, FALSE, "a", "b", "c"};
const char *values[] = {NULL, "y", "z", NULL};
- if (show_progress) { HDprintf("NULL region\n"); }
-
- JSVERIFY( 0, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* empty region
- * yeilds default fapl
+ * yields default fapl
*/
{
H5FD_ros3_fapl_t fa = {bad_version, FALSE, "a", "b", "c"};
const char *values[] = {"", "y", "z", NULL};
- if (show_progress) { HDprintf("empty region; non-empty id, key\n"); }
-
- JSVERIFY( 0, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* region overflow
- * yeilds default fapl
+ * yields default fapl
*/
{
H5FD_ros3_fapl_t fa = {bad_version, FALSE, "a", "b", "c"};
@@ -740,17 +530,22 @@ test_populate_ros3_fa(void)
"y",
"z"};
- if (show_progress) { HDprintf("region overflow\n"); }
-
HDassert(HDstrlen(values[0]) > H5FD_ROS3_MAX_REGION_LEN);
- JSVERIFY( 0, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* NULL id
@@ -760,33 +555,43 @@ test_populate_ros3_fa(void)
H5FD_ros3_fapl_t fa = {bad_version, FALSE, "a", "b", "c"};
const char *values[] = {"x", NULL, "z", NULL};
- if (show_progress) { HDprintf("NULL id\n"); }
-
- JSVERIFY( 0, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* empty id (non-empty region, key)
- * yeilds default fapl
+ * yields default fapl
*/
{
H5FD_ros3_fapl_t fa = {bad_version, FALSE, "a", "b", "c"};
const char *values[] = {"x", "", "z", NULL};
- if (show_progress) { HDprintf("empty id; non-empty region and key\n"); }
-
- JSVERIFY( 0, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* id overflow
@@ -808,17 +613,22 @@ test_populate_ros3_fa(void)
"Can you separate the various parts of the problem?",
"z"};
- if (show_progress) { HDprintf("id overflow\n"); }
-
HDassert(HDstrlen(values[1]) > H5FD_ROS3_MAX_SECRET_ID_LEN);
- JSVERIFY( 0, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "x", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("x", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* NULL key
@@ -828,69 +638,89 @@ test_populate_ros3_fa(void)
H5FD_ros3_fapl_t fa = {bad_version, FALSE, "a", "b", "c"};
const char *values[] = {"x", "y", NULL, NULL};
- if (show_progress) { HDprintf("NULL key\n"); }
-
- JSVERIFY( 0, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* empty key (non-empty region, id)
- * yeilds authenticating fapl
+ * yields authenticating fapl
*/
{
H5FD_ros3_fapl_t fa = {bad_version, FALSE, "a", "b", "c"};
const char *values[] = {"x", "y", "", NULL};
- if (show_progress) { HDprintf("empty key; non-empty region and id\n"); }
-
- JSVERIFY( 1, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( TRUE, fa.authenticate, NULL )
- JSVERIFY_STR( "x", fa.aws_region, NULL )
- JSVERIFY_STR( "y", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should PASS */
+ if (FAIL == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != TRUE)
+ TEST_ERROR
+ if (HDstrcmp("x", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("y", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* empty key, region (non-empty id)
- * yeilds default fapl
+ * yields default fapl
*/
{
H5FD_ros3_fapl_t fa = {bad_version, FALSE, "a", "b", "c"};
const char *values[] = {"", "y", "", NULL};
- if (show_progress) { HDprintf("empty key and region; non-empty id\n"); }
-
- JSVERIFY( 0, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* empty key, id (non-empty region)
- * yeilds default fapl
+ * yields default fapl
*/
{
H5FD_ros3_fapl_t fa = {bad_version, FALSE, "a", "b", "c"};
const char *values[] = {"x", "", "", NULL};
- if (show_progress) { HDprintf("empty key and id; non-empty region\n"); }
-
- JSVERIFY( 0, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "", fa.aws_region, NULL )
- JSVERIFY_STR( "", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* key overflow
@@ -912,17 +742,22 @@ test_populate_ros3_fa(void)
"What are the boundaries of the problem? " \
"Can you separate the various parts of the problem?"};
- if (show_progress) { HDprintf("key overflow\n"); }
-
HDassert(HDstrlen(values[2]) > H5FD_ROS3_MAX_SECRET_KEY_LEN);
- JSVERIFY( 0, h5tools_populate_ros3_fapl(&fa, values),
- "could not fill fapl" )
- JSVERIFY( H5FD_CURR_ROS3_FAPL_T_VERSION, fa.version, NULL )
- JSVERIFY( FALSE, fa.authenticate, NULL )
- JSVERIFY_STR( "x", fa.aws_region, NULL )
- JSVERIFY_STR( "y", fa.secret_id, NULL )
- JSVERIFY_STR( "", fa.secret_key, NULL )
+ /* Should FAIL */
+ if (SUCCEED == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != H5FD_CURR_ROS3_FAPL_T_VERSION)
+ TEST_ERROR
+ if (fa.authenticate != FALSE)
+ TEST_ERROR
+ if (HDstrcmp("x", fa.aws_region))
+ TEST_ERROR
+ if (HDstrcmp("y", fa.secret_id))
+ TEST_ERROR
+ if (HDstrcmp("", fa.secret_key))
+ TEST_ERROR
}
/* use case
@@ -934,333 +769,147 @@ test_populate_ros3_fa(void)
"AKIAIMC3D3XLYXLN5COA",
"ugs5aVVnLFCErO/8uW14iWE3K5AgXMpsMlWneO/+"
};
- JSVERIFY( 1,
- h5tools_populate_ros3_fapl(&fa, values),
- "unable to set use case" )
- JSVERIFY( 1, fa.version, "version check" )
- JSVERIFY( 1, fa.authenticate, "should authenticate" )
+
+ /* Should PASS */
+ if (FAIL == h5tools_populate_ros3_fapl(&fa, values))
+ TEST_ERROR
+
+ if (fa.version != 1)
+ TEST_ERROR
+ if (fa.authenticate != TRUE)
+ TEST_ERROR
}
PASSED();
- return 0;
+ return SUCCEED;
-error :
- /***********
- * CLEANUP *
- ***********/
-
- return 1;
+error:
-#endif /* H5_HAVE_ROS3_VFD */
+ return FAIL;
} /* test_populate_ros3_fa */
+#endif /* H5_HAVE_ROS3_VFD */
/*----------------------------------------------------------------------------
*
- * Function: test_set_configured_fapl()
- *
- * Purpose: Verify `h5tools_set_configured_fapl()` with ROS3 VFD
+ * Function: test_set_configured_fapl()
*
- * Return: 0 if test passes
- * 1 if failure
+ * Purpose: Verify `h5tools_get_fapl()` with ROS3 and HDFS VFDs
*
- * Programmer: Jacob Smith
- * 2018-07-12
+ * Return: SUCCEED/FAIL
*
- * Changes: None
+ * Programmer: Jacob Smith
+ * 2018-07-12
*
*----------------------------------------------------------------------------
*/
-static unsigned
-test_set_configured_fapl(void)
+static herr_t
+test_set_configured_fapl(vfd_tests_e test_type, fapl_testcase_t cases[], unsigned n_cases)
{
-#define UTIL_TEST_NOFAPL 1
-#define UTIL_TEST_DEFAULT 2
-#define UTIL_TEST_CREATE 3
-
- /*************************
- * TEST-LOCAL STRUCTURES *
- *************************/
- typedef struct testcase {
- const char message[88];
- int expected;
- int fapl_choice;
- const char vfdname[12];
- void *conf_fa;
- } testcase;
-
- typedef struct other_fa_t {
- int a;
- int b;
- int c;
- } other_fa_t;
-
- /************************
- * TEST-LOCAL VARIABLES *
- ************************/
-
- hid_t fapl_id = -1;
- other_fa_t wrong_fa = {0x432, 0xf82, 0x9093};
- H5FD_ros3_fapl_t ros3_anon_fa = {1, FALSE, "", "", ""};
- H5FD_ros3_fapl_t ros3_auth_fa = {
- 1, /* fapl version */
- TRUE, /* authenticate */
- "us-east-1", /* aws region */
- "12345677890abcdef", /* simulate access key ID */
- "oiwnerwe9u0234nJw0-aoj+dsf", /* simulate secret key */
- };
- H5FD_hdfs_fapl_t hdfs_fa = {
- 1, /* fapl version */
- "", /* namenode name */
- 0, /* namenode port */
- "", /* kerberos ticket cache */
- "", /* user name */
- 2048, /* stream buffer size */
- };
- unsigned n_cases = 7; /* number of common testcases */
- testcase cases[] = {
- { "(common) should fail: no fapl id",
- 0,
- UTIL_TEST_NOFAPL,
- "",
- NULL,
- },
- { "(common) should fail: no fapl id (with struct)",
- 0,
- UTIL_TEST_NOFAPL,
- "",
- &wrong_fa,
- },
- { "(common) H5P_DEFAULT with no struct should succeed",
- 1,
- UTIL_TEST_DEFAULT,
- "",
- NULL,
- },
- { "(common) H5P_DEFAULT with (ignored) struct should succeed",
- 1,
- UTIL_TEST_DEFAULT,
- "",
- &wrong_fa,
- },
- { "(common) provided fapl entry should not fail",
- 1,
- UTIL_TEST_CREATE,
- "",
- NULL,
- },
- { "(common) provided fapl entry should not fail; ignores struct",
- 1,
- UTIL_TEST_CREATE,
- "",
- &wrong_fa,
- },
- { "(common) should fail: unrecoginzed vfd name",
- 0,
- UTIL_TEST_DEFAULT,
- "unknown",
- NULL,
- },
-
-#ifdef H5_HAVE_ROS3_VFD
- /* WARNING: add number of ROS3 test cases after array definition
- */
- { "(ROS3) should fail: no fapl id, no struct",
- 0,
- UTIL_TEST_NOFAPL,
- "ros3",
- NULL,
- },
- { "(ROS3) should fail: no fapl id",
- 0,
- UTIL_TEST_NOFAPL,
- "ros3",
- &ros3_anon_fa,
- },
- { "(ROS3) should fail: no struct",
- 0,
- UTIL_TEST_CREATE,
- "ros3",
- NULL,
- },
- { "(ROS3) successful set",
- 1,
- UTIL_TEST_CREATE,
- "ros3",
- &ros3_anon_fa,
- },
- { "(ROS3) should fail: attempt to set DEFAULT fapl",
- 0,
- UTIL_TEST_DEFAULT,
- "ros3",
- &ros3_anon_fa,
- },
-#endif /* H5_HAVE_ROS3_VFD */
-
-#ifdef H5_HAVE_LIBHDFS
- /* WARNING: add number of HDFS test cases after array definition
- */
- { "(HDFS) should fail: no fapl id, no struct",
- 0,
- UTIL_TEST_NOFAPL,
- "hdfs",
- NULL,
- },
- { "(HDFS) should fail: no fapl id",
- 0,
- UTIL_TEST_NOFAPL,
- "hdfs",
- &hdfs_fa,
- },
- { "(HDFS) should fail: no struct",
- 0,
- UTIL_TEST_CREATE,
- "hdfs",
- NULL,
- },
- { "(HDFS) successful set",
- 1,
- UTIL_TEST_CREATE,
- "hdfs",
- &hdfs_fa,
- },
- { "(HDFS) should fail: attempt to set DEFAULT fapl",
- 0,
- UTIL_TEST_DEFAULT,
- "hdfs",
- &hdfs_fa,
- },
-#endif /* H5_HAVE_LIBHDFS */
-
- }; /* testcases `cases` array */
- unsigned int i;
-
-#ifdef H5_HAVE_ROS3_VFD
- n_cases += 5;
-#endif /* H5_HAVE_ROS3_VFD */
-
-#ifdef H5_HAVE_LIBHDFS
- n_cases += 5;
-#endif /* H5_HAVE_LIBHDFS */
-
- TESTING("programmatic fapl set");
-
- for (i = 0; i < n_cases; i++) {
- int result;
- testcase C = cases[i];
-
- fapl_id = -1;
-
-#if UTIL_TEST_DEBUG
- HDfprintf(stderr, "setup test %d\t%s\n", i, C.message); fflush(stderr);
-#endif /* UTIL_TEST_DEBUG */
-
- /* per-test setup */
- if (C.fapl_choice == UTIL_TEST_DEFAULT) {
- fapl_id = H5P_DEFAULT;
- } else if (C.fapl_choice == UTIL_TEST_CREATE) {
- fapl_id = H5Pcreate(H5P_FILE_ACCESS);
- FAIL_IF( fapl_id < 0 )
+ hid_t in_fapl_id = H5I_INVALID_HID;
+ hid_t out_fapl_id = H5I_INVALID_HID;
+ unsigned u;
+
+ if (VFD_TESTS_COMMON == test_type)
+ TESTING("set fapl vfd (common)")
+ else if (VFD_TESTS_ROS3 == test_type)
+ TESTING("set fapl vfd (ros3)")
+ else if (VFD_TESTS_HDFS == test_type)
+ TESTING("set fapl vfd (hdfs)")
+
+ /* Loop over all test cases */
+ for (u = 0; u < n_cases; u++) {
+ h5tools_vfd_info_t vfd_info;
+ fapl_testcase_t tc = cases[u];
+
+ /* Setup */
+ if (tc.fapl_choice == FAPL_CHOICE_DEFAULT) {
+ in_fapl_id = H5P_DEFAULT;
}
-
-#if UTIL_TEST_DEBUG
- HDfprintf(stderr, "before test\n"); fflush(stderr);
-#endif /* UTIL_TEST_DEBUG */
-
- /* test */
- result = h5tools_set_configured_fapl(
- fapl_id,
- C.vfdname,
- C.conf_fa);
- JSVERIFY( result, C.expected, C.message )
-
-#if UTIL_TEST_DEBUG
- HDfprintf(stderr, "after test\n"); fflush(stderr);
-#endif /* UTIL_TEST_DEBUG */
-
- /* per-test-teardown */
- if (fapl_id > 0) {
- FAIL_IF( FAIL == H5Pclose(fapl_id) )
+ else if (tc.fapl_choice == FAPL_CHOICE_CREATE) {
+ if(H5I_INVALID_HID == (in_fapl_id = H5Pcreate(H5P_FILE_ACCESS)))
+ TEST_ERROR
+ }
+ else
+ in_fapl_id = H5I_INVALID_HID;
+
+ /* Test */
+ if(!HDstrcmp("", tc.vfd_name))
+ out_fapl_id = h5tools_get_fapl(in_fapl_id, NULL);
+ else {
+ vfd_info.info = tc.fa;
+ vfd_info.name = tc.vfd_name;
+ out_fapl_id = h5tools_get_fapl(in_fapl_id, &vfd_info);
}
- fapl_id = -1;
-#if UTIL_TEST_DEBUG
- HDfprintf(stderr, "after cleanup\n"); fflush(stderr);
-#endif /* UTIL_TEST_DEBUG */
+ /* Check */
+ if ((tc.expected_result == FAIL && H5I_INVALID_HID != out_fapl_id) ||
+ (tc.expected_result == SUCCEED && H5I_INVALID_HID == out_fapl_id))
+ FAIL_PUTS_ERROR(tc.error_message)
+ /* Close */
+ if (tc.fapl_choice == FAPL_CHOICE_CREATE && H5Pclose(in_fapl_id) < 0)
+ TEST_ERROR
+ if (out_fapl_id != H5I_INVALID_HID && H5Pclose(out_fapl_id) < 0)
+ TEST_ERROR
}
-#if UTIL_TEST_DEBUG
- HDfprintf(stderr, "after loop\n"); fflush(stderr);
-#endif /* UTIL_TEST_DEBUG */
-
PASSED();
- return 0;
+ return SUCCEED;
error :
- /***********
- * CLEANUP *
- ***********/
-
-#if UTIL_TEST_DEBUG
- HDfprintf(stderr, "ERROR\n"); fflush(stderr);
-#endif /* UTIL_TEST_DEBUG */
+ H5E_BEGIN_TRY {
+ H5Pclose(in_fapl_id);
+ H5Pclose(out_fapl_id);
+ } H5E_END_TRY;
- if (fapl_id > 0) {
- (void)H5Pclose(fapl_id);
- }
-
- return 1;
-
-#undef UTIL_TEST_NOFAPL
-#undef UTIL_TEST_DEFAULT
-#undef UTIL_TEST_CREATE
+ return FAIL;
} /* test_set_configured_fapl */
/*----------------------------------------------------------------------------
*
- * Function: main()
- *
- * Purpose: Run all test functions.
+ * Function: main()
*
- * Return: 0 iff all test pass
- * 1 iff any failures
+ * Purpose: Run all test functions
*
- * Programmer: Jacob Smith
- * 2017-11-10
+ * Return: EXIT_FAILURE/EXIT_SUCCESS
*
- * Changes: None.
+ * Programmer: Jacob Smith
+ * 2017-11-10
*
*----------------------------------------------------------------------------
*/
int
main(void)
{
- unsigned nerrors = 0;
+ int nerrors = 0;
-#ifdef _H5TEST_
- h5reset(); /* h5test? */
-#endif /* _H5TEST_ */
+ h5_reset();
- HDfprintf(stdout, "Testing h5tools_utils corpus.\n");
+ HDprintf("Testing tools VFD functionality.\n");
- nerrors += test_parse_tuple();
- nerrors += test_populate_ros3_fa();
- nerrors += test_set_configured_fapl();
+ nerrors += test_parse_tuple() < 0 ? 1 : 0;
+ nerrors += test_set_configured_fapl(VFD_TESTS_COMMON, common_cases_g, 7) < 0 ? 1 : 0;
+#ifdef H5_HAVE_ROS3_VFD
+ nerrors += test_populate_ros3_fa() < 0 ? 1 : 0;
+ nerrors += test_set_configured_fapl(VFD_TESTS_ROS3, ros3_cases_g, 5) < 0 ? 1 : 0;
+#endif
+#ifdef H5_HAVE_LIBHDFS
+ nerrors += test_set_configured_fapl(VFD_TESTS_HDFS, hdfs_cases_g, 5) < 0 ? 1 : 0;
+#endif
- if (nerrors > 0) {
- HDfprintf(stdout, "***** %d h5tools_utils TEST%s FAILED! *****\n",
- nerrors,
- nerrors > 1 ? "S" : "");
- nerrors = 1;
- } else {
- HDfprintf(stdout, "All h5tools_utils tests passed\n");
+ if(nerrors) {
+ HDprintf("***** %d tools VFD TEST%s FAILED! *****\n",
+ nerrors, nerrors > 1 ? "S" : "");
+ return EXIT_FAILURE;
}
- return (int)nerrors;
+ HDprintf("All tools VFD tests passed.\n");
+
+ return EXIT_SUCCESS;
-} /* main */
+} /* end main() */