diff options
Diffstat (limited to 'test/flushrefresh.c')
-rw-r--r-- | test/flushrefresh.c | 1190 |
1 files changed, 733 insertions, 457 deletions
diff --git a/test/flushrefresh.c b/test/flushrefresh.c index 92c9f87..0c10238 100644 --- a/test/flushrefresh.c +++ b/test/flushrefresh.c @@ -6,7 +6,7 @@ * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. * + * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -15,15 +15,15 @@ * Programmer: Mike McGreevy * June 30, 2010 * - * Purpose: This test file contains routines used to test flushing and - * refreshing individual objects' metadata from the cache. - * - * Note: This file should NOT be run manually. Instead, invoke it + * Purpose: This test file contains routines used to test flushing and + * refreshing individual objects' metadata from the cache. + * + * Note: This file should NOT be run manually. Instead, invoke it * via its associated test script, testflushrefresh.sh * */ -#define H5FD_FRIEND /*suppress error about including H5FDpkg */ +#define H5FD_FRIEND /*suppress error about including H5FDpkg */ #define H5FD_TESTING /* ======== */ @@ -31,7 +31,7 @@ /* ======== */ #include "testhdf5.h" -#include "H5FDpkg.h" /* File Drivers */ +#include "H5FDpkg.h" /* File Drivers */ /* ======= */ /* Defines */ @@ -41,10 +41,10 @@ #define FILENAME "flushrefresh.h5" /* Names of Signal Files */ -#define SIGNAL_TO_SCRIPT "flushrefresh_VERIFICATION_START" +#define SIGNAL_TO_SCRIPT "flushrefresh_VERIFICATION_START" #define SIGNAL_BETWEEN_PROCESSES_1 "flushrefresh_VERIFICATION_CHECKPOINT1" #define SIGNAL_BETWEEN_PROCESSES_2 "flushrefresh_VERIFICATION_CHECKPOINT2" -#define SIGNAL_FROM_SCRIPT "flushrefresh_VERIFICATION_DONE" +#define SIGNAL_FROM_SCRIPT "flushrefresh_VERIFICATION_DONE" /* Paths to Various Objects in the Testfile */ #define RG "/" @@ -59,51 +59,51 @@ #define T3 "/Group3/CommittedDatatype3" /* Flushed States */ -#define FLUSHED "FLUSHED" +#define FLUSHED "FLUSHED" #define NOT_FLUSHED "NOT_FLUSHED" /* Error Handling */ -/* For errors occuring in the main process, use the standard TEST_ERROR macro. +/* For errors occurring in the main process, use the standard TEST_ERROR macro. For errors occurring in the spawned process (from the test script), use the PROCESS_ERROR macro, which will send a signal to the main process so the - main process can propogate errors correctly. */ -FILE * errorfile; + main process can propagate errors correctly. */ +FILE *errorfile; #define ERRFILE "flushrefresh_ERROR" -#define PROCESS_ERROR \ - { \ - errorfile = HDfopen(ERRFILE, "w+"); \ - HDfprintf(errorfile, "Error occurred in flushrefresh.\n"); \ - HDfflush(errorfile); \ - HDfclose(errorfile); \ - TEST_ERROR; \ +#define PROCESS_ERROR \ + { \ + errorfile = HDfopen(ERRFILE, "w+"); \ + HDfprintf(errorfile, "Error occurred in flushrefresh.\n"); \ + HDfflush(errorfile); \ + HDfclose(errorfile); \ + TEST_ERROR; \ } -#define CLEANUP_FILES \ - { \ - HDremove(ERRFILE); \ - HDremove(FILENAME); \ - HDremove(SIGNAL_TO_SCRIPT); \ - HDremove(SIGNAL_BETWEEN_PROCESSES_1); \ - HDremove(SIGNAL_BETWEEN_PROCESSES_2); \ - HDremove(SIGNAL_FROM_SCRIPT); \ - } \ +#define CLEANUP_FILES \ + { \ + HDremove(ERRFILE); \ + HDremove(FILENAME); \ + HDremove(SIGNAL_TO_SCRIPT); \ + HDremove(SIGNAL_BETWEEN_PROCESSES_1); \ + HDremove(SIGNAL_BETWEEN_PROCESSES_2); \ + HDremove(SIGNAL_FROM_SCRIPT); \ + } /* ===================== */ /* Function Declarations */ /* ===================== */ /* Main */ -int main(int argc, const char *argv[]); +int main(int argc, char *argv[]); /* Flush Test Framework */ herr_t test_flush(void); -herr_t flush_verification(const char * obj_pathname, const char * expected); -herr_t run_flush_verification_process(const char * obj_pathname, const char * expected); +herr_t flush_verification(const char *obj_pathname, const char *expected); +herr_t run_flush_verification_process(const char *obj_pathname, const char *expected); /* Refresh Test Framework */ herr_t test_refresh(void); -herr_t refresh_verification(const char * obj_pathname); -herr_t start_refresh_verification_process(const char * obj_pathname); +herr_t refresh_verification(const char *obj_pathname); +herr_t start_refresh_verification_process(const char *obj_pathname); herr_t end_refresh_verification_process(void); /* Other Helper Functions */ @@ -114,17 +114,16 @@ herr_t end_verification(void); /* Functions */ /* ========= */ - /*------------------------------------------------------------------------- * Function: main * * Purpose: This function coordinates the test of flush/refresh - * functionality verification. It accepts either one, two or + * functionality verification. It accepts either one, two or * no command line parameters. The main test routine runs * with no command line parameters specified, while verification * routines run with one or two command line parameters. - * - * Note: This program should not be run manually, as the + * + * Note: This program should not be run manually, as the * test is controlled by the testflushrefresh.sh script. Running * the flushrefresh program manually will result in failure, as * it will time out waiting for a signal from the test script @@ -137,43 +136,51 @@ herr_t end_verification(void); * *------------------------------------------------------------------------- */ -int main(int argc, const char *argv[]) +int +main(int argc, char *argv[]) { /* Variables */ const char *envval = NULL; /* Initialize library */ - if(H5open() < 0) + if (H5open() < 0) TEST_ERROR; /* Parse command line options */ - if(argc == 1) { - /* No arguments supplied. Run main test routines if - * using sec2 or stdio driver, otherwise don't run + if (argc == 1) { + /* No arguments supplied. Run main test routines if + * using sec2 or stdio driver, otherwise don't run * anything. */ /* Determine driver being used */ - envval = HDgetenv("HDF5_DRIVER"); + envval = HDgetenv(HDF5_DRIVER); - if(envval == NULL || H5FD__supports_swmr_test(envval)) { - if(test_flush() != SUCCEED) TEST_ERROR; - if(test_refresh() != SUCCEED) TEST_ERROR; + if (envval == NULL || H5FD__supports_swmr_test(envval)) { + if (test_flush() != SUCCEED) + TEST_ERROR; + if (test_refresh() != SUCCEED) + TEST_ERROR; } /* end if */ else { - HDfprintf(stdout, "Skipping all flush/refresh tests (only run with SWMR-enabled file drivers).\n"); - + HDfprintf(stdout, + "Skipping all flush/refresh tests (only run with SWMR-enabled file drivers).\n"); + /* Test script is expecting some signals, so send them out to end it. */ - if(end_verification() < 0) TEST_ERROR; - if(end_verification() < 0) TEST_ERROR; + if (end_verification() < 0) + TEST_ERROR; + if (end_verification() < 0) + TEST_ERROR; } /* end else */ } - else if(argc == 3) { + else if (argc == 3) { /* Two arguments supplied. Pass them to flush verification routine. */ - if(flush_verification(argv[1], argv[2]) != 0) PROCESS_ERROR; + if (flush_verification(argv[1], argv[2]) != 0) + PROCESS_ERROR; } - else if(argc == 2) { + else if (argc == 2) { /* One argument supplied. Pass it to refresh verification routine. */ - if(refresh_verification(argv[1]) != 0) PROCESS_ERROR; + if (refresh_verification(argv[1]) != 0) + PROCESS_ERROR; } else { /* Illegal number of arguments supplied. Error. */ @@ -188,7 +195,6 @@ error: return EXIT_FAILURE; } /* main */ - /*------------------------------------------------------------------------- * Function: test_flush * @@ -202,29 +208,30 @@ error: * *------------------------------------------------------------------------- */ -herr_t test_flush(void) +herr_t +test_flush(void) { /************************************************************************** * * Test Description: * - * This test will build an HDF5 file with several objects in a varying + * This test will build an HDF5 file with several objects in a varying * hierarchical layout. It will then attempt to flush the objects * in the file one by one, individually, using the four H5*flush - * routines (D,G,T, and O). After each call to either create or flush an + * routines (D,G,T, and O). After each call to either create or flush an * object, a series of verifications will occur on each object in the file. * * Each verification consists of spawning off a new process and determining - * if the object can be opened and its information retreived in said - * alternate process. It reports the results, which are compared to an + * if the object can be opened and its information retrieved in said + * alternate process. It reports the results, which are compared to an * expected value (either that the object can be found on disk, or that it * cannot). * * Note that to spawn a verification, this program sends a signal (by creating - * a file on disk) to the test script controlling it, indicating how to + * a file on disk) to the test script controlling it, indicating how to * run the verification. - * - * Implementation is funky, but basically, an example: + * + * Implementation is funky, but basically, an example: * * Step 1. Dataset is created. * Step 2. Verify that dataset can't be opened by separate process, as @@ -233,81 +240,98 @@ herr_t test_flush(void) * Step 4. Verify that group can't be opened by separate process. * Step 5. H5Gflush is called on the group. * Step 6. Verify that group CAN be opened, but dataset still has - * yet to hit disk, and CANNOT be opened. Success! Only the group + * yet to hit disk, and CANNOT be opened. Success! Only the group * was flushed. * **************************************************************************/ /************************************************************************** - * Generated Test File will look like this: - * - * GROUP "/" - * DATASET "Dataset1" - * GROUP "Group1" { - * DATASET "Dataset2" - * GROUP "Group2" { - * DATATYPE "CommittedDatatype3" - * } - * } - * GROUP "Group3" { - * DATASET "Dataset3" - * DATATYPE "CommittedDatatype2" - * } - * DATATYPE "CommittedDatatype1" + * Generated Test File will look like this: + * + * GROUP "/" + * DATASET "Dataset1" + * GROUP "Group1" { + * DATASET "Dataset2" + * GROUP "Group2" { + * DATATYPE "CommittedDatatype3" + * } + * } + * GROUP "Group3" { + * DATASET "Dataset3" + * DATATYPE "CommittedDatatype2" + * } + * DATATYPE "CommittedDatatype1" **************************************************************************/ /* Variables */ - hid_t fid,gid,gid2,gid3,sid,tid1,tid2,tid3,did,did2,did3,rid,fapl,status = 0; - hsize_t dims[2] = {3,5}; + hid_t fid, gid, gid2, gid3, sid, tid1, tid2, tid3, did, did2, did3, rid, fapl, status = 0; + hsize_t dims[2] = {3, 5}; /* Testing Message */ HDfprintf(stdout, "Testing individual object flush behavior:\n"); /* Cleanup any old error or signal files */ CLEANUP_FILES; - + /* ================ */ /* CREATE TEST FILE */ /* ================ */ /* Create file, open root group - have to use latest file format for SWMR */ - if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0) TEST_ERROR; - if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0) TEST_ERROR; - if((fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC|H5F_ACC_SWMR_WRITE, H5P_DEFAULT, fapl)) < 0) TEST_ERROR; - if((rid = H5Gopen2(fid, "/", H5P_DEFAULT)) < 0) TEST_ERROR; + if ((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0) + TEST_ERROR; + if (H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0) + TEST_ERROR; + if ((fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC | H5F_ACC_SWMR_WRITE, H5P_DEFAULT, fapl)) < 0) + TEST_ERROR; + if ((rid = H5Gopen2(fid, "/", H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create data space and types */ - if((sid = H5Screate_simple(2, dims, dims)) < 0) TEST_ERROR; - if((tid1 = H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR; - if((tid2 = H5Tcopy(H5T_NATIVE_CHAR)) < 0) TEST_ERROR; - if((tid3 = H5Tcopy(H5T_NATIVE_LONG)) < 0) TEST_ERROR; + if ((sid = H5Screate_simple(2, dims, dims)) < 0) + TEST_ERROR; + if ((tid1 = H5Tcopy(H5T_NATIVE_INT)) < 0) + TEST_ERROR; + if ((tid2 = H5Tcopy(H5T_NATIVE_CHAR)) < 0) + TEST_ERROR; + if ((tid3 = H5Tcopy(H5T_NATIVE_LONG)) < 0) + TEST_ERROR; /* Create Group1 */ - if((gid = H5Gcreate2(fid, "Group1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((gid = H5Gcreate2(fid, "Group1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create Group2 */ - if((gid2 = H5Gcreate2(gid, "Group2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((gid2 = H5Gcreate2(gid, "Group2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create Group3 */ - if((gid3 = H5Gcreate2(fid, "Group3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((gid3 = H5Gcreate2(fid, "Group3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create Dataset1 */ - if((did = H5Dcreate2(fid, "Dataset1", tid1, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((did = H5Dcreate2(fid, "Dataset1", tid1, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create Dataset2 */ - if((did2 = H5Dcreate2(gid, "Dataset2", tid3, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((did2 = H5Dcreate2(gid, "Dataset2", tid3, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create Dataset3 */ - if((did3 = H5Dcreate2(gid3, "Dataset3", tid2, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((did3 = H5Dcreate2(gid3, "Dataset3", tid2, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create CommittedDatatype1 */ - if((status = H5Tcommit2(fid, "CommittedDatatype1", tid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((status = H5Tcommit2(fid, "CommittedDatatype1", tid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create CommittedDatatype2 */ - if((status = H5Tcommit2(gid2, "CommittedDatatype2", tid2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((status = H5Tcommit2(gid2, "CommittedDatatype2", tid2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create CommittedDatatype3 */ - if((status = H5Tcommit2(gid3, "CommittedDatatype3", tid3, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((status = H5Tcommit2(gid3, "CommittedDatatype3", tid3, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* ============ */ /* FLUSH GROUPS */ @@ -317,57 +341,100 @@ herr_t test_flush(void) TESTING("to ensure H5Gflush correctly flushes single groups"); /* First, let's verify that nothing is currently flushed. */ - if(run_flush_verification_process(RG, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, NOT_FLUSHED) != 0) TEST_ERROR; + if (run_flush_verification_process(RG, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, NOT_FLUSHED) != 0) + TEST_ERROR; /* Then, flush the root group and verify it's the only thing on disk */ - if((status = H5Gflush(rid)) < 0) TEST_ERROR; - if(run_flush_verification_process(RG, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, NOT_FLUSHED) != 0) TEST_ERROR; - - /* Flush Group1 and Verify it is recently flushed, and nothing + if ((status = H5Gflush(rid)) < 0) + TEST_ERROR; + if (run_flush_verification_process(RG, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, NOT_FLUSHED) != 0) + TEST_ERROR; + + /* Flush Group1 and Verify it is recently flushed, and nothing * else has changed. */ - if((status = H5Gflush(gid)) < 0) TEST_ERROR; - if(run_flush_verification_process(RG, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, NOT_FLUSHED) != 0) TEST_ERROR; - - /* Flush Group2 and Verify it is recently flushed, and nothing + if ((status = H5Gflush(gid)) < 0) + TEST_ERROR; + if (run_flush_verification_process(RG, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, NOT_FLUSHED) != 0) + TEST_ERROR; + + /* Flush Group2 and Verify it is recently flushed, and nothing * else has changed. */ - if((status = H5Gflush(gid2)) < 0) TEST_ERROR; - if(run_flush_verification_process(RG, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, NOT_FLUSHED) != 0) TEST_ERROR; + if ((status = H5Gflush(gid2)) < 0) + TEST_ERROR; + if (run_flush_verification_process(RG, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, NOT_FLUSHED) != 0) + TEST_ERROR; PASSED(); @@ -379,30 +446,52 @@ herr_t test_flush(void) TESTING("to ensure H5Dflush correctly flushes single datasets"); /* Flush Dataset1 and verify it's the only thing that hits disk. */ - if((status = H5Dflush(did)) < 0) TEST_ERROR; - if(run_flush_verification_process(RG, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, NOT_FLUSHED) != 0) TEST_ERROR; + if ((status = H5Dflush(did)) < 0) + TEST_ERROR; + if (run_flush_verification_process(RG, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, NOT_FLUSHED) != 0) + TEST_ERROR; /* Flush Dataset2 and verify it's the only thing that hits disk. */ - if((status = H5Dflush(did2)) < 0) TEST_ERROR; - if(run_flush_verification_process(RG, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, NOT_FLUSHED) != 0) TEST_ERROR; + if ((status = H5Dflush(did2)) < 0) + TEST_ERROR; + if (run_flush_verification_process(RG, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, NOT_FLUSHED) != 0) + TEST_ERROR; PASSED(); @@ -414,33 +503,55 @@ herr_t test_flush(void) TESTING("to ensure H5Tflush correctly flushes single datatypes"); /* Flush Datatype 1 and verify it's the only thing that hits disk. */ - if((status = H5Tflush(tid1)) < 0) TEST_ERROR; - if(run_flush_verification_process(RG, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, NOT_FLUSHED) != 0) TEST_ERROR; + if ((status = H5Tflush(tid1)) < 0) + TEST_ERROR; + if (run_flush_verification_process(RG, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, NOT_FLUSHED) != 0) + TEST_ERROR; /* Flush Datatype 2 and verify it's the only thing that hits disk. */ - if((status = H5Tflush(tid2)) < 0) TEST_ERROR; - if(run_flush_verification_process(RG, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, NOT_FLUSHED) != 0) TEST_ERROR; + if ((status = H5Tflush(tid2)) < 0) + TEST_ERROR; + if (run_flush_verification_process(RG, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, NOT_FLUSHED) != 0) + TEST_ERROR; PASSED(); - + /* ============= */ /* FLUSH OBJECTS */ /* ============= */ @@ -449,61 +560,102 @@ herr_t test_flush(void) TESTING("to ensure H5Oflush correctly flushes single objects"); /* Flush Group3 and verify it's the only thing that hits disk. */ - if((status = H5Oflush(gid3)) < 0) TEST_ERROR; - if(run_flush_verification_process(RG, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, NOT_FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, NOT_FLUSHED) != 0) TEST_ERROR; + if ((status = H5Oflush(gid3)) < 0) + TEST_ERROR; + if (run_flush_verification_process(RG, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, NOT_FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, NOT_FLUSHED) != 0) + TEST_ERROR; /* Flush Dataset3 and verify it's the only thing that hits disk. */ - if((status = H5Oflush(did3)) < 0) TEST_ERROR; - if(run_flush_verification_process(RG, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, NOT_FLUSHED) != 0) TEST_ERROR; + if ((status = H5Oflush(did3)) < 0) + TEST_ERROR; + if (run_flush_verification_process(RG, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, NOT_FLUSHED) != 0) + TEST_ERROR; /* Flush CommittedDatatype3 and verify it's the only thing that hits disk. */ - if((status = H5Oflush(tid3)) < 0) TEST_ERROR; - if(run_flush_verification_process(RG, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(G3, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(D3, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T1, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T2, FLUSHED) != 0) TEST_ERROR; - if(run_flush_verification_process(T3, FLUSHED) != 0) TEST_ERROR; + if ((status = H5Oflush(tid3)) < 0) + TEST_ERROR; + if (run_flush_verification_process(RG, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(G3, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(D3, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T1, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T2, FLUSHED) != 0) + TEST_ERROR; + if (run_flush_verification_process(T3, FLUSHED) != 0) + TEST_ERROR; PASSED(); /* ================== */ - /* Cleanup and Return */ + /* Cleanup and Return */ /* ================== */ - if(H5Pclose(fapl) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; - if(H5Gclose(gid2) < 0) TEST_ERROR; - if(H5Dclose(did) < 0) TEST_ERROR; - if(H5Dclose(did2) < 0) TEST_ERROR; - if(H5Gclose(rid) < 0) TEST_ERROR; - if(H5Fclose(fid) < 0) TEST_ERROR; + if (H5Pclose(fapl) < 0) + TEST_ERROR; + if (H5Gclose(gid) < 0) + TEST_ERROR; + if (H5Gclose(gid2) < 0) + TEST_ERROR; + if (H5Dclose(did) < 0) + TEST_ERROR; + if (H5Dclose(did2) < 0) + TEST_ERROR; + if (H5Gclose(rid) < 0) + TEST_ERROR; + if (H5Fclose(fid) < 0) + TEST_ERROR; /* Delete test file */ HDremove(FILENAME); - if(end_verification() < 0) TEST_ERROR; + if (end_verification() < 0) + TEST_ERROR; return SUCCEED; @@ -511,11 +663,10 @@ error: return FAIL; } /* end test_flush */ - /*------------------------------------------------------------------------- * Function: test_refresh * - * Purpose: This function tests refresh (evict/reload) of individual + * Purpose: This function tests refresh (evict/reload) of individual * objects' metadata from the metadata cache. * * Return: 0 on Success, 1 on Failure @@ -525,27 +676,28 @@ error: * *------------------------------------------------------------------------- */ -herr_t test_refresh(void) +herr_t +test_refresh(void) { /************************************************************************** * * Test Description: * - * This test will build an HDF5 file with several objects in a varying + * This test will build an HDF5 file with several objects in a varying * hierarchical layout. It will then flush the entire file to disk. Then, * an attribute will be added to each object in the file. - * + * * One by one, this process will flush each object to disk, individually. * It will also be coordinating with another process, which will open * the object before it is flushed by this process, and then refresh the * object after it's been flushed, comparing the before and after object * information to ensure that they are as expected. (i.e., most notably, - * that an attribute has been added, and is only visible after a + * that an attribute has been added, and is only visible after a * successful call to a H5*refresh function). - * - * As with the flush case, the implemention is a bit tricky as it's + * + * As with the flush case, the implementation is a bit tricky as it's * dealing with signals going back and forth between the two processes - * to ensure the timing is correct, but basically, an example: + * to ensure the timing is correct, but basically, an example: * * Step 1. Dataset is created. * Step 2. Dataset is flushed. @@ -555,37 +707,37 @@ herr_t test_refresh(void) * Step 5. This process flushes the dataset again (with Attribute attached). * Step 6. The other process calls H5Drefresh, which should evict/reload * the object's metadata, and thus pick up the attribute that's - * attached to it. Most other before/after object information is + * attached to it. Most other before/after object information is * compared for sanity as well. * Step 7. Rinse and Repeat for each object in the file. * **************************************************************************/ /************************************************************************** - * Generated Test File will look like this: - * - * GROUP "/" - * DATASET "Dataset1" - * GROUP "Group1" { - * DATASET "Dataset2" - * GROUP "Group2" { - * DATATYPE "CommittedDatatype3" - * } - * } - * GROUP "Group3" { - * DATASET "Dataset3" - * DATATYPE "CommittedDatatype2" - * } - * DATATYPE "CommittedDatatype1" + * Generated Test File will look like this: + * + * GROUP "/" + * DATASET "Dataset1" + * GROUP "Group1" { + * DATASET "Dataset2" + * GROUP "Group2" { + * DATATYPE "CommittedDatatype3" + * } + * } + * GROUP "Group3" { + * DATASET "Dataset3" + * DATATYPE "CommittedDatatype2" + * } + * DATATYPE "CommittedDatatype1" **************************************************************************/ /* Variables */ - hid_t aid,fid,sid,tid1,did,dcpl,fapl = 0; - hid_t gid,gid2,gid3,tid2,tid3,did2,did3; - herr_t status = 0; - hsize_t dims[2] = {50,50}; - hsize_t cdims[2] = {1,1}; - int fillval = 2; + hid_t aid, fid, sid, tid1, did, dcpl, fapl = 0; + hid_t gid, gid2, gid3, tid2, tid3, did2, did3; + herr_t status = 0; + hsize_t dims[2] = {50, 50}; + hsize_t cdims[2] = {1, 1}; + int fillval = 2; /* Testing Message */ HDfprintf(stdout, "Testing individual object refresh behavior:\n"); @@ -598,48 +750,68 @@ herr_t test_refresh(void) /* ================ */ /* Create File */ - if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0) TEST_ERROR; - if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0) TEST_ERROR; - if((fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC|H5F_ACC_SWMR_WRITE, H5P_DEFAULT, fapl)) < 0) TEST_ERROR; + if ((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0) + TEST_ERROR; + if (H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0) + TEST_ERROR; + if ((fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC | H5F_ACC_SWMR_WRITE, H5P_DEFAULT, fapl)) < 0) + TEST_ERROR; /* Create data space and types */ - if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) TEST_ERROR; - if(H5Pset_chunk(dcpl, 2, cdims) < 0) TEST_ERROR; - if(H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval) < 0) TEST_ERROR; - if((sid = H5Screate_simple(2, dims, dims)) < 0) TEST_ERROR; - if((tid1 = H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR; - if((tid2 = H5Tcopy(H5T_NATIVE_CHAR)) < 0) TEST_ERROR; - if((tid3 = H5Tcopy(H5T_NATIVE_LONG)) < 0) TEST_ERROR; + if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) + TEST_ERROR; + if (H5Pset_chunk(dcpl, 2, cdims) < 0) + TEST_ERROR; + if (H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval) < 0) + TEST_ERROR; + if ((sid = H5Screate_simple(2, dims, dims)) < 0) + TEST_ERROR; + if ((tid1 = H5Tcopy(H5T_NATIVE_INT)) < 0) + TEST_ERROR; + if ((tid2 = H5Tcopy(H5T_NATIVE_CHAR)) < 0) + TEST_ERROR; + if ((tid3 = H5Tcopy(H5T_NATIVE_LONG)) < 0) + TEST_ERROR; /* Create Group1 */ - if((gid = H5Gcreate2(fid, "Group1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((gid = H5Gcreate2(fid, "Group1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create Group2 */ - if((gid2 = H5Gcreate2(gid, "Group2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((gid2 = H5Gcreate2(gid, "Group2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create Group3 */ - if((gid3 = H5Gcreate2(fid, "Group3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((gid3 = H5Gcreate2(fid, "Group3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create Dataset1 */ - if((did = H5Dcreate2(fid, "Dataset1", tid1, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((did = H5Dcreate2(fid, "Dataset1", tid1, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create Dataset2 */ - if((did2 = H5Dcreate2(gid, "Dataset2", tid3, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((did2 = H5Dcreate2(gid, "Dataset2", tid3, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create Dataset3 */ - if((did3 = H5Dcreate2(gid3, "Dataset3", tid2, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((did3 = H5Dcreate2(gid3, "Dataset3", tid2, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create CommittedDatatype1 */ - if((status = H5Tcommit2(fid, "CommittedDatatype1", tid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((status = H5Tcommit2(fid, "CommittedDatatype1", tid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create CommittedDatatype2 */ - if((status = H5Tcommit2(gid2, "CommittedDatatype2", tid2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((status = H5Tcommit2(gid2, "CommittedDatatype2", tid2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Create CommittedDatatype3 */ - if((status = H5Tcommit2(gid3, "CommittedDatatype3", tid3, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; + if ((status = H5Tcommit2(gid3, "CommittedDatatype3", tid3, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; /* Flush File to Disk */ - if(H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0) TEST_ERROR; + if (H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0) + TEST_ERROR; /* ================ */ /* Refresh Datasets */ @@ -650,22 +822,32 @@ herr_t test_refresh(void) /* Create an attribute on each object before flush. */ /* Verify First Dataset can be refreshed with H5Drefresh */ - if(start_refresh_verification_process(D1) != 0) TEST_ERROR; + if (start_refresh_verification_process(D1) != 0) + TEST_ERROR; - if((aid = H5Acreate2(did, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Aclose(aid) < 0) TEST_ERROR; - if(H5Oflush(did) < 0) TEST_ERROR; + if ((aid = H5Acreate2(did, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; + if (H5Aclose(aid) < 0) + TEST_ERROR; + if (H5Oflush(did) < 0) + TEST_ERROR; - if(end_refresh_verification_process() != 0) TEST_ERROR; + if (end_refresh_verification_process() != 0) + TEST_ERROR; /* Verify Second Dataset can be refreshed with H5Drefresh */ - if(start_refresh_verification_process(D2) != 0) TEST_ERROR; + if (start_refresh_verification_process(D2) != 0) + TEST_ERROR; - if((aid = H5Acreate2(did2, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Aclose(aid) < 0) TEST_ERROR; - if(H5Oflush(did2) < 0) TEST_ERROR; + if ((aid = H5Acreate2(did2, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; + if (H5Aclose(aid) < 0) + TEST_ERROR; + if (H5Oflush(did2) < 0) + TEST_ERROR; - if(end_refresh_verification_process() != 0) TEST_ERROR; + if (end_refresh_verification_process() != 0) + TEST_ERROR; PASSED(); @@ -676,22 +858,32 @@ herr_t test_refresh(void) TESTING("to ensure that H5Grefresh correctly refreshes single groups"); /* Verify First Group can be refreshed with H5Grefresh */ - if(start_refresh_verification_process(G1) != 0) TEST_ERROR; + if (start_refresh_verification_process(G1) != 0) + TEST_ERROR; - if((aid = H5Acreate2(gid, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Aclose(aid) < 0) TEST_ERROR; - if(H5Oflush(gid) < 0) TEST_ERROR; + if ((aid = H5Acreate2(gid, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; + if (H5Aclose(aid) < 0) + TEST_ERROR; + if (H5Oflush(gid) < 0) + TEST_ERROR; - if(end_refresh_verification_process() != 0) TEST_ERROR; + if (end_refresh_verification_process() != 0) + TEST_ERROR; /* Verify Second Group can be refreshed with H5Grefresh */ - if(start_refresh_verification_process(G2) != 0) TEST_ERROR; + if (start_refresh_verification_process(G2) != 0) + TEST_ERROR; - if((aid = H5Acreate2(gid2, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Aclose(aid) < 0) TEST_ERROR; - if(H5Oflush(gid2) < 0) TEST_ERROR; + if ((aid = H5Acreate2(gid2, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; + if (H5Aclose(aid) < 0) + TEST_ERROR; + if (H5Oflush(gid2) < 0) + TEST_ERROR; - if(end_refresh_verification_process() != 0) TEST_ERROR; + if (end_refresh_verification_process() != 0) + TEST_ERROR; PASSED(); @@ -701,22 +893,32 @@ herr_t test_refresh(void) TESTING("to ensure that H5Trefresh correctly refreshes single datatypes"); /* Verify First Committed Datatype can be refreshed with H5Trefresh */ - if(start_refresh_verification_process(T1) != 0) TEST_ERROR; + if (start_refresh_verification_process(T1) != 0) + TEST_ERROR; - if((aid = H5Acreate2(tid1, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Aclose(aid) < 0) TEST_ERROR; - if(H5Oflush(tid1) < 0) TEST_ERROR; + if ((aid = H5Acreate2(tid1, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; + if (H5Aclose(aid) < 0) + TEST_ERROR; + if (H5Oflush(tid1) < 0) + TEST_ERROR; - if(end_refresh_verification_process() != 0) TEST_ERROR; + if (end_refresh_verification_process() != 0) + TEST_ERROR; /* Verify Second Committed Datatype can be refreshed with H5Trefresh */ - if(start_refresh_verification_process(T2) != 0) TEST_ERROR; + if (start_refresh_verification_process(T2) != 0) + TEST_ERROR; - if((aid = H5Acreate2(tid2, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Aclose(aid) < 0) TEST_ERROR; - if(H5Oflush(tid2) < 0) TEST_ERROR; + if ((aid = H5Acreate2(tid2, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; + if (H5Aclose(aid) < 0) + TEST_ERROR; + if (H5Oflush(tid2) < 0) + TEST_ERROR; - if(end_refresh_verification_process() != 0) TEST_ERROR; + if (end_refresh_verification_process() != 0) + TEST_ERROR; PASSED(); /* =============== */ @@ -726,57 +928,86 @@ herr_t test_refresh(void) TESTING("to ensure that H5Orefresh correctly refreshes single objects"); /* Verify Third Dataset can be refreshed with H5Orefresh */ - if(start_refresh_verification_process(D3) != 0) TEST_ERROR; + if (start_refresh_verification_process(D3) != 0) + TEST_ERROR; - if((aid = H5Acreate2(did3, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Aclose(aid) < 0) TEST_ERROR; - if(H5Oflush(did3) < 0) TEST_ERROR; + if ((aid = H5Acreate2(did3, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; + if (H5Aclose(aid) < 0) + TEST_ERROR; + if (H5Oflush(did3) < 0) + TEST_ERROR; - if(end_refresh_verification_process() != 0) TEST_ERROR; + if (end_refresh_verification_process() != 0) + TEST_ERROR; /* Verify Third Group can be refreshed with H5Orefresh */ - if(start_refresh_verification_process(G3) != 0) TEST_ERROR; + if (start_refresh_verification_process(G3) != 0) + TEST_ERROR; - if((aid = H5Acreate2(gid3, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Aclose(aid) < 0) TEST_ERROR; - if(H5Oflush(gid3) < 0) TEST_ERROR; + if ((aid = H5Acreate2(gid3, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; + if (H5Aclose(aid) < 0) + TEST_ERROR; + if (H5Oflush(gid3) < 0) + TEST_ERROR; - if(end_refresh_verification_process() != 0) TEST_ERROR; + if (end_refresh_verification_process() != 0) + TEST_ERROR; /* Verify Third Committed Datatype can be refreshed with H5Orefresh */ - if(start_refresh_verification_process(T3) != 0) TEST_ERROR; + if (start_refresh_verification_process(T3) != 0) + TEST_ERROR; - if((aid = H5Acreate2(tid3, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; - if(H5Aclose(aid) < 0) TEST_ERROR; - if(H5Oflush(tid3) < 0) TEST_ERROR; + if ((aid = H5Acreate2(tid3, "Attribute", tid1, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + TEST_ERROR; + if (H5Aclose(aid) < 0) + TEST_ERROR; + if (H5Oflush(tid3) < 0) + TEST_ERROR; - if(end_refresh_verification_process() != 0) TEST_ERROR; + if (end_refresh_verification_process() != 0) + TEST_ERROR; PASSED(); /* ================== */ - /* Cleanup and Return */ + /* Cleanup and Return */ /* ================== */ /* Close Stuff */ - if(H5Pclose(fapl) < 0) TEST_ERROR; - if(H5Pclose(dcpl) < 0) TEST_ERROR; - if(H5Tclose(tid1) < 0) TEST_ERROR; - if(H5Tclose(tid2) < 0) TEST_ERROR; - if(H5Tclose(tid3) < 0) TEST_ERROR; - if(H5Dclose(did) < 0) TEST_ERROR; - if(H5Dclose(did2) < 0) TEST_ERROR; - if(H5Dclose(did3) < 0) TEST_ERROR; - if(H5Gclose(gid) < 0) TEST_ERROR; - if(H5Gclose(gid2) < 0) TEST_ERROR; - if(H5Gclose(gid3) < 0) TEST_ERROR; - if(H5Sclose(sid) < 0) TEST_ERROR; - if(H5Fclose(fid) < 0) TEST_ERROR; + if (H5Pclose(fapl) < 0) + TEST_ERROR; + if (H5Pclose(dcpl) < 0) + TEST_ERROR; + if (H5Tclose(tid1) < 0) + TEST_ERROR; + if (H5Tclose(tid2) < 0) + TEST_ERROR; + if (H5Tclose(tid3) < 0) + TEST_ERROR; + if (H5Dclose(did) < 0) + TEST_ERROR; + if (H5Dclose(did2) < 0) + TEST_ERROR; + if (H5Dclose(did3) < 0) + TEST_ERROR; + if (H5Gclose(gid) < 0) + TEST_ERROR; + if (H5Gclose(gid2) < 0) + TEST_ERROR; + if (H5Gclose(gid3) < 0) + TEST_ERROR; + if (H5Sclose(sid) < 0) + TEST_ERROR; + if (H5Fclose(fid) < 0) + TEST_ERROR; /* Delete Test File */ HDremove(FILENAME); - if(end_verification() < 0) TEST_ERROR; + if (end_verification() < 0) + TEST_ERROR; return SUCCEED; @@ -785,14 +1016,13 @@ error: return FAIL; } /* test_refresh() */ - /*------------------------------------------------------------------------- * Function: run_flush_verification_process * * Purpose: This function is used to communicate with the test script * in order to spawn off a process to verify that a flush - * of an individual object was successful. - * + * of an individual object was successful. + * * Return: 0 on Success, 1 on Failure * * Programmer: Mike McGreevy @@ -800,7 +1030,8 @@ error: * *------------------------------------------------------------------------- */ -herr_t run_flush_verification_process(const char * obj_pathname, const char * expected) +herr_t +run_flush_verification_process(const char *obj_pathname, const char *expected) { HDremove(SIGNAL_FROM_SCRIPT); @@ -808,10 +1039,12 @@ herr_t run_flush_verification_process(const char * obj_pathname, const char * ex h5_send_message(SIGNAL_TO_SCRIPT, obj_pathname, expected); /* Wait for Signal from SCRIPT indicating that verification process has completed. */ - if(h5_wait_message(SIGNAL_FROM_SCRIPT) < 0) TEST_ERROR; + if (h5_wait_message(SIGNAL_FROM_SCRIPT) < 0) + TEST_ERROR; /* Check to see if any errors occurred */ - if(check_for_errors() < 0) TEST_ERROR; + if (check_for_errors() < 0) + TEST_ERROR; /* Return */ return SUCCEED; @@ -820,15 +1053,14 @@ error: return FAIL; } /* run_flush_verification_process */ - /*------------------------------------------------------------------------- * Function: flush_verification * * Purpose: This function tries to open target object in the test file. - * It compares the success of the open function to the expected + * It compares the success of the open function to the expected * value, and succeeds if they are equal and fails if they differ. * - * Note that full path to the object must be provided as the + * Note that full path to the object must be provided as the * obj_pathname argument. * * Return: 0 on Success, 1 on Failure @@ -838,41 +1070,50 @@ error: * *------------------------------------------------------------------------- */ -herr_t flush_verification(const char * obj_pathname, const char * expected) +herr_t +flush_verification(const char *obj_pathname, const char *expected) { /* Variables */ - hid_t oid = -1, fid = -1; - herr_t status = 0; - H5O_info_t oinfo; + hid_t oid = -1, fid = -1; + herr_t status = 0; + H5O_info2_t oinfo; /* Try to open the testfile and then obj_pathname within the file */ - H5E_BEGIN_TRY { - fid = H5Fopen(FILENAME, H5F_ACC_SWMR_READ, H5P_DEFAULT); - oid = H5Oopen(fid, obj_pathname, H5P_DEFAULT); - status = H5Oget_info2(oid, &oinfo, H5O_INFO_BASIC); - } H5E_END_TRY; + H5E_BEGIN_TRY + { + fid = H5Fopen(FILENAME, H5F_ACC_SWMR_READ, H5P_DEFAULT); + oid = H5Oopen(fid, obj_pathname, H5P_DEFAULT); + status = H5Oget_info3(oid, &oinfo, H5O_INFO_BASIC); + } + H5E_END_TRY; /* Compare to expected result */ - if(HDstrcmp(expected, FLUSHED) == 0) { - if((oid < 0) || (status < 0)) { + if (HDstrcmp(expected, FLUSHED) == 0) { + if ((oid < 0) || (status < 0)) { HDfprintf(stderr, "Error! %s should be on disk, but was NOT!\n", obj_pathname); PROCESS_ERROR; } /* end if */ - } else if(HDstrcmp(expected, NOT_FLUSHED) == 0) { - if((oid > 0) || (status > 0)) { - HDfprintf(stderr, "Error! %s not expected to be flushed, but it was found on disk!\n", obj_pathname); + } + else if (HDstrcmp(expected, NOT_FLUSHED) == 0) { + if ((oid > 0) || (status > 0)) { + HDfprintf(stderr, "Error! %s not expected to be flushed, but it was found on disk!\n", + obj_pathname); PROCESS_ERROR; } /* end if */ - } else { - HDfprintf(stderr, "Error! Bad verification parameters. %s is an invalid expected outcome.\n", expected); + } + else { + HDfprintf(stderr, "Error! Bad verification parameters. %s is an invalid expected outcome.\n", + expected); PROCESS_ERROR; } /* end if */ /* Cleanup */ - H5E_BEGIN_TRY { + H5E_BEGIN_TRY + { H5Oclose(oid); H5Fclose(fid); - } H5E_END_TRY; + } + H5E_END_TRY; return SUCCEED; @@ -880,14 +1121,13 @@ error: return FAIL; } /* flush_verification */ - /*------------------------------------------------------------------------- * Function: start_refresh_verification_process * * Purpose: This function is used to communicate with the test script * in order to spawn off a process which will test the * H5*refresh routine. - * + * * Return: 0 on Success, 1 on Failure * * Programmer: Mike McGreevy @@ -895,20 +1135,23 @@ error: * *------------------------------------------------------------------------- */ -herr_t start_refresh_verification_process(const char * obj_pathname) +herr_t +start_refresh_verification_process(const char *obj_pathname) { HDremove(SIGNAL_BETWEEN_PROCESSES_1); - /* Send Signal to SCRIPT indicating that it should kick off a refresh + /* Send Signal to SCRIPT indicating that it should kick off a refresh verification process */ h5_send_message(SIGNAL_TO_SCRIPT, obj_pathname, NULL); - + /* Wait for Signal from VERIFICATION PROCESS indicating that it's opened the target object and ready for MAIN PROCESS to modify it */ - if(h5_wait_message(SIGNAL_BETWEEN_PROCESSES_1) < 0) TEST_ERROR; + if (h5_wait_message(SIGNAL_BETWEEN_PROCESSES_1) < 0) + TEST_ERROR; /* Check to see if any errors occurred */ - if(check_for_errors() < 0) TEST_ERROR; + if (check_for_errors() < 0) + TEST_ERROR; /* Return */ return SUCCEED; @@ -917,15 +1160,14 @@ error: return FAIL; } /* start_refresh_verification_process */ - /*------------------------------------------------------------------------- * Function: end_refresh_verification_process * * Purpose: This function is used to communicate with the verification - * process spawned by the start_refresh_verification_process + * process spawned by the start_refresh_verification_process * function. It gives it the go-ahead to call H5*refresh - * on an object and conlcude the refresh verification. - * + * on an object and conclude the refresh verification. + * * Return: 0 on Success, 1 on Failure * * Programmer: Mike McGreevy @@ -933,8 +1175,9 @@ error: * *------------------------------------------------------------------------- */ -herr_t end_refresh_verification_process(void) -{ +herr_t +end_refresh_verification_process(void) +{ HDremove(SIGNAL_FROM_SCRIPT); /* Send Signal to REFRESH VERIFICATION PROCESS indicating that the object @@ -944,10 +1187,12 @@ herr_t end_refresh_verification_process(void) /* Wait for Signal from SCRIPT indicating that the refresh verification process has completed. */ - if(h5_wait_message(SIGNAL_FROM_SCRIPT) < 0) TEST_ERROR; + if (h5_wait_message(SIGNAL_FROM_SCRIPT) < 0) + TEST_ERROR; /* Check to see if any errors occurred */ - if(check_for_errors() < 0) TEST_ERROR; + if (check_for_errors() < 0) + TEST_ERROR; /* Return */ return SUCCEED; @@ -956,7 +1201,6 @@ error: return FAIL; } /* end_refresh_verification_process */ - /*------------------------------------------------------------------------- * Function: refresh_verification * @@ -974,53 +1218,76 @@ error: * *------------------------------------------------------------------------- */ -herr_t refresh_verification(const char * obj_pathname) +herr_t +refresh_verification(const char *obj_pathname) { /* Variables */ - hid_t oid,fid,status = 0; - H5O_info_t flushed_oinfo; - H5O_info_t refreshed_oinfo; - int tries = 800, sleep_tries = 400; - hbool_t ok = FALSE; - + hid_t oid, fid, status = 0; + H5O_info2_t flushed_oinfo; + H5O_info2_t refreshed_oinfo; + H5O_native_info_t flushed_ninfo; + H5O_native_info_t refreshed_ninfo; + int tries = 800, sleep_tries = 400; + int token_cmp; + hbool_t ok = FALSE; + HDremove(SIGNAL_BETWEEN_PROCESSES_2); /* Open Object */ - if((fid = H5Fopen(FILENAME, H5F_ACC_SWMR_READ, H5P_DEFAULT)) < 0) PROCESS_ERROR; - if((oid = H5Oopen(fid, obj_pathname, H5P_DEFAULT)) < 0) PROCESS_ERROR; + if ((fid = H5Fopen(FILENAME, H5F_ACC_SWMR_READ, H5P_DEFAULT)) < 0) + PROCESS_ERROR; + if ((oid = H5Oopen(fid, obj_pathname, H5P_DEFAULT)) < 0) + PROCESS_ERROR; /* Get Object info */ - if((status = H5Oget_info2(oid, &flushed_oinfo, H5O_INFO_BASIC|H5O_INFO_NUM_ATTRS|H5O_INFO_HDR)) < 0) PROCESS_ERROR; - + if ((status = H5Oget_info3(oid, &flushed_oinfo, H5O_INFO_BASIC | H5O_INFO_NUM_ATTRS)) < 0) + PROCESS_ERROR; + if ((status = H5Oget_native_info(oid, &flushed_ninfo, H5O_NATIVE_INFO_HDR)) < 0) + PROCESS_ERROR; + /* Make sure there are no attributes on the object. This is just a sanity check to ensure we didn't erroneously flush the attribute before starting the verification. */ - if(flushed_oinfo.num_attrs != 0) + if (flushed_oinfo.num_attrs != 0) PROCESS_ERROR; - /* Send Signal to MAIN PROCESS indicating that it can go ahead and modify the + /* Send Signal to MAIN PROCESS indicating that it can go ahead and modify the object. */ h5_send_message(SIGNAL_BETWEEN_PROCESSES_1, obj_pathname, NULL); - /* Wait for Signal from MAIN PROCESS indicating that it's modified the + /* Wait for Signal from MAIN PROCESS indicating that it's modified the object and we can run verification now. */ - if(h5_wait_message(SIGNAL_BETWEEN_PROCESSES_2) < 0) PROCESS_ERROR; + if (h5_wait_message(SIGNAL_BETWEEN_PROCESSES_2) < 0) + PROCESS_ERROR; - /* Get object info again. This will NOT reflect what's on disk, only what's - in the cache. Thus, all values will be unchanged from above, despite + /* Get object info again. This will NOT reflect what's on disk, only what's + in the cache. Thus, all values will be unchanged from above, despite newer information being on disk. */ - if((status = H5Oget_info2(oid, &refreshed_oinfo, H5O_INFO_BASIC|H5O_INFO_NUM_ATTRS|H5O_INFO_HDR)) < 0) PROCESS_ERROR; + if ((status = H5Oget_info3(oid, &refreshed_oinfo, H5O_INFO_BASIC | H5O_INFO_NUM_ATTRS)) < 0) + PROCESS_ERROR; + if ((status = H5Oget_native_info(oid, &refreshed_ninfo, H5O_NATIVE_INFO_HDR)) < 0) + PROCESS_ERROR; /* Verify that before doing a refresh, getting the object info returns stale information. (i.e., unchanged from above, despite new info on disk). */ - if(flushed_oinfo.addr != refreshed_oinfo.addr) PROCESS_ERROR; - if(flushed_oinfo.type != refreshed_oinfo.type) PROCESS_ERROR; - if(flushed_oinfo.hdr.version != refreshed_oinfo.hdr.version) PROCESS_ERROR; - if(flushed_oinfo.hdr.flags != refreshed_oinfo.hdr.flags) PROCESS_ERROR; - if(flushed_oinfo.num_attrs != refreshed_oinfo.num_attrs) PROCESS_ERROR; - if(flushed_oinfo.hdr.nmesgs != refreshed_oinfo.hdr.nmesgs) PROCESS_ERROR; - if(flushed_oinfo.hdr.nchunks != refreshed_oinfo.hdr.nchunks) PROCESS_ERROR; - if(flushed_oinfo.hdr.space.total != refreshed_oinfo.hdr.space.total) PROCESS_ERROR; + if (H5Otoken_cmp(oid, &flushed_oinfo.token, &refreshed_oinfo.token, &token_cmp) < 0) + PROCESS_ERROR; + if (token_cmp) + PROCESS_ERROR; + if (flushed_oinfo.type != refreshed_oinfo.type) + PROCESS_ERROR; + if (flushed_oinfo.num_attrs != refreshed_oinfo.num_attrs) + PROCESS_ERROR; + if (flushed_ninfo.hdr.version != refreshed_ninfo.hdr.version) + PROCESS_ERROR; + if (flushed_ninfo.hdr.flags != refreshed_ninfo.hdr.flags) + PROCESS_ERROR; + if (flushed_ninfo.hdr.nmesgs != refreshed_ninfo.hdr.nmesgs) + PROCESS_ERROR; + if (flushed_ninfo.hdr.nchunks != refreshed_ninfo.hdr.nchunks) + PROCESS_ERROR; + if (flushed_ninfo.hdr.space.total != refreshed_ninfo.hdr.space.total) + PROCESS_ERROR; /* Refresh object */ /* The H5*refresh function called depends on which object we are trying @@ -1028,18 +1295,22 @@ herr_t refresh_verification(const char * obj_pathname) * test cases is easy). */ do { - if((HDstrcmp(obj_pathname, D1) == 0) || (HDstrcmp(obj_pathname, D2) == 0)) { - if(H5Drefresh(oid) < 0) PROCESS_ERROR; + if ((HDstrcmp(obj_pathname, D1) == 0) || (HDstrcmp(obj_pathname, D2) == 0)) { + if (H5Drefresh(oid) < 0) + PROCESS_ERROR; } /* end if */ - else if((HDstrcmp(obj_pathname, G1) == 0) || (HDstrcmp(obj_pathname, G2) == 0)) { - if(H5Grefresh(oid) < 0) PROCESS_ERROR; + else if ((HDstrcmp(obj_pathname, G1) == 0) || (HDstrcmp(obj_pathname, G2) == 0)) { + if (H5Grefresh(oid) < 0) + PROCESS_ERROR; } /* end if */ - else if((HDstrcmp(obj_pathname, T1) == 0) || (HDstrcmp(obj_pathname, T2) == 0)) { - if(H5Trefresh(oid) < 0) PROCESS_ERROR; + else if ((HDstrcmp(obj_pathname, T1) == 0) || (HDstrcmp(obj_pathname, T2) == 0)) { + if (H5Trefresh(oid) < 0) + PROCESS_ERROR; } /* end if */ - else if((HDstrcmp(obj_pathname, D3) == 0) || (HDstrcmp(obj_pathname, G3) == 0) || - (HDstrcmp(obj_pathname, T3) == 0)) { - if(H5Orefresh(oid) < 0) PROCESS_ERROR; + else if ((HDstrcmp(obj_pathname, D3) == 0) || (HDstrcmp(obj_pathname, G3) == 0) || + (HDstrcmp(obj_pathname, T3) == 0)) { + if (H5Orefresh(oid) < 0) + PROCESS_ERROR; } /* end if */ else { HDfprintf(stdout, "Error. %s is an unrecognized object.\n", obj_pathname); @@ -1047,41 +1318,46 @@ herr_t refresh_verification(const char * obj_pathname) } /* end else */ /* Get object info. This should now accurately reflect the refreshed object on disk. */ - if((status = H5Oget_info2(oid, &refreshed_oinfo, H5O_INFO_BASIC|H5O_INFO_NUM_ATTRS|H5O_INFO_HDR)) < 0) + if ((status = H5Oget_info3(oid, &refreshed_oinfo, H5O_INFO_BASIC | H5O_INFO_NUM_ATTRS)) < 0) + PROCESS_ERROR; + if ((status = H5Oget_native_info(oid, &refreshed_ninfo, H5O_NATIVE_INFO_HDR)) < 0) + PROCESS_ERROR; + if (H5Otoken_cmp(oid, &flushed_oinfo.token, &refreshed_oinfo.token, &token_cmp) < 0) PROCESS_ERROR; /* Confirm following (first 4) attributes are the same: */ /* Confirm following (last 4) attributes are different */ - if( (flushed_oinfo.addr == refreshed_oinfo.addr) && - (flushed_oinfo.type == refreshed_oinfo.type) && - (flushed_oinfo.hdr.version == refreshed_oinfo.hdr.version) && - (flushed_oinfo.hdr.flags == refreshed_oinfo.hdr.flags) && + if ((!token_cmp) && (flushed_oinfo.type == refreshed_oinfo.type) && (flushed_oinfo.num_attrs != refreshed_oinfo.num_attrs) && - (flushed_oinfo.hdr.nmesgs != refreshed_oinfo.hdr.nmesgs) && - (flushed_oinfo.hdr.nchunks != refreshed_oinfo.hdr.nchunks) && - (flushed_oinfo.hdr.space.total != refreshed_oinfo.hdr.space.total) ) { + (flushed_ninfo.hdr.version == refreshed_ninfo.hdr.version) && + (flushed_ninfo.hdr.flags == refreshed_ninfo.hdr.flags) && + (flushed_ninfo.hdr.nmesgs != refreshed_ninfo.hdr.nmesgs) && + (flushed_ninfo.hdr.nchunks != refreshed_ninfo.hdr.nchunks) && + (flushed_ninfo.hdr.space.total != refreshed_ninfo.hdr.space.total)) { ok = TRUE; break; } - if(tries == sleep_tries) + if (tries == sleep_tries) HDsleep(1); - } while(--tries); + } while (--tries); - if(!ok) { - HDprintf("FLUSHED: num_attrs=%d, nmesgs=%d, nchunks=%d, total=%d\n", - (int)flushed_oinfo.num_attrs, (int)flushed_oinfo.hdr.nmesgs, - (int)flushed_oinfo.hdr.nchunks, (int)flushed_oinfo.hdr.space.total); - HDprintf("REFRESHED: num_attrs=%d, nmesgs=%d, nchunks=%d, total=%d\n", - (int)refreshed_oinfo.num_attrs, (int)refreshed_oinfo.hdr.nmesgs, - (int)refreshed_oinfo.hdr.nchunks, (int)refreshed_oinfo.hdr.space.total); + if (!ok) { + HDprintf("FLUSHED: num_attrs=%d, nmesgs=%d, nchunks=%d, total=%d\n", (int)flushed_oinfo.num_attrs, + (int)flushed_ninfo.hdr.nmesgs, (int)flushed_ninfo.hdr.nchunks, + (int)flushed_ninfo.hdr.space.total); + HDprintf("REFRESHED: num_attrs=%d, nmesgs=%d, nchunks=%d, total=%d\n", (int)refreshed_oinfo.num_attrs, + (int)refreshed_ninfo.hdr.nmesgs, (int)refreshed_ninfo.hdr.nchunks, + (int)refreshed_ninfo.hdr.space.total); PROCESS_ERROR; } /* Close objects */ - if(H5Oclose(oid) < 0) PROCESS_ERROR; - if(H5Fclose(fid) < 0) PROCESS_ERROR; + if (H5Oclose(oid) < 0) + PROCESS_ERROR; + if (H5Fclose(fid) < 0) + PROCESS_ERROR; /* Return */ return SUCCEED; @@ -1090,15 +1366,14 @@ error: return FAIL; } /* refresh_verification */ - /*------------------------------------------------------------------------- * Function: check_for_errors() * * Purpose: This function checks the status of external verification * processes to see if they've succeeded. It checks for the - * existance of flushrefresh_ERROR file. If present, that indicates + * existence of flushrefresh_ERROR file. If present, that indicates * an external verification process has failed, and this function - * thus fails as well. If not present, then nothing else has + * thus fails as well. If not present, then nothing else has * failed, and this function succeeds. * * Return: 0 on Success, 1 on Failure @@ -1108,11 +1383,12 @@ error: * *------------------------------------------------------------------------- */ -herr_t check_for_errors(void) +herr_t +check_for_errors(void) { - FILE * file; + FILE *file; - if((file = HDfopen(ERRFILE, "r"))) { + if ((file = HDfopen(ERRFILE, "r"))) { HDfclose(file); HDremove(ERRFILE); return FAIL; @@ -1121,33 +1397,33 @@ herr_t check_for_errors(void) return SUCCEED; } /* check_for_errors */ - /*------------------------------------------------------------------------- * Function: end_verification - * - * Purpose: Tells test script that verification routines are completed and - * that the test can wrap up. + * + * Purpose: Tells test script that verification routines are completed and + * that the test can wrap up. * * Return: void * * Programmer: Mike McGreevy * July 16, 2010 - * + * *------------------------------------------------------------------------- */ -herr_t end_verification(void) +herr_t +end_verification(void) { HDremove(SIGNAL_FROM_SCRIPT); /* Send Signal to SCRIPT to indicate that we're done with verification. */ h5_send_message(SIGNAL_TO_SCRIPT, "VERIFICATION_DONE", "VERIFICATION_DONE"); - + /* Wait for Signal from SCRIPT indicating that we can continue. */ - if(h5_wait_message(SIGNAL_FROM_SCRIPT) < 0) TEST_ERROR; + if (h5_wait_message(SIGNAL_FROM_SCRIPT) < 0) + TEST_ERROR; return SUCCEED; error: return FAIL; } /* end_verification */ - |