summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Smith <jake.smith@hdfgroup.org>2018-09-12 19:02:30 (GMT)
committerJacob Smith <jake.smith@hdfgroup.org>2018-09-12 19:06:55 (GMT)
commitdde5666f425c6e0545c15d185b680b976f35206f (patch)
tree10a53d669a98655390f56161d420a7ee9f196c7f
parent7ef8d1d8484396ee220bf55ef1229c68b2b13534 (diff)
downloadhdf5-dde5666f425c6e0545c15d185b680b976f35206f.zip
hdf5-dde5666f425c6e0545c15d185b680b976f35206f.tar.gz
hdf5-dde5666f425c6e0545c15d185b680b976f35206f.tar.bz2
Add additional tests (or placeholders for same).
Tests use h5_fixname(). Small changes.
-rw-r--r--src/H5Dint.c7
-rw-r--r--test/ohdr_mindset.c (renamed from test/ohdr_min.c)429
2 files changed, 399 insertions, 37 deletions
diff --git a/src/H5Dint.c b/src/H5Dint.c
index 6d095aa..3ad6c93 100644
--- a/src/H5Dint.c
+++ b/src/H5Dint.c
@@ -809,12 +809,15 @@ H5D__calculate_minimum_header_size( \
NULL);
#else
{
- char tmp[1] = "\0";
+ /* message pointer "tmp" is unused by raw get function, however, a null
+ * pointer is intercepted by an assert in H5O_msg_size_oh().
+ */
+ char tmp[1] = "";
ret_value += H5O_msg_size_oh(
file,
ohdr,
H5O_CONT_ID,
- tmp, /* NULL, */ /* UNUSED? */ /*intercepted by assert before passed through */
+ tmp,
0);
}
#endif
diff --git a/test/ohdr_min.c b/test/ohdr_mindset.c
index 8636bb1..0c9a8f2 100644
--- a/test/ohdr_min.c
+++ b/test/ohdr_mindset.c
@@ -345,6 +345,10 @@ if (strcmp((actual), (expected)) != 0) { \
#endif /* JSMITH_TESTING */
+/* basenames of test files created in this test suite */
+#define OHMIN_FILENAME_A "ohdr_min_a"
+#define OHMIN_FILENAME_B "ohdr_min_b"
+
/* used for object header size comparison */
#define EQ 1
#define LT 2
@@ -441,7 +445,7 @@ if (strcmp((actual), (expected)) != 0) { \
*
* ---------------------------------------------------------------------------
*/
-static int
+static herr_t
make_file( \
const char *filename, \
hid_t *fid)
@@ -469,7 +473,7 @@ make_file( \
*
* ---------------------------------------------------------------------------
*/
-static int
+static herr_t
make_dataset( \
hid_t loc_id, \
const char *name, \
@@ -509,7 +513,7 @@ make_dataset( \
*
* ---------------------------------------------------------------------------
*/
-static int
+static herr_t
put_attribute( \
hid_t loc_id, \
const char *attrname, \
@@ -560,6 +564,27 @@ count_attributes(hid_t dset_id)
/* ---------------------------------------------------------------------------
+ * Function: _oh_getsize()
+ *
+ * Purpose: Get the total space used by the object header
+ *
+ *
+ * Return: SUCCEED/FAIL. On success, stores size in `size_out` pointer.
+ *
+ * ---------------------------------------------------------------------------
+ */
+static herr_t
+_oh_getsize(hid_t did, hsize_t *size_out)
+{
+ H5O_info_t info;
+ if (FAIL == H5Oget_info2(did, &info, H5O_INFO_HDR))
+ return FAIL;
+ *size_out = info.hdr.space.total;
+ return SUCCEED;
+} /* _oh_getsize */
+
+
+/* ---------------------------------------------------------------------------
* Function: oh_compare()
*
* Purpose: Compare the TOTAL space used by datasets' object headers.
@@ -574,17 +599,14 @@ oh_compare( \
hid_t did1, \
hid_t did2)
{
- H5O_info_t info;
- hsize_t space1 = 0;
- hsize_t space2 = 0;
+ hsize_t space1 = 0;
+ hsize_t space2 = 0;
- if (FAIL == H5Oget_info2(did1, &info, H5O_INFO_HDR))
+ if (FAIL == _oh_getsize(did1, &space1))
return -1;
- space1 = info.hdr.space.total;
- if (FAIL == H5Oget_info2(did2, &info, H5O_INFO_HDR))
+ if (FAIL == _oh_getsize(did2, &space2))
return -2;
- space2 = info.hdr.space.total;
if (space1 < space2)
return LT;
@@ -628,6 +650,7 @@ test_attribute_addition(void)
hsize_t array_10[1] = {10}; /* dataspace extent */
char buffer[10] = ""; /* to inspect string attribute */
int a_out = 0;
+ char filename[512] = "";
TESTING("attribute additions to [un]minimized dataset")
@@ -635,6 +658,12 @@ test_attribute_addition(void)
* SETUP *
*********/
+ FAIL_IF( NULL == h5_fixname(
+ OHMIN_FILENAME_A,
+ H5P_DEFAULT,
+ filename,
+ sizeof(filename)) )
+
dspace_id = H5Screate_simple(
1, /* rank */
array_10, /* current dimensions */
@@ -658,7 +687,7 @@ test_attribute_addition(void)
JSVERIFY( SUCCEED, \
make_file( \
- "ohdr_min_a.h5", \
+ filename, \
&file_id), \
"unable to create file")
@@ -951,12 +980,27 @@ test_size_comparisons(void)
hid_t dset_F_N_id = -1; /* 'N' for explcit non-minimized dset */
hid_t dset_F_Y_id = -1; /* 'Y' for minimzed dset */
- TESTING("size comparisons");
+ char filename_a[512] = "";
+ char filename_b[512] = "";
+
+ TESTING("default size comparisons");
/*********
* SETUP *
*********/
+ FAIL_IF( NULL == h5_fixname(
+ OHMIN_FILENAME_A,
+ H5P_DEFAULT,
+ filename_a,
+ sizeof(filename_a)) )
+
+ FAIL_IF( NULL == h5_fixname(
+ OHMIN_FILENAME_B,
+ H5P_DEFAULT,
+ filename_b,
+ sizeof(filename_b)) )
+
dcpl_minimize = H5Pcreate(H5P_DATASET_CREATE);
FAIL_IF( 0 > dcpl_minimize )
JSVERIFY( SUCCEED,
@@ -980,7 +1024,7 @@ test_size_comparisons(void)
JSVERIFY( SUCCEED, \
make_file( \
- "ohdr_min_a.h5", \
+ filename_a, \
&file_f_id), \
"unable to create file 'ohdr_min_a.h5'")
@@ -1016,7 +1060,7 @@ test_size_comparisons(void)
JSVERIFY( SUCCEED, \
make_file( \
- "ohdr_min_b.h5", \
+ filename_b, \
&file_F_id), \
"unable to create file 'ohdr_min_b.h5'")
FAIL_IF( 0 > H5Fset_dset_no_attrs_hint(file_F_id, TRUE) )
@@ -1131,9 +1175,12 @@ test_minimized_with_filter(void)
hid_t mindset_id = -1;
hid_t minfdset_id = -1;
hid_t file_id = -1;
- hsize_t extents[1] = {10};
- unsigned filter_values[] = {0};
- const hsize_t chunk_dim[] = {2};
+
+ char filename[512] = "";
+ const hsize_t extents[1] = {10}; /* extents of dataspace */
+ const unsigned filter_values[] = {0}; /* TBD */
+ const hsize_t chunk_dim[] = {2}; /* needed for filter */
+ const int ndims = 1;
/* | default | minimize
* ----------+---------+---------
@@ -1142,12 +1189,18 @@ test_minimized_with_filter(void)
* filter | fdset | minfdset
*/
- TESTING("minimized header with filter message");
+ TESTING("with filter message");
/*********
* SETUP *
*********/
+ FAIL_IF( NULL == h5_fixname(
+ OHMIN_FILENAME_A,
+ H5P_DEFAULT,
+ filename,
+ sizeof(filename)) )
+
mindcpl_id = H5Pcreate(H5P_DATASET_CREATE);
FAIL_IF( 0 > mindcpl_id )
JSVERIFY( SUCCEED,
@@ -1157,7 +1210,7 @@ test_minimized_with_filter(void)
fdcpl_id = H5Pcreate(H5P_DATASET_CREATE);
FAIL_IF( 0 > fdcpl_id )
JSVERIFY( SUCCEED,
- H5Pset_chunk(fdcpl_id, 1, chunk_dim),
+ H5Pset_chunk(fdcpl_id, ndims, chunk_dim),
"unable to chunk dataset")
JSVERIFY( SUCCEED,
H5Pset_filter(
@@ -1174,7 +1227,7 @@ test_minimized_with_filter(void)
H5Pset_dset_no_attrs_hint(minfdcpl_id, TRUE),
"unable to minimize to-be-filtered dataset header")
JSVERIFY( SUCCEED,
- H5Pset_chunk(minfdcpl_id, 1, chunk_dim),
+ H5Pset_chunk(minfdcpl_id, ndims, chunk_dim),
"unable to chunk minimized dataset")
JSVERIFY( SUCCEED,
H5Pset_filter(
@@ -1191,16 +1244,16 @@ test_minimized_with_filter(void)
dtype_id = H5Tcopy(H5T_NATIVE_INT);
FAIL_IF( 0 > dtype_id )
- JSVERIFY( SUCCEED, \
- make_file( \
- "ohdr_min_a.h5", \
- &file_id), \
+ JSVERIFY( SUCCEED, \
+ make_file( \
+ filename, \
+ &file_id), \
"unable to create file 'ohdr_min_a.h5'")
JSVERIFY( SUCCEED, \
make_dataset( \
file_id, \
- "dset", \
+ "xx", \
dtype_id, \
dspace_id, \
H5P_DEFAULT, \
@@ -1210,7 +1263,7 @@ test_minimized_with_filter(void)
JSVERIFY( SUCCEED, \
make_dataset( \
file_id, \
- "mindset", \
+ "Mx", \
dtype_id, \
dspace_id, \
mindcpl_id, \
@@ -1220,7 +1273,7 @@ test_minimized_with_filter(void)
JSVERIFY( SUCCEED, \
make_dataset( \
file_id, \
- "gzipdset", \
+ "xZ", \
dtype_id, \
dspace_id, \
fdcpl_id, \
@@ -1230,10 +1283,10 @@ test_minimized_with_filter(void)
JSVERIFY( SUCCEED, \
make_dataset( \
file_id, \
- "mingzipdset", \
+ "MZ", \
dtype_id, \
dspace_id, \
- fdcpl_id, \
+ minfdcpl_id, \
&minfdset_id), \
"unable to create dataset (minimized, gzip)")
@@ -1244,12 +1297,10 @@ test_minimized_with_filter(void)
JSVERIFY( LT, oh_compare(mindset_id, dset_id), NULL )
JSVERIFY( LT, oh_compare(mindset_id, fdset_id), NULL )
JSVERIFY( GT, oh_compare(minfdset_id, mindset_id), NULL )
- JSVERIFY( EQ, oh_compare(minfdset_id, fdset_id), NULL ) /* TODO: why are these equal? */
+ JSVERIFY( LT, oh_compare(minfdset_id, fdset_id), NULL )
-#if 1
if (DEBUG_OH_SIZE)
PRINT_DSET_OH_COMPARISON(fdset_id, minfdset_id)
-#endif
/************
* TEARDOWN *
@@ -1285,6 +1336,312 @@ error:
return 1;
} /* test_minimized_with_filter */
+
+/* ---------------------------------------------------------------------------
+ * Test minimized and recording modification times.
+ * ---------------------------------------------------------------------------
+ */
+static int
+test_modification_times(void)
+{
+ hid_t dspace_id = -1;
+ hid_t dtype_id = -1;
+ hid_t dcpl_xM_id = -1; /* Modtime */
+ hid_t dcpl_mx_id = -1; /* minimized */
+ hid_t dcpl_mM_id = -1; /* minimized, Modtime */
+ hid_t dset_xx_id = -1;
+ hid_t dset_xM_id = -1;
+ hid_t dset_mx_id = -1;
+ hid_t dset_mM_id = -1;
+ hid_t file_id = -1;
+
+ char filename[512] = "";
+ const hsize_t extents[1] = {128}; /* extents of dataspace */
+
+ TESTING("with modification times");
+
+ /*********
+ * SETUP *
+ *********/
+
+ FAIL_IF( NULL == h5_fixname(
+ OHMIN_FILENAME_A,
+ H5P_DEFAULT,
+ filename,
+ sizeof(filename)) )
+
+ dcpl_mx_id = H5Pcreate(H5P_DATASET_CREATE);
+ FAIL_IF( 0 > dcpl_mx_id )
+ JSVERIFY( SUCCEED,
+ H5Pset_dset_no_attrs_hint(dcpl_mx_id, TRUE),
+ NULL )
+
+ dcpl_xM_id = H5Pcreate(H5P_DATASET_CREATE);
+ FAIL_IF( 0 > dcpl_xM_id )
+ /* TODO: set OH VERSION to > 1 and to store modtimes? */
+
+ dcpl_mM_id = H5Pcreate(H5P_DATASET_CREATE);
+ FAIL_IF( 0 > dcpl_mM_id )
+ JSVERIFY( SUCCEED,
+ H5Pset_dset_no_attrs_hint(dcpl_mM_id, TRUE),
+ "unable to minimize to-be-filtered dataset header")
+ /* TODO: set OH VERSION to > 1 and to store modtimes? */
+
+ dspace_id = H5Screate_simple(1, extents, extents);
+ FAIL_IF( 0 > dspace_id )
+
+ dtype_id = H5Tcopy(H5T_NATIVE_INT);
+ FAIL_IF( 0 > dtype_id )
+
+ JSVERIFY( SUCCEED, \
+ make_file( \
+ filename, \
+ &file_id), \
+ "unable to create file 'ohdr_min_a.h5'")
+
+ JSVERIFY( SUCCEED, \
+ make_dataset( \
+ file_id, \
+ "xx", \
+ dtype_id, \
+ dspace_id, \
+ H5P_DEFAULT, \
+ &dset_xx_id), \
+ "unable to create dataset fx")
+
+ JSVERIFY( SUCCEED, \
+ make_dataset( \
+ file_id, \
+ "mx", \
+ dtype_id, \
+ dspace_id, \
+ dcpl_mx_id, \
+ &dset_mx_id), \
+ "unable to create dataset (minoh)")
+
+ JSVERIFY( SUCCEED, \
+ make_dataset( \
+ file_id, \
+ "xM", \
+ dtype_id, \
+ dspace_id, \
+ dcpl_xM_id, \
+ &dset_xM_id), \
+ "unable to create dataset (gzip)")
+
+ JSVERIFY( SUCCEED, \
+ make_dataset( \
+ file_id, \
+ "mM", \
+ dtype_id, \
+ dspace_id, \
+ dcpl_mM_id, \
+ &dset_mM_id), \
+ "unable to create dataset (minimized, gzip)")
+
+ /*********
+ * TESTS *
+ *********/
+
+ /* sanity check */
+ FAIL_IF ( LT != oh_compare(dset_mx_id, dset_xx_id) )
+ FAIL_IF ( LT != oh_compare(dset_mx_id, dset_xM_id) )
+
+#define TODO_MINOH_MODTIME 1
+#if TODO_MINOH_MODTIME
+ SKIPPED();
+ puts(" modtime details not yet implemented");
+#else
+ JSVERIFY( GT, oh_compare(dset_mM_id, dset_mx_id), NULL )
+ JSVERIFY( LT, oh_compare(dset_mM_id, dset_xM_id), NULL )
+
+ if (DEBUG_OH_SIZE)
+ PRINT_DSET_OH_COMPARISON(dset_xM_id, dset_mM_id)
+#endif
+
+ /************
+ * TEARDOWN *
+ ************/
+
+ MUST_CLOSE(dspace_id, CLOSE_DATASPACE)
+ MUST_CLOSE(dtype_id, CLOSE_DATATYPE)
+ MUST_CLOSE(dcpl_xM_id, CLOSE_PLIST)
+ MUST_CLOSE(dcpl_mx_id, CLOSE_PLIST)
+ MUST_CLOSE(dcpl_mM_id, CLOSE_PLIST)
+ MUST_CLOSE(dset_xx_id, CLOSE_DATASET)
+ MUST_CLOSE(dset_xM_id, CLOSE_DATASET)
+ MUST_CLOSE(dset_mx_id, CLOSE_DATASET)
+ MUST_CLOSE(dset_mM_id, CLOSE_DATASET)
+ MUST_CLOSE(file_id, CLOSE_FILE)
+
+#if TODO_MINOH_MODTIME
+#else
+ PASSED()
+#endif
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+ (void)H5Sclose(dspace_id);
+ (void)H5Tclose(dtype_id);
+ (void)H5Pclose(dcpl_xM_id);
+ (void)H5Pclose(dcpl_mx_id);
+ (void)H5Pclose(dcpl_mM_id);
+ (void)H5Dclose(dset_xx_id);
+ (void)H5Dclose(dset_xM_id);
+ (void)H5Dclose(dset_mx_id);
+ (void)H5Dclose(dset_mM_id);
+ (void)H5Fclose(file_id);
+ } H5E_END_TRY;
+ return 1;
+} /* test_modification_times */
+
+
+/* ---------------------------------------------------------------------------
+ * Test minimized dataset header with a fill value set.
+ * ---------------------------------------------------------------------------
+ */
+static int
+test_fillvalue_backwards_compatability(void)
+{
+ hid_t file_id = -1;
+ hid_t dtype_id = -1;
+ hid_t dspace_id = -1;
+ hid_t dcpl_id = -1;
+ hid_t fapl_id = -1;
+ hid_t dset_0_id = -1;
+ hid_t dset_1_id = -1;
+
+ char filename[512] = "";
+ const hsize_t extents[1] = {64}; /* extents of dataspace */
+ const int fill[1] = {343}; /* fill value of dataset */
+
+ hsize_t size0 = 0;
+ hsize_t size1 = 0;
+
+ /*********
+ * SETUP *
+ *********/
+
+ TESTING("with fill values and different libver support");
+
+ FAIL_IF( NULL == h5_fixname(
+ OHMIN_FILENAME_A,
+ H5P_DEFAULT,
+ filename,
+ sizeof(filename)) )
+
+ dspace_id = H5Screate_simple(1, extents, extents);
+ FAIL_IF( 0 > dspace_id )
+
+ dtype_id = H5Tcopy(H5T_NATIVE_INT);
+ FAIL_IF( 0 > dtype_id )
+
+ dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
+ FAIL_IF( 0 > dcpl_id )
+ FAIL_IF( FAIL == H5Pset_dset_no_attrs_hint(dcpl_id, TRUE) )
+ FAIL_IF( FAIL == H5Pset_fill_value(dcpl_id, dtype_id, fill) )
+
+ fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+ FAIL_IF( 0 > fapl_id )
+ FAIL_IF( FAIL == H5Pset_libver_bounds(
+ fapl_id,
+ H5F_LIBVER_EARLIEST,
+ H5F_LIBVER_LATEST) )
+
+ file_id = H5Fcreate(
+ filename,
+ H5F_ACC_TRUNC,
+ H5P_DEFAULT,
+ fapl_id);
+ FAIL_IF( 0 > file_id )
+
+ JSVERIFY( SUCCEED, \
+ make_dataset( \
+ file_id, \
+ "fullrange", \
+ dtype_id, \
+ dspace_id, \
+ dcpl_id, \
+ &dset_0_id), \
+ "unable to create dataset supporting full library range")
+
+#if 0
+ JSVERIFY( SUCCEED, _oh_getsize(dset_0_id, &size0), "can't get dset0 size" )
+#endif
+
+ /* Close file and re-open with different libver bounds
+ */
+ H5Fclose(file_id);
+ file_id = -1;
+
+ FAIL_IF( FAIL == H5Pset_libver_bounds(
+ fapl_id,
+ H5F_LIBVER_V18,
+ H5F_LIBVER_LATEST) )
+
+ file_id = H5Fopen(
+ filename,
+ H5F_ACC_RDWR,
+ fapl_id);
+ FAIL_IF( 0 > file_id )
+
+ JSVERIFY( SUCCEED, \
+ make_dataset( \
+ file_id, \
+ "upperrange", \
+ dtype_id, \
+ dspace_id, \
+ dcpl_id, \
+ &dset_1_id), \
+ "unable to create dataset supporting upper library range")
+
+#if 0
+ JSVERIFY( SUCCEED, _oh_getsize(dset_1_id, &size1), "can't get dset0 size" )
+#endif
+
+ /*********
+ * TESTS *
+ *********/
+
+#if 0
+ printf("0::%llu 1::%llu\n", size0, size1); fflush(stdout);
+#endif
+
+ if (DEBUG_OH_SIZE)
+ PRINT_DSET_OH_COMPARISON(dset_1_id, dset_0_id)
+
+ JSVERIFY( LT, oh_compare(dset_1_id, dset_0_id),
+ "dset not supporting pre-1.08 should be smaller?")
+
+ /************
+ * TEARDOWN *
+ ************/
+
+ MUST_CLOSE(dspace_id, CLOSE_DATASPACE)
+ MUST_CLOSE(dtype_id, CLOSE_DATATYPE)
+ MUST_CLOSE(dcpl_id, CLOSE_PLIST)
+ MUST_CLOSE(fapl_id, CLOSE_PLIST)
+ MUST_CLOSE(dset_0_id, CLOSE_DATASET)
+ MUST_CLOSE(dset_1_id, CLOSE_DATASET)
+ MUST_CLOSE(file_id, CLOSE_FILE)
+
+ PASSED()
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+ (void)H5Sclose(dspace_id);
+ (void)H5Tclose(dtype_id);
+ (void)H5Pclose(dcpl_id);
+ (void)H5Pclose(fapl_id);
+ (void)H5Dclose(dset_0_id);
+ (void)H5Dclose(dset_1_id);
+ (void)H5Fclose(file_id);
+ } H5E_END_TRY;
+ return 1;
+} /* test_fillvalue_backwards_compatability */
+
/********
* MAIN *
********/
@@ -1292,6 +1649,8 @@ error:
/* ---------------------------------------------------------------------------
* Main function is main. Runs tests.
+ *
+ * Returns number of failed tests.
* ---------------------------------------------------------------------------
*/
int
@@ -1304,9 +1663,9 @@ main(void)
nerrors += test_attribute_addition();
nerrors += test_size_comparisons();
nerrors += test_minimized_with_filter();
-/* TODO: external file links */
-/* TODO: modification times */
-/* TODO: fill value + "backwards compatability" */
+ nerrors += test_modification_times(); /* is this valid for datasets? */
+ nerrors += test_fillvalue_backwards_compatability();
+ /* nerrors += test_external_file_links() */ /* TOOD */
if (nerrors > 0) {
HDprintf("***** %d MINIMIZED DATASET OHDR TEST%s FAILED! *****\n",