summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Fortner <nfortne2@hdfgroup.org>2011-04-15 22:05:23 (GMT)
committerNeil Fortner <nfortne2@hdfgroup.org>2011-04-15 22:05:23 (GMT)
commit7610dd20af382ba6d784c95f6436bb56ff895e07 (patch)
tree4cd64207ed16a5ea96dc3669e2efa6a645c89f67
parente1ed6bb771ad03d584b465036dba79cbad2254c5 (diff)
downloadhdf5-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)
-rw-r--r--src/H5Gpkg.h1
-rw-r--r--src/H5Gtest.c164
-rw-r--r--test/btree2.c3
-rw-r--r--test/cmpd_dset.c3
-rw-r--r--test/dsets.c3
-rw-r--r--test/earray.c3
-rw-r--r--test/efc.c3
-rw-r--r--test/enum.c3
-rw-r--r--test/extend.c3
-rw-r--r--test/external.c4
-rw-r--r--test/farray.c3
-rw-r--r--test/fheap.c3
-rw-r--r--test/fillval.c3
-rw-r--r--test/filter_fail.c3
-rw-r--r--test/freespace.c3
-rw-r--r--test/getname.c3
-rw-r--r--test/gheap.c4
-rw-r--r--test/h5test.c94
-rw-r--r--test/h5test.h1
-rw-r--r--test/istore.c3
-rw-r--r--test/lheap.c3
-rw-r--r--test/links.c3
-rw-r--r--test/links_env.c3
-rw-r--r--test/mount.c3
-rw-r--r--test/mtime.c3
-rw-r--r--test/ntypes.c4
-rwxr-xr-xtest/objcopy.c3
-rw-r--r--test/ohdr.c3
-rw-r--r--test/set_extent.c3
-rw-r--r--test/stab.c3
-rw-r--r--test/unlink.c3
31 files changed, 344 insertions, 0 deletions
diff --git a/src/H5Gpkg.h b/src/H5Gpkg.h
index dfaf112..c966e16 100644
--- a/src/H5Gpkg.h
+++ b/src/H5Gpkg.h
@@ -608,6 +608,7 @@ H5_DLL herr_t H5G_new_dense_info_test(hid_t gid, hsize_t *name_count, hsize_t *c
H5_DLL herr_t H5G_lheap_size_test(hid_t gid, size_t *lheap_size);
H5_DLL herr_t H5G_user_path_test(hid_t obj_id, char *user_path, size_t *user_path_len, unsigned *user_path_hidden);
H5_DLL herr_t H5G_verify_cached_stab_test(H5O_loc_t *grp_oloc, H5G_entry_t *ent);
+H5_DLL herr_t H5G_verify_cached_stabs_test(hid_t gid);
#endif /* H5G_TESTING */
#endif /* _H5Gpkg_H */
diff --git a/src/H5Gtest.c b/src/H5Gtest.c
index 96ecfda..ec55e47 100644
--- a/src/H5Gtest.c
+++ b/src/H5Gtest.c
@@ -641,3 +641,167 @@ done:
FUNC_LEAVE_NOAPI_TAG(ret_value, FAIL)
} /* end H5G_verify_cached_stab_test() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_verify_cached_stabs_test_cb
+ *
+ * Purpose: Verify that all entries in this node contain cached symbol
+ * table information if and only if the entry refers to a
+ * group with a symbol table, and that that information is
+ * correct.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Neil Fortner
+ * Apr 8, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5G_verify_cached_stabs_test_cb(H5F_t *f, hid_t dxpl_id,
+ const void UNUSED *_lt_key, haddr_t addr, const void UNUSED *_rt_key,
+ void UNUSED *udata)
+{
+ H5G_node_t *sn = NULL;
+ H5O_loc_t targ_oloc;
+ H5O_t *targ_oh = NULL;
+ htri_t stab_exists;
+ H5O_stab_t stab;
+ unsigned i;
+ int ret_value = H5_ITER_CONT;
+
+ FUNC_ENTER_NOAPI(H5G_verify_cached_stabs_test_cb, H5_ITER_ERROR)
+
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+
+ /* Load the node */
+ if(NULL == (sn = (H5G_node_t *)H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, f, H5AC_READ)))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5_ITER_ERROR, "unable to load symbol table node")
+
+ /* Check each target object to see if its stab message (if present) matches
+ * the cached stab (if present). If one exists, both must exist. */
+ /* Initialize constant fields in target oloc */
+ targ_oloc.file = f;
+ targ_oloc.holding_file = FALSE;
+
+ /* Iterate over entries */
+ for(i=0; i<sn->nsyms; i++) {
+ /* Update oloc address */
+ targ_oloc.addr = sn->entry[i].header;
+
+ /* Load target object header */
+ if(NULL == (targ_oh = H5O_protect(&targ_oloc, dxpl_id, H5AC_READ)))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTPROTECT, H5_ITER_ERROR, "unable to protect target object header")
+
+ /* Check if a symbol table message exists */
+ if((stab_exists = H5O_msg_exists_oh(targ_oh, H5O_STAB_ID)) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, H5_ITER_ERROR, "unable to check for STAB message")
+
+ if(stab_exists) {
+ /* Read symbol table message */
+ if(NULL == H5O_msg_read_oh(f, dxpl_id, targ_oh, H5O_STAB_ID, &stab))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTGET, H5_ITER_ERROR, "unable to read STAB message")
+
+ /* Check if the stab matches the cached stab info */
+ if(sn->entry[i].type != H5G_CACHED_STAB)
+ HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, H5_ITER_ERROR, "STAB message is not cached in group node")
+
+ if((sn->entry[i].cache.stab.btree_addr != stab.btree_addr)
+ || (sn->entry[i].cache.stab.heap_addr != stab.heap_addr))
+ HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, H5_ITER_ERROR, "cached symbol table information is incorrect")
+ } /* end if */
+ else if(sn->entry[i].type == H5G_CACHED_STAB)
+ HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, H5_ITER_ERROR, "nonexistent STAB message is cached")
+
+ /* Unprotect target object */
+ if(H5O_unprotect(&targ_oloc, dxpl_id, targ_oh, H5AC__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTUNPROTECT, H5_ITER_ERROR, "unable to release object header");
+ targ_oh = NULL;
+ } /* end for */
+
+done:
+ if(sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__NO_FLAGS_SET) < 0)
+ HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5_ITER_ERROR, "unable to release object header")
+
+ if(targ_oh) {
+ HDassert(ret_value == H5_ITER_ERROR);
+ if(H5O_unprotect(&targ_oloc, dxpl_id, targ_oh, H5AC__NO_FLAGS_SET) < 0)
+ HDONE_ERROR(H5E_SYM, H5E_CANTUNPROTECT, H5_ITER_ERROR, "unable to release object header");
+ } /* end if */
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5G_verify_cached_stabs_test_cb() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_verify_cached_stabs_test
+ *
+ * Purpose: If the provided group contains a symbol table, verifies
+ * that all links in the group contain cached symbol table
+ * information if and only if the link points to a group
+ * with a symbol table, and that that information is correct.
+ * If the provided group does not contain a symbol table,
+ * does nothing.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Neil Fortner
+ * nfortne2@hdfgroup.org
+ * April 6 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_verify_cached_stabs_test(hid_t gid)
+{
+ H5G_t *grp = NULL; /* Group */
+ htri_t stab_exists;
+ H5O_stab_t stab; /* Symbol table message */
+ H5G_bt_common_t udata = {NULL, NULL}; /* Dummy udata so H5B_iterate doesn't freak out */
+ haddr_t prev_tag = HADDR_UNDEF; /* Previous metadata tag */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5G_verify_cached_stabs_test, FAIL)
+
+ /* check args */
+ HDassert(gid >= 0);
+
+ /* Check args */
+ if(NULL == (grp = (H5G_t *)H5I_object_verify(gid, H5I_GROUP)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group")
+
+ /* Set up metadata tagging */
+ if(H5AC_tag(H5AC_ind_dxpl_id, grp->oloc.addr, &prev_tag) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTTAG, FAIL, "unable to apply metadata tag")
+
+ /* Check for group having a symbol table message */
+ /* Check for the group having a group info message */
+ if((stab_exists = H5O_msg_exists(&(grp->oloc), H5O_STAB_ID,
+ H5AC_ind_dxpl_id)) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to read object header")
+
+ /* No need to check anything if the symbol table doesn't exist */
+ if(!stab_exists)
+ HGOTO_DONE(SUCCEED);
+
+ /* Read the stab */
+ if(NULL == H5O_msg_read(&(grp->oloc), H5O_STAB_ID, &stab, H5AC_ind_dxpl_id))
+ HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "can't get symbol table info")
+
+ /* Iterate over the b-tree, checking validity of cached information */
+ if((ret_value = H5B_iterate(grp->oloc.file, H5AC_ind_dxpl_id, H5B_SNODE,
+ stab.btree_addr, H5G_verify_cached_stabs_test_cb, &udata)) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTNEXT, FAIL, "iteration operator failed");
+
+ /* Reset metadata tagging */
+ if(H5AC_tag(H5AC_ind_dxpl_id, prev_tag, NULL) < 0)
+ HDONE_ERROR(H5E_CACHE, H5E_CANTTAG, FAIL, "unable to apply metadata tag")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5G_verify_cached_stabs_test() */
+
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.");
diff --git a/test/efc.c b/test/efc.c
index 1ee7ce3..ff4f738 100644
--- a/test/efc.c
+++ b/test/efc.c
@@ -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);