summaryrefslogtreecommitdiffstats
path: root/test/plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/plugin.c')
-rw-r--r--test/plugin.c426
1 files changed, 270 insertions, 156 deletions
diff --git a/test/plugin.c b/test/plugin.c
index 1254e9a..f536a9e 100644
--- a/test/plugin.c
+++ b/test/plugin.c
@@ -10,9 +10,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Programmer: Raymond Lu
- * 13 February 2013
- *
* Purpose: Tests the plugin module (H5PL)
*/
@@ -660,13 +657,10 @@ error:
/*-------------------------------------------------------------------------
* Function: test_groups_with_filters
*
- * Purpose: Tests opening group with dynamically loaded filters
- *
- * Return: Success: 0
- * Failure: -1
+ * Purpose: Tests opening group with dynamically loaded filters
*
- * Programmer: Raymond Lu
- * 1 April 2013
+ * Return: Success: 0
+ * Failure: -1
*
*-------------------------------------------------------------------------
*/
@@ -710,261 +704,380 @@ error:
/*-------------------------------------------------------------------------
- * Function: test_filter_path_apis
+ * Function: test_path_api_calls
*
- * Purpose: Tests accessing the path table for dynamically loaded filters
+ * Purpose: Tests the H5PL API calls that manipulate the plugin search
+ * paths.
*
- * Return: Success: 0
- * Failure: -1
+ * Return: SUCCEED/FAIL
+ *
*-------------------------------------------------------------------------
*/
static herr_t
-test_filter_path_apis(void)
+test_path_api_calls(void)
{
- herr_t ret_value = -1;
- unsigned int i;
- unsigned int ndx;
+ unsigned int n_starting_paths;
+ unsigned int u;
+ unsigned int n_paths;
herr_t ret;
- ssize_t pathlen = -1;
- char pathname[256];
- char tempname[256];
+ ssize_t path_len = -1;
+ char path[256];
+ char temp_name[256];
+ herr_t ret_value = -1;
HDputs("Testing access to the filter path table");
- if(H5Zfilter_avail(H5Z_FILTER_DYNLIB1) != TRUE) TEST_ERROR
+ if(H5Zfilter_avail(H5Z_FILTER_DYNLIB1) != TRUE)
+ TEST_ERROR
+
+ /* Set the number of paths to create for this test.
+ *
+ * This should be set high enough to ensure that at least one array
+ * expansion will take place. See H5PLpath.c for details.
+ */
+ n_starting_paths = 42;
+
- H5PLsize(&ndx);
+ /****************/
+ /* H5PLremove() */
+ /****************/
+ /* Remove all the current paths */
TESTING(" remove");
- /* Remove all existing paths*/
- for(i=ndx; i > 0; i--)
- if(H5PLremove(i-1) < 0) {
- HDfprintf(stderr," at %d: %s\n", i, pathname);
+
+ /* Get the current size */
+ if(H5PLsize(&n_paths) < 0)
+ TEST_ERROR
+
+ /* Remove all existing paths */
+ for(u = n_paths; u > 0; u--)
+ if(H5PLremove(u-1) < 0) {
+ HDfprintf(stderr," at %u: %s\n", u, path);
TEST_ERROR
- } /* end if */
+ }
+
/* Verify the table is empty */
- H5PLsize(&ndx);
- if(ndx > 0) TEST_ERROR
+ if(H5PLsize(&n_paths) < 0)
+ TEST_ERROR
+ if(n_paths > 0)
+ TEST_ERROR
+
PASSED();
- TESTING(" remove (exceed min)");
- /* Exceed the min path removal */
+
+ TESTING(" remove (index 0 in empty table)");
+
+ /* Try to remove index zero in an empty list (SHOULD FAIL) */
H5E_BEGIN_TRY {
ret = H5PLremove(0);
} H5E_END_TRY
- if(ret >= 0) TEST_ERROR
+ if(ret >= 0)
+ TEST_ERROR
+
PASSED();
+
+ /****************/
+ /* H5PLappend() */
+ /****************/
+
TESTING(" append");
- /* Create multiple paths to fill table */
- for(i=0; i < H5PL_MAX_PATH_NUM; i++) {
- HDsprintf(pathname, "a_path_%d", i);
- if(H5PLappend(pathname) < 0) {
- HDfprintf(stderr," at %d: %s\n", i, pathname);
+
+ /* Add a bunch of paths to the path table */
+ for(u = 0; u < n_starting_paths; u++) {
+ HDsprintf(path, "a_path_%u", u);
+ if(H5PLappend(path) < 0) {
+ HDfprintf(stderr," at %u: %s\n", u, path);
TEST_ERROR
}
}
- /* Verify the table is full */
- H5PLsize(&ndx);
- if(ndx != H5PL_MAX_PATH_NUM) TEST_ERROR
- PASSED();
- TESTING(" append (exceed)");
- /* Exceed the max path append */
- H5E_BEGIN_TRY {
- HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM);
- ret = H5PLappend(pathname);
- } H5E_END_TRY
- if(ret >= 0) TEST_ERROR
PASSED();
- TESTING(" remove (exceed max)");
- /* Exceed the max path removal */
+
+ /**********************/
+ /* H5PLremove() again */
+ /**********************/
+
+ TESTING(" remove (index too high)");
+
+ /* Try to remove a path where the index is beyond the table capacity (SHOULD FAIL) */
H5E_BEGIN_TRY {
- ret = H5PLremove(H5PL_MAX_PATH_NUM);
+ ret = H5PLremove(n_starting_paths);
} H5E_END_TRY
- if(ret >= 0) TEST_ERROR
+
+ if(ret >= 0)
+ TEST_ERROR
+
PASSED();
+
+ /*************/
+ /* H5PLget() */
+ /*************/
+
TESTING(" get (path name)");
- if((pathlen = H5PLget(0, NULL, 0)) <= 0) {
+
+ /* Get the path length by passing in NULL */
+ if((path_len = H5PLget(0, NULL, 0)) <= 0) {
HDfprintf(stderr," get path 0 length failed\n");
TEST_ERROR
}
- if(pathlen != 8) TEST_ERROR
+ if(path_len != 8)
+ TEST_ERROR
- if((pathlen = H5PLget(0, pathname, 256)) <= 0) {
- HDfprintf(stderr," get 0 len: %d : %s\n", pathlen, pathname);
+ /* Get the path */
+ if((path_len = H5PLget(0, path, 256)) <= 0) {
+ HDfprintf(stderr," get 0 len: %u : %s\n", path_len, path);
TEST_ERROR
}
- if(HDstrcmp(pathname, "a_path_0") != 0) {
- HDfprintf(stderr," get 0: %s\n", pathname);
+ if(HDstrcmp(path, "a_path_0") != 0) {
+ HDfprintf(stderr," get 0: %s\n", path);
TEST_ERROR
}
+
PASSED();
- TESTING(" get (bounds)");
- if((pathlen = H5PLget(1, pathname, 256)) <= 0) TEST_ERROR
- if(HDstrcmp(pathname, "a_path_1") != 0) {
- HDfprintf(stderr," get 1: %s\n", pathname);
+
+ TESTING(" get (high and low indices)");
+
+ /* Get path at index 1 */
+ if((path_len = H5PLget(1, path, 256)) <= 0)
+ TEST_ERROR
+ if(HDstrcmp(path, "a_path_1") != 0) {
+ HDfprintf(stderr," get 1: %s\n", path);
TEST_ERROR
}
- if((pathlen = H5PLget(H5PL_MAX_PATH_NUM - 1, pathname, 256)) <= 0) TEST_ERROR
- HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM - 1);
- if(HDstrcmp(pathname, tempname) != 0) {
- HDfprintf(stderr," get %d: %s\n", H5PL_MAX_PATH_NUM - 1, pathname);
+
+ /* Get path at the last index */
+ if((path_len = H5PLget(n_starting_paths - 1, path, 256)) <= 0)
+ TEST_ERROR
+ HDsprintf(temp_name, "a_path_%u", n_starting_paths - 1);
+ if(HDstrcmp(path, temp_name) != 0) {
+ HDfprintf(stderr," get %u: %s\n", n_starting_paths - 1, path);
TEST_ERROR
}
+
PASSED();
- TESTING(" get (bounds exceed)");
+
+ TESTING(" get (index too high)");
+
+ /* Get path at the last + 1 index (SHOULD FAIL) */
H5E_BEGIN_TRY {
- pathlen = H5PLget(H5PL_MAX_PATH_NUM, NULL, 0);
+ path_len = H5PLget(n_starting_paths, NULL, 0);
} H5E_END_TRY
- if(pathlen > 0) TEST_ERROR
+ if(path_len > 0)
+ TEST_ERROR
+
PASSED();
- TESTING(" remove (verify for prepend)");
- /* Remove one path*/
- if(H5PLremove(8) < 0) TEST_ERROR
+
+ /*****************/
+ /* H5PLprepend() */
+ /*****************/
+
+ /* We'll remove a path at an arbitrary index and then
+ * prepend a new path.
+ */
+
+ TESTING(" remove (arbitrary index 1)");
+
+ /* Remove one path */
+ if(H5PLremove(8) < 0)
+ TEST_ERROR
/* Verify that the entries were moved */
- if((pathlen = H5PLget(8, pathname, 256)) <= 0) TEST_ERROR
- if(HDstrcmp(pathname, "a_path_9") != 0) {
- HDfprintf(stderr," get 8: %s\n", pathname);
+ if((path_len = H5PLget(8, path, 256)) <= 0)
+ TEST_ERROR
+ if(HDstrcmp(path, "a_path_9") != 0) {
+ HDfprintf(stderr," get 8: %s\n", path);
TEST_ERROR
}
+
+ /* Verify the table shrank */
+ if(H5PLsize(&n_paths) < 0)
+ TEST_ERROR
+ if(n_paths != n_starting_paths - 1)
+ TEST_ERROR
+
PASSED();
- /* Verify the table is not full */
- H5PLsize(&ndx);
- if (ndx != H5PL_MAX_PATH_NUM - 1) TEST_ERROR
TESTING(" prepend");
- /* Prepend one path*/
- HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 1);
- if(H5PLprepend(pathname) < 0) {
- HDfprintf(stderr," prepend %d: %s\n", H5PL_MAX_PATH_NUM + 1, pathname);
+
+ /* Prepend one path */
+ HDsprintf(path, "a_path_%d", n_starting_paths + 1);
+ if(H5PLprepend(path) < 0) {
+ HDfprintf(stderr," prepend %u: %s\n", n_starting_paths + 1, path);
TEST_ERROR
}
- /* Verify the table is full */
- H5PLsize(&ndx);
- if(ndx != H5PL_MAX_PATH_NUM) TEST_ERROR
+ /* Verify the table increased */
+ if(H5PLsize(&n_paths) < 0)
+ TEST_ERROR
+ if(n_paths != n_starting_paths)
+ TEST_ERROR
/* Verify that the entries were moved */
- if(H5PLget(8, pathname, 256) <= 0) TEST_ERROR
- if(HDstrcmp(pathname, "a_path_7") != 0) {
- HDfprintf(stderr," get 8: %s\n", pathname);
+ if(H5PLget(8, path, 256) <= 0)
+ TEST_ERROR
+ if(HDstrcmp(path, "a_path_7") != 0) {
+ HDfprintf(stderr," get 8: %s\n", path);
TEST_ERROR
}
- if(H5PLget(0, pathname, 256) <= 0) TEST_ERROR
- HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1);
- if(HDstrcmp(pathname, tempname) != 0) {
- HDfprintf(stderr," get 0: %s\n", pathname);
+
+ /* Verify that the path was inserted at index zero */
+ if(H5PLget(0, path, 256) <= 0)
+ TEST_ERROR
+ HDsprintf(temp_name, "a_path_%d", n_starting_paths + 1);
+ if(HDstrcmp(path, temp_name) != 0) {
+ HDfprintf(stderr," get 0: %s\n", path);
TEST_ERROR
}
- PASSED();
- TESTING(" prepend (exceed)");
- /* Exceed the max path prepend */
- H5E_BEGIN_TRY {
- HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 2);
- ret = H5PLprepend(pathname);
- } H5E_END_TRY
- if(ret >= 0) TEST_ERROR
PASSED();
+
+ /*****************/
+ /* H5PLreplace() */
+ /*****************/
+
TESTING(" replace");
- /* Replace one path*/
- HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 4);
- if(H5PLreplace(pathname, 1) < 0) {
- HDfprintf(stderr," replace 1: %s\n", pathname);
+
+ /* Replace one path at index 1 */
+ HDsprintf(path, "a_path_%u", n_starting_paths + 4);
+ if(H5PLreplace(path, 1) < 0) {
+ HDfprintf(stderr," replace 1: %s\n", path);
TEST_ERROR
}
- /* Verify the table is full */
- H5PLsize(&ndx);
- if(ndx != H5PL_MAX_PATH_NUM) TEST_ERROR
+ /* Verify the table size remained the same */
+ if(H5PLsize(&n_paths) < 0)
+ TEST_ERROR
+ if(n_paths != n_starting_paths)
+ TEST_ERROR
+
+ /* Verify that the entries were not moved by
+ * inspecting the paths at indices +/- 1.
+ */
- /* Verify that the entries were not moved */
- if(H5PLget(0, pathname, 256) <= 0) TEST_ERROR
- HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1);
- if(HDstrcmp(pathname, tempname) != 0) {
- HDfprintf(stderr," get 0: %s\n", pathname);
+ /* Check path at index 0 */
+ if(H5PLget(0, path, 256) <= 0)
+ TEST_ERROR
+ HDsprintf(temp_name, "a_path_%u", n_starting_paths + 1);
+ if(HDstrcmp(path, temp_name) != 0) {
+ HDfprintf(stderr," get 0: %s\n", path);
TEST_ERROR
}
- if(H5PLget(2, pathname, 256) <= 0) TEST_ERROR
- if(HDstrcmp(pathname, "a_path_1") != 0) {
- HDfprintf(stderr," get 2: %s\n", pathname);
+
+ /* Check path at index 2 */
+ if(H5PLget(2, path, 256) <= 0)
+ TEST_ERROR
+ if(HDstrcmp(path, "a_path_1") != 0) {
+ HDfprintf(stderr," get 2: %s\n", path);
TEST_ERROR
}
+
PASSED();
- TESTING(" remove (verify for insert)");
- /* Remove one path*/
- if(H5PLremove(4) < 0) TEST_ERROR
+
+ /****************/
+ /* H5PLinsert() */
+ /****************/
+
+ /* We'll remove a path at an arbitrary index and then
+ * insert a new path.
+ */
+
+ TESTING(" remove (arbitrary index 2)");
+
+ /* Remove one path */
+ if(H5PLremove(4) < 0)
+ TEST_ERROR
/* Verify that the entries were moved */
- if(H5PLget(4, pathname, 256) <= 0) TEST_ERROR
- if(HDstrcmp(pathname, "a_path_4") != 0) {
- HDfprintf(stderr," get 4: %s\n", pathname);
+ if(H5PLget(4, path, 256) <= 0)
+ TEST_ERROR
+ if(HDstrcmp(path, "a_path_4") != 0) {
+ HDfprintf(stderr," get 4: %s\n", path);
TEST_ERROR
}
+
+ /* Verify the table size */
+ if(H5PLsize(&n_paths) < 0)
+ TEST_ERROR
+ if(n_paths != n_starting_paths - 1)
+ TEST_ERROR
PASSED();
- /* Verify the table is not full */
- H5PLsize(&ndx);
- if(ndx != 15) TEST_ERROR
TESTING(" insert");
- /* Insert one path*/
- HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 5);
- if(H5PLinsert(pathname, 3) < 0) {
- HDfprintf(stderr," insert 3: %s\n", pathname);
+
+ /* Insert one path at index 3*/
+ HDsprintf(path, "a_path_%d", n_starting_paths + 5);
+ if(H5PLinsert(path, 3) < 0) {
+ HDfprintf(stderr," insert 3: %s\n", path);
TEST_ERROR
}
/* Verify that the entries were moved */
- if(H5PLget(4, pathname, 256) <= 0) TEST_ERROR
- if(HDstrcmp(pathname, "a_path_2") != 0) {
- HDfprintf(stderr," get 4: %s\n", pathname);
+ if(H5PLget(4, path, 256) <= 0)
+ TEST_ERROR
+ if(HDstrcmp(path, "a_path_2") != 0) {
+ HDfprintf(stderr," get 4: %s\n", path);
TEST_ERROR
}
+
+ /* Verify the table size increased */
+ if(H5PLsize(&n_paths) < 0)
+ TEST_ERROR
+ if(n_paths != n_starting_paths)
+ TEST_ERROR
+
PASSED();
- /* Verify the table is full */
- H5PLsize(&ndx);
- if(ndx != H5PL_MAX_PATH_NUM) TEST_ERROR
- TESTING(" insert (exceed)");
- /* Exceed the max path insert */
- H5E_BEGIN_TRY {
- HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 6);
- ret = H5PLinsert(pathname, 12);
- } H5E_END_TRY
- if(ret >= 0) TEST_ERROR
+ /****************/
+ /* H5PLremove() */
+ /****************/
+
+ /* Remove all the current paths */
+ TESTING(" remove (all)");
+
+ /* Get the current size */
+ if(H5PLsize(&n_paths) < 0)
+ TEST_ERROR
+
+ /* Remove all existing paths */
+ for(u = n_paths; u > 0; u--)
+ if(H5PLremove(u-1) < 0) {
+ HDfprintf(stderr," at %u: %s\n", u, path);
+ TEST_ERROR
+ }
+
+ /* Verify the table is empty */
+ if(H5PLsize(&n_paths) < 0)
+ TEST_ERROR
+ if(n_paths > 0)
+ TEST_ERROR
PASSED();
- ret_value = 0;
+
+ return SUCCEED;
error:
- return ret_value;
-}
+ return FAIL;
+} /* end test_path_api_calls() */
/*-------------------------------------------------------------------------
* Function: main
*
- * Purpose: Tests the plugin module (H5PL)
- *
- * Return: Success: exit(EXIT_SUCCESS)
+ * Purpose: Tests the plugin module (H5PL)
*
- * Failure: exit(EXIT_FAILURE)
- *
- * Programmer: Raymond Lu
- * 14 March 2013
+ * Return: EXIT_SUCCESS/EXIT_FAILURE
*
*-------------------------------------------------------------------------
*/
@@ -1063,18 +1176,19 @@ main(void)
if(H5Fclose(file) < 0) TEST_ERROR
/* Test the APIs for access to the filter plugin path table */
- nerrors += (test_filter_path_apis() < 0 ? 1 : 0);
+ nerrors += (test_path_api_calls() < 0 ? 1 : 0);
- if(nerrors) TEST_ERROR
+ if(nerrors)
+ TEST_ERROR
HDprintf("All plugin tests passed.\n");
h5_cleanup(FILENAME, fapl);
- return 0;
+ HDexit(EXIT_SUCCESS);
error:
nerrors = MAX(1, nerrors);
HDprintf("***** %d PLUGIN TEST%s FAILED! *****\n", nerrors, 1 == nerrors ? "" : "S");
- return 1;
-}
+ HDexit(EXIT_FAILURE);
+} /* end main() */