summaryrefslogtreecommitdiffstats
path: root/testpar/t_chunk_alloc.c
diff options
context:
space:
mode:
authorjhendersonHDF <jhenderson@hdfgroup.org>2023-12-08 13:42:49 (GMT)
committerGitHub <noreply@github.com>2023-12-08 13:42:49 (GMT)
commit95827bc79d592ad5aa71ec3199a83ede9b324c20 (patch)
tree0b97f531f4d2f7ce133659245976eeea0ba2e242 /testpar/t_chunk_alloc.c
parentfb84c696a476c39db2c35e7d86b818138e089358 (diff)
downloadhdf5-95827bc79d592ad5aa71ec3199a83ede9b324c20.zip
hdf5-95827bc79d592ad5aa71ec3199a83ede9b324c20.tar.gz
hdf5-95827bc79d592ad5aa71ec3199a83ede9b324c20.tar.bz2
HDF5 API test updates (#3835) (#3889)
* HDF5 API test updates Removed test duplication from bringing API tests back into the library from external VOL tests repo Synced changes between API tests and library's tests Updated API tests CMake code to directly use and install testhdf5, testphdf5, etc. instead of creating duplicate binaries Added new h5_using_native_vol() test function to determine whether the VOL connector being used is (or the VOL connector stack being used resolves to) the native VOL connector
Diffstat (limited to 'testpar/t_chunk_alloc.c')
-rw-r--r--testpar/t_chunk_alloc.c108
1 files changed, 79 insertions, 29 deletions
diff --git a/testpar/t_chunk_alloc.c b/testpar/t_chunk_alloc.c
index d02951d..1d59783 100644
--- a/testpar/t_chunk_alloc.c
+++ b/testpar/t_chunk_alloc.c
@@ -80,6 +80,8 @@ create_chunked_dataset(const char *filename, int chunk_factor, write_type write_
/* Only MAINPROCESS should create the file. Others just wait. */
if (MAINPROCESS) {
+ bool vol_is_native;
+
nchunks = chunk_factor * mpi_size;
dims[0] = (hsize_t)(nchunks * CHUNK_SIZE);
/* Create the data space with unlimited dimensions. */
@@ -93,6 +95,9 @@ create_chunked_dataset(const char *filename, int chunk_factor, write_type write_
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
VRFY((file_id >= 0), "H5Fcreate");
+ /* Check if native VOL is being used */
+ VRFY((h5_using_native_vol(H5P_DEFAULT, file_id, &vol_is_native) >= 0), "h5_using_native_vol");
+
/* Modify dataset creation properties, i.e. enable chunking */
cparms = H5Pcreate(H5P_DATASET_CREATE);
VRFY((cparms >= 0), "");
@@ -142,10 +147,12 @@ create_chunked_dataset(const char *filename, int chunk_factor, write_type write_
VRFY((hrc >= 0), "");
file_id = -1;
- /* verify file size */
- filesize = get_filesize(filename);
- est_filesize = (MPI_Offset)nchunks * (MPI_Offset)CHUNK_SIZE * (MPI_Offset)sizeof(unsigned char);
- VRFY((filesize >= est_filesize), "file size check");
+ if (vol_is_native) {
+ /* verify file size */
+ filesize = get_filesize(filename);
+ est_filesize = (MPI_Offset)nchunks * (MPI_Offset)CHUNK_SIZE * (MPI_Offset)sizeof(unsigned char);
+ VRFY((filesize >= est_filesize), "file size check");
+ }
}
/* Make sure all processes are done before exiting this routine. Otherwise,
@@ -187,6 +194,8 @@ parallel_access_dataset(const char *filename, int chunk_factor, access_type acti
MPI_Offset filesize, /* actual file size */
est_filesize; /* estimated file size */
+ bool vol_is_native;
+
/* Initialize MPI */
MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
@@ -206,12 +215,20 @@ parallel_access_dataset(const char *filename, int chunk_factor, access_type acti
VRFY((*file_id >= 0), "");
}
+ /* Check if native VOL is being used */
+ VRFY((h5_using_native_vol(H5P_DEFAULT, *file_id, &vol_is_native) >= 0), "h5_using_native_vol");
+
/* Open dataset*/
if (*dataset < 0) {
*dataset = H5Dopen2(*file_id, DSET_NAME, H5P_DEFAULT);
VRFY((*dataset >= 0), "");
}
+ /* Make sure all processes are done before continuing. Otherwise, one
+ * process could change the dataset extent before another finishes opening
+ * it, resulting in only some of the processes calling H5Dset_extent(). */
+ MPI_Barrier(MPI_COMM_WORLD);
+
memspace = H5Screate_simple(1, chunk_dims, NULL);
VRFY((memspace >= 0), "");
@@ -277,10 +294,12 @@ parallel_access_dataset(const char *filename, int chunk_factor, access_type acti
VRFY((hrc >= 0), "");
*file_id = -1;
- /* verify file size */
- filesize = get_filesize(filename);
- est_filesize = (MPI_Offset)nchunks * (MPI_Offset)CHUNK_SIZE * (MPI_Offset)sizeof(unsigned char);
- VRFY((filesize >= est_filesize), "file size check");
+ if (vol_is_native) {
+ /* verify file size */
+ filesize = get_filesize(filename);
+ est_filesize = (MPI_Offset)nchunks * (MPI_Offset)CHUNK_SIZE * (MPI_Offset)sizeof(unsigned char);
+ VRFY((filesize >= est_filesize), "file size check");
+ }
/* Can close some plists */
hrc = H5Pclose(access_plist);
@@ -448,6 +467,19 @@ test_chunk_alloc(void)
MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+ /* Make sure the connector supports the API functions being tested */
+ if (!(vol_cap_flags_g & H5VL_CAP_FLAG_FILE_BASIC) || !(vol_cap_flags_g & H5VL_CAP_FLAG_DATASET_BASIC) ||
+ !(vol_cap_flags_g & H5VL_CAP_FLAG_DATASET_MORE)) {
+ if (MAINPROCESS) {
+ puts("SKIPPED");
+ printf(" API functions for basic file, dataset, or dataset more aren't supported with this "
+ "connector\n");
+ fflush(stdout);
+ }
+
+ return;
+ }
+
filename = (const char *)GetTestParameters();
if (VERBOSE_MED)
printf("Extend Chunked allocation test on file %s\n", filename);
@@ -530,6 +562,7 @@ test_chunk_alloc_incr_ser_to_par(void)
int *data = NULL;
int *correct_data = NULL;
int *read_data = NULL;
+ bool vol_is_native;
MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
@@ -598,6 +631,9 @@ test_chunk_alloc_incr_ser_to_par(void)
fid = H5Fopen(filename, H5F_ACC_RDWR, fapl_id);
VRFY((fid >= 0), "H5Fopen");
+ /* Check if native VOL is being used */
+ VRFY((h5_using_native_vol(H5P_DEFAULT, fid, &vol_is_native) >= 0), "h5_using_native_vol");
+
data = malloc((dset_dims[0] / (hsize_t)mpi_size) * sizeof(int));
VRFY(data, "malloc");
read_data = malloc(dset_dims[0] * sizeof(int));
@@ -613,13 +649,17 @@ test_chunk_alloc_incr_ser_to_par(void)
dset_id = H5Dopen2(fid, "dset_no_filter", H5P_DEFAULT);
VRFY((dset_id >= 0), "H5Dopen2");
- ret = H5Dget_space_status(dset_id, &space_status);
- VRFY((ret == SUCCEED), "H5Dread");
+ if (vol_is_native) {
+ ret = H5Dget_space_status(dset_id, &space_status);
+ VRFY((ret == SUCCEED), "H5Dread");
- VRFY((space_status == H5D_SPACE_STATUS_ALLOCATED), "file space allocation status verification succeeded");
+ VRFY((space_status == H5D_SPACE_STATUS_ALLOCATED),
+ "file space allocation status verification succeeded");
- alloc_size = H5Dget_storage_size(dset_id);
- VRFY(((dset_dims[0] * sizeof(int)) == alloc_size), "file space allocation size verification succeeded");
+ alloc_size = H5Dget_storage_size(dset_id);
+ VRFY(((dset_dims[0] * sizeof(int)) == alloc_size),
+ "file space allocation size verification succeeded");
+ }
memset(read_data, 255, dset_dims[0] * sizeof(int));
memset(correct_data, 0, dset_dims[0] * sizeof(int));
@@ -649,13 +689,17 @@ test_chunk_alloc_incr_ser_to_par(void)
MPI_Barrier(MPI_COMM_WORLD);
- ret = H5Dget_space_status(dset_id, &space_status);
- VRFY((ret == SUCCEED), "H5Dread");
+ if (vol_is_native) {
+ ret = H5Dget_space_status(dset_id, &space_status);
+ VRFY((ret == SUCCEED), "H5Dread");
- VRFY((space_status == H5D_SPACE_STATUS_ALLOCATED), "file space allocation status verification succeeded");
+ VRFY((space_status == H5D_SPACE_STATUS_ALLOCATED),
+ "file space allocation status verification succeeded");
- alloc_size = H5Dget_storage_size(dset_id);
- VRFY(((dset_dims[0] * sizeof(int)) == alloc_size), "file space allocation size verification succeeded");
+ alloc_size = H5Dget_storage_size(dset_id);
+ VRFY(((dset_dims[0] * sizeof(int)) == alloc_size),
+ "file space allocation size verification succeeded");
+ }
memset(read_data, 0, dset_dims[0] * sizeof(int));
memset(correct_data, 255, dset_dims[0] * sizeof(int));
@@ -680,14 +724,16 @@ test_chunk_alloc_incr_ser_to_par(void)
dset_id = H5Dopen2(fid, "dset_filter", H5P_DEFAULT);
VRFY((dset_id >= 0), "H5Dopen2");
- ret = H5Dget_space_status(dset_id, &space_status);
- VRFY((ret == SUCCEED), "H5Dread");
+ if (vol_is_native) {
+ ret = H5Dget_space_status(dset_id, &space_status);
+ VRFY((ret == SUCCEED), "H5Dread");
- VRFY((space_status == H5D_SPACE_STATUS_NOT_ALLOCATED),
- "file space allocation status verification succeeded");
+ VRFY((space_status == H5D_SPACE_STATUS_NOT_ALLOCATED),
+ "file space allocation status verification succeeded");
- alloc_size = H5Dget_storage_size(dset_id);
- VRFY((0 == alloc_size), "file space allocation size verification succeeded");
+ alloc_size = H5Dget_storage_size(dset_id);
+ VRFY((0 == alloc_size), "file space allocation size verification succeeded");
+ }
memset(read_data, 255, dset_dims[0] * sizeof(int));
memset(correct_data, 0, dset_dims[0] * sizeof(int));
@@ -723,13 +769,17 @@ test_chunk_alloc_incr_ser_to_par(void)
MPI_Barrier(MPI_COMM_WORLD);
- ret = H5Dget_space_status(dset_id, &space_status);
- VRFY((ret == SUCCEED), "H5Dread");
+ if (vol_is_native) {
+ ret = H5Dget_space_status(dset_id, &space_status);
+ VRFY((ret == SUCCEED), "H5Dread");
- VRFY((space_status == H5D_SPACE_STATUS_ALLOCATED), "file space allocation status verification succeeded");
+ VRFY((space_status == H5D_SPACE_STATUS_ALLOCATED),
+ "file space allocation status verification succeeded");
- alloc_size = H5Dget_storage_size(dset_id);
- VRFY(((dset_dims[0] * sizeof(int)) == alloc_size), "file space allocation size verification succeeded");
+ alloc_size = H5Dget_storage_size(dset_id);
+ VRFY(((dset_dims[0] * sizeof(int)) == alloc_size),
+ "file space allocation size verification succeeded");
+ }
memset(read_data, 0, dset_dims[0] * sizeof(int));
memset(correct_data, 255, dset_dims[0] * sizeof(int));