summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authormainzer <mainzer#hdfgroup.org>2020-07-16 20:07:59 (GMT)
committermainzer <mainzer#hdfgroup.org>2020-07-16 20:07:59 (GMT)
commitbeee2bdb648a6a223a64ba8733d8518e5ee79b66 (patch)
tree22f301f5beb9c9cbee12984a9000fb4109639e7a /test
parent8b7167488091054e77f2b5ece385963f3cd1f923 (diff)
downloadhdf5-inactive/develop_subfiling.zip
hdf5-inactive/develop_subfiling.tar.gz
hdf5-inactive/develop_subfiling.tar.bz2
Added skeletal version of H5FDsubfiling.c and H5FDsubfiling.h.inactive/develop_subfiling
These are based on H5FDsec2, and will have to be re-worked heavily for sub-filing. Also added minimal test (based on existing sec2 tests) in test/vfd.c Since sub-filing is mostly a parallel feature, most testing will have to be moved to testpar. That said, a serial version of sub-filing will be neeced eventually, so it makes sense to retain at least a stub in the serial vfd tests. Tested serial and parallel on charis and jelly. Encountered errors in h5diff tests in the parallel builds, but am ignoring them as they also appear in the version prior to this checkin.
Diffstat (limited to 'test')
-rw-r--r--test/vfd.c159
1 files changed, 159 insertions, 0 deletions
diff --git a/test/vfd.c b/test/vfd.c
index bcc5bdb..bffc937 100644
--- a/test/vfd.c
+++ b/test/vfd.c
@@ -3998,6 +3998,164 @@ error:
return -1;
} /* end test_vector_io() */
+/*-------------------------------------------------------------------------
+ * Function: test_subfiling
+ *
+ * Purpose: Tests the file handle interface for subfiling driver
+ *
+ * Richard:
+ *
+ * This test is serial only -- I'm including it
+ * because I used the sec2 VFD as the base of the skeletal
+ * sub-filing VFD. Needless to say, sub-filing proper will
+ * be parallel only, which implies that the associated test
+ * code will be in testpar.
+ *
+ * That said, we will eventually need to be able to do
+ * sub-file I/O in serial. Also, it may be appropriate to
+ * test subfiling property lists in the serial code.
+ *
+ * Thus you may want to keep this function in stub form once
+ * modify the subfiling skeleton, and move the test code
+ * to testpar.
+ * -- John
+ *
+ * Return: Success: 0
+ * Failure: -1
+ *
+ * Programmer: <prgrammer>
+ * <date>
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_subfiling(void)
+{
+ hid_t fid = -1; /* file ID */
+ hid_t fapl_id = -1; /* file access property list ID */
+ hid_t fapl_id_out = -1; /* from H5Fget_access_plist */
+ hid_t driver_id = -1; /* ID for this VFD */
+ unsigned long driver_flags = 0; /* VFD feature flags */
+ char filename[1024]; /* filename */
+ void *os_file_handle = NULL; /* OS file handle */
+ hsize_t file_size; /* file size */
+ H5FD_subfiling_fapl_t fa_in = {H5FD_CURR_SUBFILING_FAPL_T_VERSION};
+ H5FD_subfiling_fapl_t fa_out;
+
+ TESTING("subfiling file driver");
+
+ /* Set property list and file name for subfiling driver. */
+ if((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+ TEST_ERROR;
+
+ if(H5Pset_fapl_subfiling(fapl_id, &fa_in) < 0)
+ TEST_ERROR;
+
+ /* get and verify the H5FD_subfiling_fapl_t */
+ if(H5Pget_fapl_subfiling(fapl_id, &fa_out) < 0)
+ TEST_ERROR;
+
+ if(fa_out.version != H5FD_CURR_SUBFILING_FAPL_T_VERSION)
+ TEST_ERROR;
+
+ h5_fixname(FILENAME[0], fapl_id, filename, sizeof(filename));
+
+ /* Check that the VFD feature flags are correct */
+ if ((driver_id = H5Pget_driver(fapl_id)) < 0)
+ TEST_ERROR
+
+ if (H5FDdriver_query(driver_id, &driver_flags) < 0)
+ TEST_ERROR
+
+ if(!(driver_flags & H5FD_FEAT_AGGREGATE_METADATA)) TEST_ERROR
+ if(!(driver_flags & H5FD_FEAT_ACCUMULATE_METADATA)) TEST_ERROR
+ if(!(driver_flags & H5FD_FEAT_DATA_SIEVE)) TEST_ERROR
+ if(!(driver_flags & H5FD_FEAT_AGGREGATE_SMALLDATA)) TEST_ERROR
+ if(!(driver_flags & H5FD_FEAT_POSIX_COMPAT_HANDLE)) TEST_ERROR
+ if(!(driver_flags & H5FD_FEAT_SUPPORTS_SWMR_IO)) TEST_ERROR
+ if(!(driver_flags & H5FD_FEAT_DEFAULT_VFD_COMPATIBLE)) TEST_ERROR
+
+ /* Check for extra flags not accounted for above */
+ if(driver_flags != (H5FD_FEAT_AGGREGATE_METADATA
+ | H5FD_FEAT_ACCUMULATE_METADATA
+ | H5FD_FEAT_DATA_SIEVE
+ | H5FD_FEAT_AGGREGATE_SMALLDATA
+ | H5FD_FEAT_POSIX_COMPAT_HANDLE
+ | H5FD_FEAT_SUPPORTS_SWMR_IO
+ | H5FD_FEAT_DEFAULT_VFD_COMPATIBLE))
+ TEST_ERROR
+
+ if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0)
+ TEST_ERROR;
+
+ /* Retrieve the access property list... */
+ if((fapl_id_out = H5Fget_access_plist(fid)) < 0)
+ TEST_ERROR;
+
+ /* Check that the driver is correct */
+ if(H5FD_SUBFILING != H5Pget_driver(fapl_id_out))
+ TEST_ERROR;
+
+ /* get and verify the H5FD_subfiling_fapl_t again */
+ if(H5Pget_fapl_subfiling(fapl_id_out, &fa_out) < 0)
+ TEST_ERROR;
+
+ if(fa_out.version != H5FD_CURR_SUBFILING_FAPL_T_VERSION)
+ TEST_ERROR;
+
+ /* ...and close the property list */
+ if(H5Pclose(fapl_id_out) < 0)
+ TEST_ERROR;
+
+ /* Check that we can get an operating-system-specific handle from
+ * the library.
+ *
+ * Not sure that this will be meaningful in the subfiling case.
+ */
+ if(H5Fget_vfd_handle(fid, H5P_DEFAULT, &os_file_handle) < 0)
+ TEST_ERROR;
+
+ if(os_file_handle == NULL)
+ FAIL_PUTS_ERROR("NULL os-specific vfd/file handle was returned from H5Fget_vfd_handle");
+
+
+ /* There is no garantee the size of metadata in file is constant.
+ * Just try to check if it's reasonable.
+ *
+ * Currently it should be around 2 KB.
+ */
+ if(H5Fget_filesize(fid, &file_size) < 0)
+ TEST_ERROR;
+
+ if(file_size < 1 * KB || file_size > 4 * KB)
+ FAIL_PUTS_ERROR("suspicious file size obtained from H5Fget_filesize");
+
+ /* Close and delete the file */
+ if(H5Fclose(fid) < 0)
+ TEST_ERROR;
+
+ h5_delete_test_file(FILENAME[0], fapl_id);
+
+ /* Close the fapl */
+ if(H5Pclose(fapl_id) < 0)
+ TEST_ERROR;
+
+ PASSED();
+
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+ H5Pclose(fapl_id);
+ H5Pclose(fapl_id_out);
+ H5Fclose(fid);
+ } H5E_END_TRY;
+
+ return -1;
+
+} /* end test_subfiling() */
+
+
/*-------------------------------------------------------------------------
* Function: main
@@ -4035,6 +4193,7 @@ main(void)
nerrors += test_splitter() < 0 ? 1 : 0;
nerrors += test_vector_io("sec2") < 0 ? 1 : 0;
nerrors += test_vector_io("stdio") < 0 ? 1 : 0;
+ nerrors += test_subfiling() < 0 ? 1 : 0;
if(nerrors) {