mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-04-18 17:40:55 +08:00
[svn-r7054] Purpose:
Improved tests Description: Added test for dangling attributes. Also added code to test with weak, semi & strong file close degrees for all tests. Platforms tested: FreeBSD 4.8 (sleipnir) h5committest
This commit is contained in:
parent
4e3716dd66
commit
f15b2278d6
270
test/dangle.c
270
test/dangle.c
@ -29,34 +29,7 @@ const char *FILENAME[] = {
|
||||
#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() */
|
||||
#define ATTRNAME "Attribute"
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -76,21 +49,30 @@ get_file_size(const char *filename)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
test_dangle_dataset(void)
|
||||
test_dangle_dataset(H5F_close_degree_t degree)
|
||||
{
|
||||
char filename[1024];
|
||||
off_t file_size; /* Size of file */
|
||||
hid_t fid; /* File ID */
|
||||
hid_t fapl; /* File access property list */
|
||||
hid_t dsid; /* Dataset ID */
|
||||
hid_t sid; /* Dataspace ID */
|
||||
|
||||
TESTING("dangling dataset IDs");
|
||||
TESTING(" dangling dataset IDs");
|
||||
|
||||
if(H5open()<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Create file access property list */
|
||||
if((fapl=H5Pcreate(H5P_FILE_ACCESS))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Set file close degree */
|
||||
if(H5Pset_fclose_degree(fapl,degree)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
|
||||
if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0)
|
||||
if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if((sid = H5Screate (H5S_SCALAR))<0)
|
||||
@ -102,6 +84,12 @@ test_dangle_dataset(void)
|
||||
if(H5Dclose(dsid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Try creating duplicate dataset */
|
||||
H5E_BEGIN_TRY {
|
||||
if((dsid = H5Dcreate (fid, DSETNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT))>=0)
|
||||
TEST_ERROR;
|
||||
} H5E_END_TRY;
|
||||
|
||||
if((dsid = H5Dopen (fid, DSETNAME))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
@ -111,13 +99,23 @@ test_dangle_dataset(void)
|
||||
if(H5Sclose(sid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5Fclose(fid)<0)
|
||||
if(degree==H5F_CLOSE_SEMI) {
|
||||
H5E_BEGIN_TRY {
|
||||
if(H5Fclose(fid)>=0)
|
||||
TEST_ERROR;
|
||||
} H5E_END_TRY;
|
||||
} /* end if */
|
||||
else
|
||||
if(H5Fclose(fid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5Pclose(fapl)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5close()<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if((file_size=get_file_size(filename))==0)
|
||||
if((file_size=h5_get_file_size(filename))==0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Clean up temporary file */
|
||||
@ -148,20 +146,29 @@ error:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
test_dangle_group(void)
|
||||
test_dangle_group(H5F_close_degree_t degree)
|
||||
{
|
||||
char filename[1024];
|
||||
off_t file_size; /* Size of file */
|
||||
hid_t fid; /* File ID */
|
||||
hid_t fapl; /* File access property list */
|
||||
hid_t gid; /* Group ID */
|
||||
|
||||
TESTING("dangling group IDs");
|
||||
TESTING(" dangling group IDs");
|
||||
|
||||
if(H5open()<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Create file access property list */
|
||||
if((fapl=H5Pcreate(H5P_FILE_ACCESS))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Set file close degree */
|
||||
if(H5Pset_fclose_degree(fapl,degree)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
|
||||
if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0)
|
||||
if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if((gid = H5Gcreate (fid, GROUPNAME, 0))<0)
|
||||
@ -170,19 +177,35 @@ test_dangle_group(void)
|
||||
if(H5Gclose(gid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Try creating duplicate group */
|
||||
H5E_BEGIN_TRY {
|
||||
if((gid = H5Gcreate (fid, GROUPNAME, 0))>=0)
|
||||
TEST_ERROR;
|
||||
} H5E_END_TRY;
|
||||
|
||||
if((gid = H5Gopen (fid, GROUPNAME))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if((gid = H5Gopen (fid, GROUPNAME))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5Fclose(fid)<0)
|
||||
if(degree==H5F_CLOSE_SEMI) {
|
||||
H5E_BEGIN_TRY {
|
||||
if(H5Fclose(fid)>=0)
|
||||
TEST_ERROR;
|
||||
} H5E_END_TRY;
|
||||
} /* end if */
|
||||
else
|
||||
if(H5Fclose(fid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5Pclose(fapl)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5close()<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if((file_size=get_file_size(filename))==0)
|
||||
if((file_size=h5_get_file_size(filename))==0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Clean up temporary file */
|
||||
@ -213,20 +236,29 @@ error:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
test_dangle_datatype(void)
|
||||
test_dangle_datatype(H5F_close_degree_t degree)
|
||||
{
|
||||
char filename[1024];
|
||||
off_t file_size; /* Size of file */
|
||||
hid_t fid; /* File ID */
|
||||
hid_t fapl; /* File access property list */
|
||||
hid_t tid; /* Datatype ID */
|
||||
|
||||
TESTING("dangling datatype IDs");
|
||||
TESTING(" dangling named datatype IDs");
|
||||
|
||||
if(H5open()<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Create file access property list */
|
||||
if((fapl=H5Pcreate(H5P_FILE_ACCESS))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Set file close degree */
|
||||
if(H5Pset_fclose_degree(fapl,degree)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
|
||||
if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0)
|
||||
if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if((tid = H5Tcopy (H5T_NATIVE_INT))<0)
|
||||
@ -238,19 +270,147 @@ test_dangle_datatype(void)
|
||||
if(H5Tclose(tid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Try creating duplicate named datatype */
|
||||
if((tid = H5Tcopy (H5T_NATIVE_INT))<0)
|
||||
TEST_ERROR;
|
||||
H5E_BEGIN_TRY {
|
||||
if(H5Tcommit(fid,TYPENAME,tid)>=0)
|
||||
TEST_ERROR;
|
||||
} H5E_END_TRY;
|
||||
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)
|
||||
if(degree==H5F_CLOSE_SEMI) {
|
||||
H5E_BEGIN_TRY {
|
||||
if(H5Fclose(fid)>=0)
|
||||
TEST_ERROR;
|
||||
} H5E_END_TRY;
|
||||
} /* end if */
|
||||
else
|
||||
if(H5Fclose(fid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5Pclose(fapl)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5close()<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if((file_size=get_file_size(filename))==0)
|
||||
if((file_size=h5_get_file_size(filename))==0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Clean up temporary file */
|
||||
HDremove(filename);
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
|
||||
error:
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_dangle_attribute
|
||||
*
|
||||
* Purpose: Check for dangling attribute IDs causing problems on library
|
||||
* shutdown
|
||||
*
|
||||
* Return: Success: zero
|
||||
* Failure: non-zero
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Wednesday, June 18, 2003
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
test_dangle_attribute(H5F_close_degree_t degree)
|
||||
{
|
||||
char filename[1024];
|
||||
off_t file_size; /* Size of file */
|
||||
hid_t fid; /* File ID */
|
||||
hid_t fapl; /* File access property list */
|
||||
hid_t dsid; /* Dataset ID */
|
||||
hid_t sid; /* Dataspace ID */
|
||||
hid_t aid; /* Attribute ID */
|
||||
|
||||
TESTING(" dangling attribute IDs");
|
||||
|
||||
if(H5open()<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Create file access property list */
|
||||
if((fapl=H5Pcreate(H5P_FILE_ACCESS))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Set file close degree */
|
||||
if(H5Pset_fclose_degree(fapl,degree)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
|
||||
if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<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;
|
||||
|
||||
/* Create an attribute on the dataset */
|
||||
if((aid = H5Acreate (dsid, ATTRNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Don't worry about writing the attribute - it will have a fill value */
|
||||
|
||||
/* Close the attribute on the dataset */
|
||||
if(H5Aclose (aid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Try creating duplicate attribute */
|
||||
H5E_BEGIN_TRY {
|
||||
if((aid = H5Acreate (dsid, ATTRNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT))>=0)
|
||||
TEST_ERROR;
|
||||
} H5E_END_TRY;
|
||||
|
||||
if((aid = H5Aopen_name (dsid, ATTRNAME))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if((aid = H5Aopen_name (dsid, ATTRNAME))<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5Dclose(dsid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5Sclose(sid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(degree==H5F_CLOSE_SEMI) {
|
||||
H5E_BEGIN_TRY {
|
||||
if(H5Fclose(fid)>=0)
|
||||
TEST_ERROR;
|
||||
} H5E_END_TRY;
|
||||
} /* end if */
|
||||
else
|
||||
if(H5Fclose(fid)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5Pclose(fapl)<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if(H5close()<0)
|
||||
TEST_ERROR;
|
||||
|
||||
if((file_size=h5_get_file_size(filename))==0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Clean up temporary file */
|
||||
@ -284,10 +444,26 @@ main(void)
|
||||
{
|
||||
int nerrors=0;
|
||||
|
||||
/* Run tests */
|
||||
nerrors += test_dangle_dataset();
|
||||
nerrors += test_dangle_group();
|
||||
nerrors += test_dangle_datatype();
|
||||
/* Run tests w/weak file close */
|
||||
puts("Testing dangling objects with weak file close:");
|
||||
nerrors += test_dangle_dataset(H5F_CLOSE_WEAK);
|
||||
nerrors += test_dangle_group(H5F_CLOSE_WEAK);
|
||||
nerrors += test_dangle_datatype(H5F_CLOSE_WEAK);
|
||||
nerrors += test_dangle_attribute(H5F_CLOSE_WEAK);
|
||||
|
||||
/* Run tests w/semi file close */
|
||||
puts("Testing dangling objects with semi file close:");
|
||||
nerrors += test_dangle_dataset(H5F_CLOSE_SEMI);
|
||||
nerrors += test_dangle_group(H5F_CLOSE_SEMI);
|
||||
nerrors += test_dangle_datatype(H5F_CLOSE_SEMI);
|
||||
nerrors += test_dangle_attribute(H5F_CLOSE_SEMI);
|
||||
|
||||
/* Run tests w/strong file close */
|
||||
puts("Testing dangling objects with strong file close:");
|
||||
nerrors += test_dangle_dataset(H5F_CLOSE_STRONG);
|
||||
nerrors += test_dangle_group(H5F_CLOSE_STRONG);
|
||||
nerrors += test_dangle_datatype(H5F_CLOSE_STRONG);
|
||||
nerrors += test_dangle_attribute(H5F_CLOSE_STRONG);
|
||||
|
||||
/* Check for errors */
|
||||
if (nerrors)
|
||||
|
Loading…
x
Reference in New Issue
Block a user