summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Makefile.in9
-rw-r--r--test/dangle.c303
2 files changed, 309 insertions, 3 deletions
diff --git a/test/Makefile.in b/test/Makefile.in
index 4054f47..5755d77 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -28,7 +28,7 @@ TEST_PROGS=testhdf5 lheap ohdr stab gheap hyperslab istore bittests dtypes
dsets cmpd_dset extend external links unlink big mtime fillval mount \
flush1 flush2 enum gass_write gass_read gass_append set_extent \
srb_write srb_append srb_read ttsafe stream_test getname file_handle \
- ntypes
+ ntypes dangle
TIMINGS=testmeta
@@ -60,7 +60,7 @@ MOSTLYCLEAN=cmpd_dset.h5 compact_dataset.h5 dataset.h5 extend.h5 istore.h5 \
tmisc4b.h5 tmisc5.h5 tmisc6.h5 tmisc7.h5 tmisc8.h5 tmisc9.h5 \
set_extent_read.h5 set_extent_create.h5 getname.h5 getname1.h5 \
getname2.h5 getname3.h5 sec2_file.h5 family_file000[0-3][0-9].h5 \
- multi_file-[rs].h5 core_file new_move_[ab].h5
+ multi_file-[rs].h5 core_file new_move_[ab].h5 ntypes.h5 dangle.h5
CLEAN=$(TIMINGS)
@@ -78,7 +78,7 @@ TEST_SRC=big.c bittests.c cmpd_dset.c dsets.c dtypes.c extend.c \
ttsafe_dcreate.c ttsafe_error.c ttsafe_cancel.c ttsafe_acreate.c \
gass_write.c gass_read.c gass_append.c srb_read.c srb_write.c \
srb_append.c stream_test.c set_extent.c getname.c file_handle.c \
- ntypes.c
+ ntypes.c dangle.c
TEST_OBJ=$(TEST_SRC:.c=.lo)
@@ -212,4 +212,7 @@ file_handle: file_handle.lo
ntypes: ntypes.lo
@$(LT_LINK_EXE) $(CFLAGS) -o $@ ntypes.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+dangle: dangle.lo
+ @$(LT_LINK_EXE) $(CFLAGS) -o $@ dangle.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
@CONCLUDE@
diff --git a/test/dangle.c b/test/dangle.c
new file mode 100644
index 0000000..8425caa
--- /dev/null
+++ b/test/dangle.c
@@ -0,0 +1,303 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
+ * Tuesday, May 13, 2003
+ *
+ * Purpose: Test dangling IDs
+ */
+#include "h5test.h"
+#include "H5private.h"
+
+const char *FILENAME[] = {
+ "dangle",
+ NULL
+};
+
+#define DSETNAME "Dataset"
+#define GROUPNAME "Group"
+#define TYPENAME "Type"
+
+
+/*-------------------------------------------------------------------------
+ * Function: get_file_size
+ *
+ * Purpose: Get the current size of a file (in bytes)
+ *
+ * Return: Success: Size of file in bytes (could be 0)
+ * Failure: 0
+ *
+ * Programmer: Quincey Koziol
+ * Saturday, March 22, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static off_t
+get_file_size(const char *filename)
+{
+ h5_stat_t sb;
+
+ /* Get the file's statistics */
+ if (HDstat(filename, &sb)>=0)
+ return(sb.st_size);
+
+ return(0);
+} /* end get_file_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_dangle_dataset
+ *
+ * Purpose: Check for dangling dataset IDs causing problems on library
+ * shutdown
+ *
+ * Return: Success: zero
+ * Failure: non-zero
+ *
+ * Programmer: Quincey Koziol
+ * Tuesday, May 13, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_dangle_dataset(void)
+{
+ char filename[1024];
+ off_t file_size; /* Size of file */
+ hid_t fid; /* File ID */
+ hid_t dsid; /* Dataset ID */
+ hid_t sid; /* Dataspace ID */
+
+ TESTING("dangling dataset IDs");
+
+ if(H5open()<0)
+ TEST_ERROR;
+
+ h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
+ if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0)
+ TEST_ERROR;
+
+ if((sid = H5Screate (H5S_SCALAR))<0)
+ TEST_ERROR;
+
+ if((dsid = H5Dcreate (fid, DSETNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT))<0)
+ TEST_ERROR;
+
+ if(H5Dclose(dsid)<0)
+ TEST_ERROR;
+
+ if((dsid = H5Dopen (fid, DSETNAME))<0)
+ TEST_ERROR;
+
+ if((dsid = H5Dopen (fid, DSETNAME))<0)
+ TEST_ERROR;
+
+ if(H5Sclose(sid)<0)
+ TEST_ERROR;
+
+ if(H5Fclose(fid)<0)
+ TEST_ERROR;
+
+ if(H5close()<0)
+ TEST_ERROR;
+
+ if((file_size=get_file_size(filename))==0)
+ TEST_ERROR;
+
+ /* Clean up temporary file */
+ HDremove(filename);
+
+ PASSED();
+ return 0;
+
+error:
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_dangle_group
+ *
+ * Purpose: Check for dangling group IDs causing problems on library
+ * shutdown
+ *
+ * Return: Success: zero
+ * Failure: non-zero
+ *
+ * Programmer: Quincey Koziol
+ * Tuesday, May 13, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_dangle_group(void)
+{
+ char filename[1024];
+ off_t file_size; /* Size of file */
+ hid_t fid; /* File ID */
+ hid_t gid; /* Group ID */
+
+ TESTING("dangling group IDs");
+
+ if(H5open()<0)
+ TEST_ERROR;
+
+ h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
+ if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0)
+ TEST_ERROR;
+
+ if((gid = H5Gcreate (fid, GROUPNAME, 0))<0)
+ TEST_ERROR;
+
+ if(H5Gclose(gid)<0)
+ TEST_ERROR;
+
+ if((gid = H5Gopen (fid, GROUPNAME))<0)
+ TEST_ERROR;
+
+ if((gid = H5Gopen (fid, GROUPNAME))<0)
+ TEST_ERROR;
+
+ if(H5Fclose(fid)<0)
+ TEST_ERROR;
+
+ if(H5close()<0)
+ TEST_ERROR;
+
+ if((file_size=get_file_size(filename))==0)
+ TEST_ERROR;
+
+ /* Clean up temporary file */
+ HDremove(filename);
+
+ PASSED();
+ return 0;
+
+error:
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_dangle_datatype
+ *
+ * Purpose: Check for dangling datatype IDs causing problems on library
+ * shutdown
+ *
+ * Return: Success: zero
+ * Failure: non-zero
+ *
+ * Programmer: Quincey Koziol
+ * Tuesday, May 13, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_dangle_datatype(void)
+{
+ char filename[1024];
+ off_t file_size; /* Size of file */
+ hid_t fid; /* File ID */
+ hid_t tid; /* Datatype ID */
+
+ TESTING("dangling datatype IDs");
+
+ if(H5open()<0)
+ TEST_ERROR;
+
+ h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
+ if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0)
+ TEST_ERROR;
+
+ if((tid = H5Tcopy (H5T_NATIVE_INT))<0)
+ TEST_ERROR;
+
+ if(H5Tcommit(fid,TYPENAME,tid)<0)
+ TEST_ERROR;
+
+ if(H5Tclose(tid)<0)
+ TEST_ERROR;
+
+ if((tid = H5Topen (fid, TYPENAME))<0)
+ TEST_ERROR;
+
+ if((tid = H5Topen (fid, TYPENAME))<0)
+ TEST_ERROR;
+
+ if(H5Fclose(fid)<0)
+ TEST_ERROR;
+
+ if(H5close()<0)
+ TEST_ERROR;
+
+ if((file_size=get_file_size(filename))==0)
+ TEST_ERROR;
+
+ /* Clean up temporary file */
+ HDremove(filename);
+
+ PASSED();
+ return 0;
+
+error:
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose: Executes dangling ID tests
+ *
+ * Return: Success: zero
+ * Failure: non-zero
+ *
+ * Programmer: Quincey Koziol
+ * Tuesday, May 13, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+ int nerrors=0;
+
+ /* Run tests */
+ nerrors += test_dangle_dataset();
+ nerrors += test_dangle_group();
+ nerrors += test_dangle_datatype();
+
+ /* Check for errors */
+ if (nerrors)
+ goto error;
+ puts("All dangling ID tests passed.");
+
+ return 0;
+
+error:
+ puts("***** DANGLING ID TESTS FAILED *****");
+ return 1;
+}
+