diff options
-rw-r--r-- | test/Makefile.am | 6 | ||||
-rw-r--r-- | test/Makefile.in | 4 | ||||
-rw-r--r-- | test/tfile.c | 56 |
3 files changed, 50 insertions, 16 deletions
diff --git a/test/Makefile.am b/test/Makefile.am index d9f3034..2d8cb25 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -104,9 +104,9 @@ flush2.chkexe_: flush1.chkexe_ # the temporary file name in ways that the makefile is not aware of. CHECK_CLEANFILES+=cmpd_dset.h5 compact_dataset.h5 dataset.h5 dset_offset.h5 \ max_compact_dataset.h5 simple.h5 set_local.h5 random_chunks.h5 \ - huge_chunks.h5 chunk_cache.h5 big_chunk.h5 \ - chunk_expand.h5 extend.h5 istore.h5 extlinks*.h5 frspace.h5 \ - links*.h5 tfile[1-4].h5 th5s[1-3].h5 lheap.h5 fheap.h5 ohdr.h5 \ + huge_chunks.h5 chunk_cache.h5 big_chunk.h5 chunk_expand.h5 \ + extend.h5 istore.h5 extlinks*.h5 frspace.h5 links*.h5 \ + sys_file1 tfile[1-4].h5 th5s[1-3].h5 lheap.h5 fheap.h5 ohdr.h5 \ stab.h5 extern_[1-3].h5 extern_[1-4][ab].raw gheap[0-4].h5 \ dt_arith[1-2] links.h5 links[0-6]*.h5 extlinks[0-15].h5 tmp \ big.data big[0-9][0-9][0-9][0-9][0-9].h5 \ diff --git a/test/Makefile.in b/test/Makefile.in index d03811f..777b458 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -642,8 +642,8 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog cmpd_dset.h5 \ max_compact_dataset.h5 simple.h5 set_local.h5 random_chunks.h5 \ huge_chunks.h5 chunk_cache.h5 big_chunk.h5 chunk_expand.h5 \ extend.h5 istore.h5 extlinks*.h5 frspace.h5 links*.h5 \ - tfile[1-4].h5 th5s[1-3].h5 lheap.h5 fheap.h5 ohdr.h5 stab.h5 \ - extern_[1-3].h5 extern_[1-4][ab].raw gheap[0-4].h5 \ + sys_file1 tfile[1-4].h5 th5s[1-3].h5 lheap.h5 fheap.h5 ohdr.h5 \ + stab.h5 extern_[1-3].h5 extern_[1-4][ab].raw gheap[0-4].h5 \ dt_arith[1-2] links.h5 links[0-6]*.h5 extlinks[0-15].h5 tmp \ big.data big[0-9][0-9][0-9][0-9][0-9].h5 stdio.h5 sec2.h5 \ dtypes[1-8].h5 dt_arith[1-2].h5 tattr.h5 tselect.h5 mtime.h5 \ diff --git a/test/tfile.c b/test/tfile.c index 0d07d1b..b8902e3 100644 --- a/test/tfile.c +++ b/test/tfile.c @@ -49,6 +49,7 @@ #define F1_SYM_LEAF_K 4 #define F1_SYM_INTERN_K 16 #define FILE1 "tfile1.h5" +#define SFILE1 "sys_file1" #define F2_USERBLOCK_SIZE (hsize_t)512 #define F2_OFFSET_SIZE 8 @@ -2074,20 +2075,15 @@ test_cached_stab_info(void) ** June 29, 2009 ** ** Modification: Raymond Lu -** Skip this function for OpenVMS. +** I added a test with the system functions to make +** sure the stat function behaves as we expected. ** 17 September 2009 *****************************************************************/ -#ifdef H5_VMS -static void -test_rw_noupdate(void) -{ - /* Output message about test being performed */ - MESSAGE(1, ("Testing to verify that nothing is written if nothing is changed. This test is skipped on OpenVMS because the modification time from stat is the same as the last access time.\n")); -} /* end test_rw_noupdate() */ -#else static void test_rw_noupdate(void) { + int fid; /* File ID from system-created file */ + struct stat sys_sb1, sys_sb2; /* Info from the system stat */ hid_t file_id; /* HDF5 File ID */ h5_stat_t sb1, sb2; /* Info from 'stat' call */ double diff; /* Difference in modification times */ @@ -2096,7 +2092,42 @@ test_rw_noupdate(void) /* Output message about test being performed */ MESSAGE(5, ("Testing to verify that nothing is written if nothing is changed.\n")); - /* Create and Close File */ + /* First make sure the stat function behaves as we expect - the modification time + * is the time that the file was modified last time. */ + fid = open(SFILE1, O_RDWR | O_CREAT | O_TRUNC, 0666); + CHECK(fid, FAIL, "open"); + ret = close(fid); + CHECK(ret, FAIL, "close"); + + /* Determine File's Initial Timestamp */ + ret = stat(SFILE1, &sys_sb1); + VERIFY(ret, 0, "stat"); + + /* Wait for 2 seconds */ + /* This ensures a system time difference between the two file accesses */ + sleep(2); + + fid = open(SFILE1, O_RDWR); + CHECK(fid, FAIL, "open"); + ret = close(fid); + CHECK(ret, FAIL, "close"); + + /* Determine File's New Timestamp */ + ret = stat(SFILE1, &sys_sb2); + VERIFY(ret, 0, "stat"); + + /* Ensure That Timestamps Are Equal */ + diff = difftime(sys_sb2.st_mtime, sys_sb1.st_mtime); + + if(!DBL_ABS_EQUAL(diff, 0.0)) { + /* Output message about test being performed */ + MESSAGE(1, ("Testing to verify that nothing is written if nothing is changed: This test is skipped on this system because the modification time from stat is the same as the last access time (We know OpenVMS behaves in this way).\n")); + + goto done; + } + + /* Then we can test with a HDF5 file */ + /* Create and Close a HDF5 File */ file_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); CHECK(file_id, FAIL, "H5Fcreate"); ret = H5Fclose(file_id); @@ -2124,8 +2155,10 @@ test_rw_noupdate(void) diff = HDdifftime(sb2.st_mtime, sb1.st_mtime); ret = (diff > 0.0); VERIFY(ret, 0, "Timestamp"); + +done: + ; /* do nothing */ } /* end test_rw_noupdate() */ -#endif /**************************************************************** ** @@ -2532,6 +2565,7 @@ test_file(void) void cleanup_file(void) { + HDremove(SFILE1); HDremove(FILE1); HDremove(FILE2); HDremove(FILE3); |