summaryrefslogtreecommitdiffstats
path: root/test/dangle.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2003-05-13 20:07:05 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2003-05-13 20:07:05 (GMT)
commitf3999dd43097ba521f875fcc8544c46018cfc501 (patch)
tree0daf76a02cb9f98bd7433215bbf8085cf7838b41 /test/dangle.c
parentc09dbf51850ad732c31e206c4841becf3ece067b (diff)
downloadhdf5-f3999dd43097ba521f875fcc8544c46018cfc501.zip
hdf5-f3999dd43097ba521f875fcc8544c46018cfc501.tar.gz
hdf5-f3999dd43097ba521f875fcc8544c46018cfc501.tar.bz2
[svn-r6870] Purpose:
New test Description: Added test to check for dangling objects being handled correctly by the library. Platforms tested: FreeBSD 4.8 (sleipnir) h5committested
Diffstat (limited to 'test/dangle.c')
-rw-r--r--test/dangle.c303
1 files changed, 303 insertions, 0 deletions
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;
+}
+