summaryrefslogtreecommitdiffstats
path: root/testpar
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2015-03-04 00:27:40 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2015-03-04 00:27:40 (GMT)
commit5b294640c003dac45c2cc489793950207bf63c8f (patch)
treeef451f922a5242888c2cd63552212fa278284162 /testpar
parentdc059968de3823ffa1b0008c14b7e7e46c1fb8d8 (diff)
parent6ee9ea656fad6f408e81bd995eb465e0dd4ce0db (diff)
downloadhdf5-5b294640c003dac45c2cc489793950207bf63c8f.zip
hdf5-5b294640c003dac45c2cc489793950207bf63c8f.tar.gz
hdf5-5b294640c003dac45c2cc489793950207bf63c8f.tar.bz2
[svn-r26350] Merge of r26273-26348 from the trunk.
Tested on: h5committest
Diffstat (limited to 'testpar')
-rw-r--r--testpar/CMakeLists.txt2
-rw-r--r--testpar/Makefile.am5
-rw-r--r--testpar/t_dset.c2
-rw-r--r--testpar/t_pflush1.c11
-rw-r--r--testpar/t_pflush2.c3
-rw-r--r--testpar/t_prestart.c138
-rw-r--r--testpar/t_pshutdown.c127
-rw-r--r--testpar/t_shapesame.c3
8 files changed, 275 insertions, 16 deletions
diff --git a/testpar/CMakeLists.txt b/testpar/CMakeLists.txt
index 11437c0..d1db0b7 100644
--- a/testpar/CMakeLists.txt
+++ b/testpar/CMakeLists.txt
@@ -46,6 +46,8 @@ set (H5P_TESTS
t_cache
t_pflush1
t_pflush2
+ t_pshutdown
+ t_prestart
t_shapesame
)
diff --git a/testpar/Makefile.am b/testpar/Makefile.am
index 448f745..1eae439 100644
--- a/testpar/Makefile.am
+++ b/testpar/Makefile.am
@@ -25,7 +25,7 @@ AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/test
# Test programs. These are our main targets.
#
-TEST_PROG_PARA=t_mpi testphdf5 t_cache t_pflush1 t_pflush2 t_shapesame
+TEST_PROG_PARA=t_mpi testphdf5 t_cache t_pflush1 t_pflush2 t_pshutdown t_prestart t_shapesame
check_PROGRAMS = $(TEST_PROG_PARA)
@@ -39,7 +39,8 @@ LDADD = $(LIBH5TEST) $(LIBHDF5)
# Temporary files
# MPItest.h5 is from t_mpi
# Para*.h5 are from testphdf
+# shutdown.h5 is from t_pshutdown
# go is used for debugging. See testphdf5.c.
-CHECK_CLEANFILES+=MPItest.h5 Para*.h5 CacheTestDummy.h5 go
+CHECK_CLEANFILES+=MPItest.h5 Para*.h5 CacheTestDummy.h5 shutdown.h5 go
include $(top_srcdir)/config/conclude.am
diff --git a/testpar/t_dset.c b/testpar/t_dset.c
index c8e8532..ae022fb 100644
--- a/testpar/t_dset.c
+++ b/testpar/t_dset.c
@@ -2502,6 +2502,7 @@ extend_readAll(void)
* Example of using the parallel HDF5 library to read a compressed
* dataset in an HDF5 file with collective parallel access support.
*/
+#ifdef H5_HAVE_FILTER_DEFLATE
void
compress_readAll(void)
{
@@ -2655,6 +2656,7 @@ compress_readAll(void)
if(data_read) HDfree(data_read);
if(data_orig) HDfree(data_orig);
}
+#endif /* H5_HAVE_FILTER_DEFLATE */
/*
* Part 4--Non-selection for chunked dataset
diff --git a/testpar/t_pflush1.c b/testpar/t_pflush1.c
index ebe5c38..1bcfeb8 100644
--- a/testpar/t_pflush1.c
+++ b/testpar/t_pflush1.c
@@ -164,12 +164,9 @@ main(int argc, char* argv[])
} /* end else */
/*
- * Some systems like Linux with mpich, if you just _exit without MPI_Finalize
- * called, it would terminate but left the launching process waiting forever.
- * OTHO, some systems like AIX do not like files not closed when MPI_Finalize
- * is called. So, we need to get the MPI file handles, close them by hand,
- * then MPI_Finalize. Then the _exit is still needed to stop at_exit from
- * happening in some systems.
+ * Some systems like AIX do not like files not closed when MPI_Finalize
+ * is called. So, we need to get the MPI file handles, close them by hand.
+ * Then the _exit is still needed to stop at_exit from happening in some systems.
* Note that MPIO VFD returns the address of the file-handle in the VFD struct
* because MPI_File_close wants to modify the file-handle variable.
*/
@@ -195,13 +192,11 @@ main(int argc, char* argv[])
fflush(stdout);
fflush(stderr);
- MPI_Finalize();
HD_exit(0);
error:
fflush(stdout);
fflush(stderr);
- MPI_Finalize();
HD_exit(1);
}
diff --git a/testpar/t_pflush2.c b/testpar/t_pflush2.c
index e450f75..03f7c82 100644
--- a/testpar/t_pflush2.c
+++ b/testpar/t_pflush2.c
@@ -209,9 +209,6 @@ main(int argc, char* argv[])
puts(" Test not compatible with current Virtual File Driver");
}
- /* close HDF5 library */
- H5close();
-
MPI_Finalize();
return 0;
diff --git a/testpar/t_prestart.c b/testpar/t_prestart.c
new file mode 100644
index 0000000..fab4a7c
--- /dev/null
+++ b/testpar/t_prestart.c
@@ -0,0 +1,138 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Mohamad Chaarawi
+ * February 2015
+ *
+ * Purpose: This test opens a file created by the t_pshutdown program
+ * and makes sure the objects created are there.
+ */
+
+#include "testphdf5.h"
+
+int nerrors = 0; /* errors count */
+
+const char *FILENAME[] = {
+ "shutdown",
+ NULL
+};
+
+int
+main (int argc, char **argv)
+{
+ hid_t file_id, dset_id, grp_id;
+ hid_t fapl, sid, mem_dataspace;
+ herr_t ret;
+ char filename[1024];
+ int mpi_size, mpi_rank, ndims, i, j;
+ MPI_Comm comm = MPI_COMM_WORLD;
+ MPI_Info info = MPI_INFO_NULL;
+ hsize_t dims[RANK];
+ hsize_t start[RANK];
+ hsize_t count[RANK];
+ hsize_t stride[RANK];
+ hsize_t block[RANK];
+ DATATYPE *data_array = NULL, *dataptr; /* data buffer */
+
+ MPI_Init(&argc, &argv);
+ MPI_Comm_size(comm, &mpi_size);
+ MPI_Comm_rank(comm, &mpi_rank);
+
+ if(MAINPROCESS)
+ TESTING("proper shutdown of HDF5 library");
+
+ /* Set up file access property list with parallel I/O access */
+ fapl = H5Pcreate(H5P_FILE_ACCESS);
+ VRFY((fapl >= 0), "H5Pcreate succeeded");
+ ret = H5Pset_fapl_mpio(fapl, comm, info);
+ VRFY((ret >= 0), "");
+
+ h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+ file_id = H5Fopen(filename, H5F_ACC_RDONLY, fapl);
+ VRFY((file_id >= 0), "H5Fopen succeeded");
+
+ grp_id = H5Gopen2(file_id, "Group", H5P_DEFAULT);
+ VRFY((grp_id >= 0), "H5Gopen succeeded");
+
+ dset_id = H5Dopen2(grp_id, "Dataset", H5P_DEFAULT);
+ VRFY((dset_id >= 0), "H5Dopen succeeded");
+
+ sid = H5Dget_space(dset_id);
+ VRFY((dset_id >= 0), "H5Dget_space succeeded");
+
+ ndims = H5Sget_simple_extent_dims(sid, dims, NULL);
+ VRFY((ndims == 2), "H5Sget_simple_extent_dims succeeded");
+ VRFY(dims[0] == ROW_FACTOR*mpi_size, "Wrong dataset dimensions");
+ VRFY(dims[1] == COL_FACTOR*mpi_size, "Wrong dataset dimensions");
+
+ /* allocate memory for data buffer */
+ data_array = (DATATYPE *)HDmalloc(dims[0]*dims[1]*sizeof(DATATYPE));
+ VRFY((data_array != NULL), "data_array HDmalloc succeeded");
+
+ /* Each process takes a slabs of rows. */
+ block[0] = dims[0]/mpi_size;
+ block[1] = dims[1];
+ stride[0] = block[0];
+ stride[1] = block[1];
+ count[0] = 1;
+ count[1] = 1;
+ start[0] = mpi_rank*block[0];
+ start[1] = 0;
+
+ ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, start, stride, count, block);
+ VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+ /* create a memory dataspace independently */
+ mem_dataspace = H5Screate_simple (RANK, block, NULL);
+ VRFY((mem_dataspace >= 0), "");
+
+ /* write data independently */
+ ret = H5Dread(dset_id, H5T_NATIVE_INT, mem_dataspace, sid,
+ H5P_DEFAULT, data_array);
+ VRFY((ret >= 0), "H5Dwrite succeeded");
+
+ dataptr = data_array;
+
+ for (i=0; i < block[0]; i++){
+ for (j=0; j < block[1]; j++){
+ if(*dataptr != mpi_rank+1) {
+ printf("Dataset Verify failed at [%lu][%lu](row %lu, col %lu): expect %d, got %d\n",
+ (unsigned long)i, (unsigned long)j,
+ (unsigned long)(i+start[0]), (unsigned long)(j+start[1]),
+ mpi_rank+1, *(dataptr));
+ nerrors ++;
+ }
+ dataptr++;
+ }
+ }
+ MPI_Finalize();
+ HDremove(filename);
+
+ /* release data buffers */
+ if(data_array)
+ HDfree(data_array);
+
+ nerrors += GetTestNumErrs();
+
+ if(MAINPROCESS) {
+ if(0 == nerrors)
+ PASSED()
+ else
+ H5_FAILED()
+ }
+
+ return (nerrors!=0);
+}
diff --git a/testpar/t_pshutdown.c b/testpar/t_pshutdown.c
new file mode 100644
index 0000000..be9734f
--- /dev/null
+++ b/testpar/t_pshutdown.c
@@ -0,0 +1,127 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Mohamad Chaarawi
+ * February 2015
+ *
+ * Purpose: This test creates a file and a bunch of objects in the
+ * file and then calls MPI_Finalize without closing anything. The
+ * library should exercise the attribute callback destroy attached to
+ * MPI_COMM_SELF and terminate the HDF5 library closing all open
+ * objects. The t_prestart test will read back the file and make sure
+ * all created objects are there.
+ */
+
+#include "testphdf5.h"
+
+int nerrors = 0; /* errors count */
+
+const char *FILENAME[] = {
+ "shutdown",
+ NULL
+};
+
+int
+main (int argc, char **argv)
+{
+ hid_t file_id, dset_id, grp_id;
+ hid_t fapl, sid, mem_dataspace;
+ hsize_t dims[RANK], i;
+ herr_t ret;
+ char filename[1024];
+ int mpi_size, mpi_rank;
+ MPI_Comm comm = MPI_COMM_WORLD;
+ MPI_Info info = MPI_INFO_NULL;
+ hsize_t start[RANK];
+ hsize_t count[RANK];
+ hsize_t stride[RANK];
+ hsize_t block[RANK];
+ DATATYPE *data_array = NULL; /* data buffer */
+
+ MPI_Init(&argc, &argv);
+ MPI_Comm_size(comm, &mpi_size);
+ MPI_Comm_rank(comm, &mpi_rank);
+
+ if(MAINPROCESS)
+ TESTING("proper shutdown of HDF5 library");
+
+ /* Set up file access property list with parallel I/O access */
+ fapl = H5Pcreate(H5P_FILE_ACCESS);
+ VRFY((fapl >= 0), "H5Pcreate succeeded");
+ ret = H5Pset_fapl_mpio(fapl, comm, info);
+ VRFY((ret >= 0), "");
+
+ h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+ file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+ VRFY((file_id >= 0), "H5Fcreate succeeded");
+ grp_id = H5Gcreate2(file_id, "Group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ VRFY((grp_id >= 0), "H5Gcreate succeeded");
+
+ dims[0] = ROW_FACTOR*mpi_size;
+ dims[1] = COL_FACTOR*mpi_size;
+ sid = H5Screate_simple (RANK, dims, NULL);
+ VRFY((sid >= 0), "H5Screate_simple succeeded");
+
+ dset_id = H5Dcreate2(grp_id, "Dataset", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ VRFY((dset_id >= 0), "H5Dcreate succeeded");
+
+ /* allocate memory for data buffer */
+ data_array = (DATATYPE *)HDmalloc(dims[0]*dims[1]*sizeof(DATATYPE));
+ VRFY((data_array != NULL), "data_array HDmalloc succeeded");
+
+ /* Each process takes a slabs of rows. */
+ block[0] = dims[0]/mpi_size;
+ block[1] = dims[1];
+ stride[0] = block[0];
+ stride[1] = block[1];
+ count[0] = 1;
+ count[1] = 1;
+ start[0] = mpi_rank*block[0];
+ start[1] = 0;
+
+ /* put some trivial data in the data_array */
+ for(i=0 ; i<dims[0]*dims[1]; i++)
+ data_array[i] = mpi_rank + 1;
+
+ ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, start, stride, count, block);
+ VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+ /* create a memory dataspace independently */
+ mem_dataspace = H5Screate_simple (RANK, block, NULL);
+ VRFY((mem_dataspace >= 0), "");
+
+ /* write data independently */
+ ret = H5Dwrite(dset_id, H5T_NATIVE_INT, mem_dataspace, sid,
+ H5P_DEFAULT, data_array);
+ VRFY((ret >= 0), "H5Dwrite succeeded");
+
+ /* release data buffers */
+ if(data_array)
+ HDfree(data_array);
+
+ MPI_Finalize();
+
+ nerrors += GetTestNumErrs();
+
+ if(MAINPROCESS) {
+ if(0 == nerrors)
+ PASSED()
+ else
+ H5_FAILED()
+ }
+
+ return (nerrors!=0);
+}
diff --git a/testpar/t_shapesame.c b/testpar/t_shapesame.c
index d167687..9088470 100644
--- a/testpar/t_shapesame.c
+++ b/testpar/t_shapesame.c
@@ -5142,10 +5142,7 @@ int main(int argc, char **argv)
printf("Shape Same tests finished with no errors\n");
printf("===================================\n");
}
- /* close HDF5 library */
- H5close();
- /* MPI_Finalize must be called AFTER H5close which may use MPI calls */
MPI_Finalize();
/* cannot just return (nerrors) because exit code is limited to 1byte */