diff options
author | Neil Fortner <nfortne2@hdfgroup.org> | 2011-04-15 22:05:23 (GMT) |
---|---|---|
committer | Neil Fortner <nfortne2@hdfgroup.org> | 2011-04-15 22:05:23 (GMT) |
commit | 7610dd20af382ba6d784c95f6436bb56ff895e07 (patch) | |
tree | 4cd64207ed16a5ea96dc3669e2efa6a645c89f67 /test | |
parent | e1ed6bb771ad03d584b465036dba79cbad2254c5 (diff) | |
download | hdf5-7610dd20af382ba6d784c95f6436bb56ff895e07.zip hdf5-7610dd20af382ba6d784c95f6436bb56ff895e07.tar.gz hdf5-7610dd20af382ba6d784c95f6436bb56ff895e07.tar.bz2 |
[svn-r20529] Purpose: Add testing for bug 1864
Description:
Added internal tesitng routines to traverse a file and verify that symbol table
information is *always* cached, whenever possible. Added this check to the end
of many tests to check all the test files, right before the call to h5_cleanup.
Tested: jam, amani, heiwa (h5committest)
Diffstat (limited to 'test')
-rw-r--r-- | test/btree2.c | 3 | ||||
-rw-r--r-- | test/cmpd_dset.c | 3 | ||||
-rw-r--r-- | test/dsets.c | 3 | ||||
-rw-r--r-- | test/earray.c | 3 | ||||
-rw-r--r-- | test/efc.c | 3 | ||||
-rw-r--r-- | test/enum.c | 3 | ||||
-rw-r--r-- | test/extend.c | 3 | ||||
-rw-r--r-- | test/external.c | 4 | ||||
-rw-r--r-- | test/farray.c | 3 | ||||
-rw-r--r-- | test/fheap.c | 3 | ||||
-rw-r--r-- | test/fillval.c | 3 | ||||
-rw-r--r-- | test/filter_fail.c | 3 | ||||
-rw-r--r-- | test/freespace.c | 3 | ||||
-rw-r--r-- | test/getname.c | 3 | ||||
-rw-r--r-- | test/gheap.c | 4 | ||||
-rw-r--r-- | test/h5test.c | 94 | ||||
-rw-r--r-- | test/h5test.h | 1 | ||||
-rw-r--r-- | test/istore.c | 3 | ||||
-rw-r--r-- | test/lheap.c | 3 | ||||
-rw-r--r-- | test/links.c | 3 | ||||
-rw-r--r-- | test/links_env.c | 3 | ||||
-rw-r--r-- | test/mount.c | 3 | ||||
-rw-r--r-- | test/mtime.c | 3 | ||||
-rw-r--r-- | test/ntypes.c | 4 | ||||
-rwxr-xr-x | test/objcopy.c | 3 | ||||
-rw-r--r-- | test/ohdr.c | 3 | ||||
-rw-r--r-- | test/set_extent.c | 3 | ||||
-rw-r--r-- | test/stab.c | 3 | ||||
-rw-r--r-- | test/unlink.c | 3 |
29 files changed, 179 insertions, 0 deletions
diff --git a/test/btree2.c b/test/btree2.c index 1d1796c..d8abc84 100644 --- a/test/btree2.c +++ b/test/btree2.c @@ -7712,6 +7712,9 @@ main(void) nerrors += test_modify(fapl, &cparam, &tparam); } /* end for */ + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if(nerrors) goto error; diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c index 08890a8..d7f7842 100644 --- a/test/cmpd_dset.c +++ b/test/cmpd_dset.c @@ -2208,6 +2208,9 @@ main (int argc, char *argv[]) puts("Testing compound member ordering:"); nerrors += test_ooo_order(fname); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl_id) < 0 ? 1 : 0); + if (nerrors) { printf("***** %u FAILURE%s! *****\n", nerrors, 1==nerrors?"":"S"); diff --git a/test/dsets.c b/test/dsets.c index c1cac47..0c62736 100644 --- a/test/dsets.c +++ b/test/dsets.c @@ -8190,6 +8190,9 @@ main(void) /* Close 2nd FAPL */ if(H5Pclose(fapl2) < 0) TEST_ERROR + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if(nerrors) goto error; printf("All dataset tests passed.\n"); diff --git a/test/earray.c b/test/earray.c index d3b51a4..132913b 100644 --- a/test/earray.c +++ b/test/earray.c @@ -2944,6 +2944,9 @@ main(void) finish_tparam(&tparam); } /* end for */ + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if(nerrors) goto error; puts("All extensible array tests passed."); @@ -3192,6 +3192,9 @@ main(void) if(H5Pclose(fcpl_id) < 0) TEST_ERROR + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl_id) < 0 ? 1 : 0); + if(nerrors) goto error; diff --git a/test/enum.c b/test/enum.c index c627af1..e9f607d 100644 --- a/test/enum.c +++ b/test/enum.c @@ -583,6 +583,9 @@ main(void) H5Fclose(file); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if (nerrors) goto error; puts("All enum tests passed."); h5_cleanup(FILENAME, fapl); diff --git a/test/extend.c b/test/extend.c index 3ffcadc..5951e69 100644 --- a/test/extend.c +++ b/test/extend.c @@ -287,6 +287,9 @@ main (void) if(H5Sclose(mem_space) < 0) TEST_ERROR; if(H5Fclose(file) < 0) TEST_ERROR; + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if(nerrors) { printf("***** %d FAILURE%s! *****\n", nerrors, (1 == nerrors) ? "" : "S"); exit(1); diff --git a/test/external.c b/test/external.c index 3e1388c..1dedeab 100644 --- a/test/external.c +++ b/test/external.c @@ -957,6 +957,10 @@ main (void) nerrors += test_2(fapl); nerrors += test_3(fapl); nerrors += test_4(fapl); + + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if (nerrors>0) goto error; if (H5Fclose(file) < 0) goto error; diff --git a/test/farray.c b/test/farray.c index 8b6a617..2844a5d 100644 --- a/test/farray.c +++ b/test/farray.c @@ -1648,6 +1648,9 @@ main(void) nerrors += test_skip_elmts(fapl, &cparam, &tparam, (hsize_t)(tparam.nelmts - 1), FALSE, "skipping to last element"); } /* end for */ + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if(nerrors) goto error; puts("All fixed array tests passed."); diff --git a/test/fheap.c b/test/fheap.c index afbe56c..2cb8796 100644 --- a/test/fheap.c +++ b/test/fheap.c @@ -16691,6 +16691,9 @@ HDfprintf(stderr, "Uncomment tests!\n"); HDfprintf(stderr, "Uncomment tests!\n"); #endif /* QAK */ + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if(nerrors) goto error; puts("All fractal heap tests passed."); diff --git a/test/fillval.c b/test/fillval.c index cd12b98..847dfbd 100644 --- a/test/fillval.c +++ b/test/fillval.c @@ -2177,6 +2177,9 @@ main(int argc, char *argv[]) /* Close 2nd FAPL */ H5Pclose(fapl2); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if(nerrors) goto error; puts("All fill value tests passed."); diff --git a/test/filter_fail.c b/test/filter_fail.c index 9b46421..c48be14 100644 --- a/test/filter_fail.c +++ b/test/filter_fail.c @@ -391,6 +391,9 @@ int main(void) nerrors += (test_filter_write(filename, fapl, FALSE) < 0 ? 1 : 0); nerrors += (test_filter_read(filename, fapl) < 0 ? 1 : 0); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + h5_cleanup(FILENAME, fapl); /* Make sure we can close the library */ diff --git a/test/freespace.c b/test/freespace.c index b4a774f..6960e6d 100644 --- a/test/freespace.c +++ b/test/freespace.c @@ -2854,6 +2854,9 @@ main(void) nerrors += test_fs_sect_extend(fapl); nerrors += test_fs_sect_iterate(fapl); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if(nerrors) goto error; puts("All free-space tests passed."); diff --git a/test/getname.c b/test/getname.c index bbaaa04..1e50dcc 100644 --- a/test/getname.c +++ b/test/getname.c @@ -2934,6 +2934,9 @@ main(void) /* Close file */ H5Fclose(file_id); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if(nerrors) goto error; puts("All getname tests passed."); diff --git a/test/gheap.c b/test/gheap.c index 2829e34..f30935a 100644 --- a/test/gheap.c +++ b/test/gheap.c @@ -545,6 +545,10 @@ main (void) nerrors += test_3(fapl); nerrors += test_4(fapl); nerrors += test_ooo_indices(fapl); + + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if (nerrors) goto error; puts("All global heap tests passed."); diff --git a/test/h5test.c b/test/h5test.c index 8762f90..ae864f0 100644 --- a/test/h5test.c +++ b/test/h5test.c @@ -27,6 +27,11 @@ #include "h5test.h" #include "H5srcdir.h" +/* Necessary for h5_verify_cached_stabs() */ +#define H5G_PACKAGE +#define H5G_TESTING +#include "H5Gpkg.h" + #ifdef H5_HAVE_WINSOCK_H #include <process.h> #include <direct.h> @@ -1147,3 +1152,92 @@ h5_make_local_copy(char *origfilename, char *local_copy_name) return 0; } + + +/*------------------------------------------------------------------------- + * Function: h5_verify_cached_stabs_cb + * + * Purpose: Callback function for h5_verify_cached_stabs. + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Neil Fortner + * Tuesday, April 12, 2011 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +h5_verify_cached_stabs_cb(hid_t oid, const char UNUSED *name, + const H5O_info_t *oinfo, void UNUSED *udata) +{ + if(oinfo->type == H5O_TYPE_GROUP) + return(H5G_verify_cached_stabs_test(oid)); + else + return(0); +} /* end h5_verify_cached_stabs_cb() */ + + +/*------------------------------------------------------------------------- + * Function: h5_verify_cached_stabs + * + * Purpose: Verify that all groups in every file in base_name have + * their symbol table information cached (if present, and if + * the parent group also uses a symbol table). Does not + * check that the root group's symbol table information is + * cached in the superblock. + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Neil Fortner + * Tuesday, April 12, 2011 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +herr_t +h5_verify_cached_stabs(const char *base_name[], hid_t fapl) +{ + hid_t file = -1; + char filename[1024]; + int i = 0; + + while(base_name[i]) { + if (h5_fixname(base_name[i], fapl, filename, sizeof(filename)) == NULL) + continue; + + H5E_BEGIN_TRY { + file = H5Fopen(filename, H5F_ACC_RDONLY, fapl); + } H5E_END_TRY + if(file < 0) { + i++; + continue; + } /* end if */ + + if(H5Ovisit(file, H5_INDEX_NAME, H5_ITER_NATIVE, + h5_verify_cached_stabs_cb, NULL) < 0) + goto error; + + if(H5Fclose(file) < 0) + goto error; + file = -1; + + i++; + } /* end while */ + + return 0; + +error: + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + + return -1; +} + diff --git a/test/h5test.h b/test/h5test.h index 7994f72..5d3fb17 100644 --- a/test/h5test.h +++ b/test/h5test.h @@ -151,6 +151,7 @@ H5TEST_DLL void h5_show_hostname(void); H5TEST_DLL h5_stat_size_t h5_get_file_size(const char *filename, hid_t fapl); H5TEST_DLL int print_func(const char *format, ...); H5TEST_DLL int h5_make_local_copy(char *origfilename, char *local_copy_name); +H5TEST_DLL herr_t h5_verify_cached_stabs(const char *base_name[], hid_t fapl); /* Routines for operating on the list of tests (for the "all in one" tests) */ H5TEST_DLL void TestUsage(void); diff --git a/test/istore.c b/test/istore.c index fb0f3fc..3ae8da7 100644 --- a/test/istore.c +++ b/test/istore.c @@ -665,6 +665,9 @@ main(int argc, char *argv[]) H5Pclose(fcpl); H5Fclose(file); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if (nerrors) { printf("***** %d I-STORE TEST%s FAILED! *****\n", nerrors, 1 == nerrors ? "" : "S"); diff --git a/test/lheap.c b/test/lheap.c index ab6ee9f..51ae25b 100644 --- a/test/lheap.c +++ b/test/lheap.c @@ -199,6 +199,9 @@ main(void) } PASSED(); + /* Verify symbol table messages are cached */ + if(h5_verify_cached_stabs(FILENAME, fapl) < 0) TEST_ERROR + puts("All local heap tests passed."); h5_cleanup(FILENAME, fapl); diff --git a/test/links.c b/test/links.c index 236bb10..b892549 100644 --- a/test/links.c +++ b/test/links.c @@ -14460,6 +14460,9 @@ main(void) /* Close 2nd FAPL */ H5Pclose(fapl2); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + h5_cleanup(FILENAME, fapl); /* Test that external links can be used after a library reset. MUST be diff --git a/test/links_env.c b/test/links_env.c index c792386..2da5e64 100644 --- a/test/links_env.c +++ b/test/links_env.c @@ -171,6 +171,9 @@ main(void) nerrors += external_link_env(fapl, TRUE) < 0 ? 1 : 0; + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + h5_cleanup(FILENAME, fapl); /* Results */ diff --git a/test/mount.c b/test/mount.c index f358634..f63404d 100644 --- a/test/mount.c +++ b/test/mount.c @@ -4383,6 +4383,9 @@ main(void) nerrors += test_sharedclose(fapl); nerrors += test_multisharedclose(fapl); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if (nerrors) goto error; puts("All mount tests passed."); diff --git a/test/mtime.c b/test/mtime.c index 83e8354..6e00fe0 100644 --- a/test/mtime.c +++ b/test/mtime.c @@ -184,6 +184,9 @@ main(void) } PASSED(); + /* Verify symbol table messages are cached */ + if(h5_verify_cached_stabs(FILENAME, fapl) < 0) TEST_ERROR + /* All looks good */ puts("All modification time tests passed."); h5_cleanup(FILENAME, fapl); diff --git a/test/ntypes.c b/test/ntypes.c index fa208e3..3310a82 100644 --- a/test/ntypes.c +++ b/test/ntypes.c @@ -2892,6 +2892,10 @@ main(void) if(H5Fclose(file) < 0) goto error; + + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if(nerrors) goto error; diff --git a/test/objcopy.c b/test/objcopy.c index fbd7602..8d045c2 100755 --- a/test/objcopy.c +++ b/test/objcopy.c @@ -8431,6 +8431,9 @@ main(void) /* Reset file address checking info */ addr_reset(); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + /* Results */ if(nerrors) { printf("***** %d OBJECT COPY TEST%s FAILED! *****\n", diff --git a/test/ohdr.c b/test/ohdr.c index 109d59c..502a8b1 100644 --- a/test/ohdr.c +++ b/test/ohdr.c @@ -795,6 +795,9 @@ main(void) TEST_ERROR } /* end for */ + /* Verify symbol table messages are cached */ + if(h5_verify_cached_stabs(FILENAME, fapl) < 0) TEST_ERROR + puts("All object header tests passed."); h5_cleanup(FILENAME, fapl); return(0); diff --git a/test/set_extent.c b/test/set_extent.c index 391407d..aaa6516 100644 --- a/test/set_extent.c +++ b/test/set_extent.c @@ -185,6 +185,9 @@ int main( void ) /* Close 2nd FAPL */ if(H5Pclose(fapl2) < 0) TEST_ERROR + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + h5_cleanup(FILENAME, fapl); HDremove(EXT_FILE_NAME1); diff --git a/test/stab.c b/test/stab.c index d897899..b460d90 100644 --- a/test/stab.c +++ b/test/stab.c @@ -1198,6 +1198,9 @@ main(void) /* Close 2nd FAPL */ H5Pclose(fapl2); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + /* Check for test errors */ if(nerrors) goto error; diff --git a/test/unlink.c b/test/unlink.c index 9bd6f42..604b014 100644 --- a/test/unlink.c +++ b/test/unlink.c @@ -2549,6 +2549,9 @@ main(void) /* Close 2nd FAPL */ H5Pclose(fapl2); + /* Verify symbol table messages are cached */ + nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); + if (nerrors) { printf("***** %d FAILURE%s! *****\n", nerrors, 1==nerrors?"":"S"); exit(1); |