summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/vol_plugin.c185
1 files changed, 172 insertions, 13 deletions
diff --git a/test/vol_plugin.c b/test/vol_plugin.c
index 90583e0..b4df14f 100644
--- a/test/vol_plugin.c
+++ b/test/vol_plugin.c
@@ -12,6 +12,11 @@
/*
* Purpose: Tests basic VOL plugin operations (registration, etc.).
+ * Uses the null VOL connector (built with the testing code)
+ * which is loaded as a dynamic plugin.
+ *
+ * TO DO: Adapt the null VOL connector to do something interesting with
+ * the property list.
*/
#include "h5test.h"
@@ -20,22 +25,22 @@
/*-------------------------------------------------------------------------
- * Function: test_registration()
+ * Function: test_registration_by_value()
*
* Purpose: Tests if we can load, register, and close a VOL
- * connector.
+ * connector by value.
*
* Return: SUCCEED/FAIL
*
*-------------------------------------------------------------------------
*/
static herr_t
-test_registration(void)
+test_registration_by_value(void)
{
htri_t is_registered = FAIL;
hid_t vol_id = H5I_INVALID_HID;
- TESTING("VOL registration");
+ TESTING("VOL registration by value");
/* The null VOL connector should not be registered at the start of the test */
if((is_registered = H5VLis_connector_registered(NULL_VOL_CONNECTOR_NAME)) < 0)
@@ -43,8 +48,8 @@ test_registration(void)
if(TRUE == is_registered)
FAIL_PUTS_ERROR("NULL VOL connector is inappropriately registered");
- /* Register the connector by name */
- if((vol_id = H5VLregister_connector_by_name(NULL_VOL_CONNECTOR_NAME, H5P_DEFAULT)) < 0)
+ /* Register the connector by value */
+ if((vol_id = H5VLregister_connector_by_value(NULL_VOL_CONNECTOR_VALUE, H5P_DEFAULT)) < 0)
TEST_ERROR;
/* The connector should be registered now */
@@ -63,8 +68,44 @@ test_registration(void)
if(TRUE == is_registered)
FAIL_PUTS_ERROR("NULL VOL connector is inappropriately registered");
- /* Register the connector by ID */
- if((vol_id = H5VLregister_connector_by_value(NULL_VOL_CONNECTOR_VALUE, H5P_DEFAULT)) < 0)
+ PASSED();
+ return SUCCEED;
+
+error:
+ H5E_BEGIN_TRY {
+ H5VLunregister_connector(vol_id);
+ } H5E_END_TRY;
+ return FAIL;
+
+} /* end test_registration_by_value() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_registration_by_name()
+ *
+ * Purpose: Tests if we can load, register, and close a VOL
+ * connector by name.
+ *
+ * Return: SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_registration_by_name(void)
+{
+ htri_t is_registered = FAIL;
+ hid_t vol_id = H5I_INVALID_HID;
+
+ TESTING("registering a VOL connector multiple times");
+
+ /* The null VOL connector should not be registered at the start of the test */
+ if((is_registered = H5VLis_connector_registered(NULL_VOL_CONNECTOR_NAME)) < 0)
+ TEST_ERROR;
+ if(TRUE == is_registered)
+ FAIL_PUTS_ERROR("NULL VOL connector is inappropriately registered");
+
+ /* Register the connector by name */
+ if((vol_id = H5VLregister_connector_by_name(NULL_VOL_CONNECTOR_NAME, H5P_DEFAULT)) < 0)
TEST_ERROR;
/* The connector should be registered now */
@@ -73,9 +114,6 @@ test_registration(void)
if(FALSE == is_registered)
FAIL_PUTS_ERROR("NULL VOL connector was not registered");
- /* XXX: Test get connector name/value here */
- /* XXX: Test double registration, too */
-
/* Unregister the connector */
if(H5VLunregister_connector(vol_id) < 0)
TEST_ERROR;
@@ -95,7 +133,125 @@ error:
} H5E_END_TRY;
return FAIL;
-} /* end test_registration() */
+} /* end test_registration_by_name() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_multiple_registration()
+ *
+ * Purpose: Tests if we can register a VOL connector multiple times.
+ *
+ * Return: SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+#define N_REGISTRATIONS 10
+static herr_t
+test_multiple_registration(void)
+{
+ htri_t is_registered = FAIL;
+ hid_t vol_ids[N_REGISTRATIONS];
+ int i;
+
+ TESTING("VOL registration by name");
+
+ /* The null VOL connector should not be registered at the start of the test */
+ if((is_registered = H5VLis_connector_registered(NULL_VOL_CONNECTOR_NAME)) < 0)
+ TEST_ERROR;
+ if(TRUE == is_registered)
+ FAIL_PUTS_ERROR("NULL VOL connector is inappropriately registered");
+
+ /* Register the connector multiple times */
+ for(i = 0; i < N_REGISTRATIONS; i++) {
+ if((vol_ids[i] = H5VLregister_connector_by_name(NULL_VOL_CONNECTOR_NAME, H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+ }
+
+ /* The connector should be registered now */
+ if((is_registered = H5VLis_connector_registered(NULL_VOL_CONNECTOR_NAME)) < 0)
+ TEST_ERROR;
+ if(FALSE == is_registered)
+ FAIL_PUTS_ERROR("NULL VOL connector was not registered");
+
+ /* Unregister the connector */
+ for(i = 0; i < N_REGISTRATIONS; i++) {
+ if(H5VLunregister_connector(vol_ids[i]) < 0)
+ TEST_ERROR;
+ /* Also test close on some of the IDs. This call currently works
+ * identically to unregister.
+ */
+ i++;
+ if(H5VLclose(vol_ids[i]) < 0)
+ TEST_ERROR;
+ }
+
+ /* The connector should not be registered now */
+ if((is_registered = H5VLis_connector_registered(NULL_VOL_CONNECTOR_NAME)) < 0)
+ TEST_ERROR;
+ if(TRUE == is_registered)
+ FAIL_PUTS_ERROR("NULL VOL connector is inappropriately registered");
+
+ PASSED();
+ return SUCCEED;
+
+error:
+ H5E_BEGIN_TRY {
+ for(i = 0; i < N_REGISTRATIONS; i++)
+ H5VLunregister_connector(vol_ids[i]);
+ } H5E_END_TRY;
+ return FAIL;
+
+} /* end test_multiple_registration() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_getters()
+ *
+ * Purpose: Tests H5VL getters
+ *
+ * Return: SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_getters(void)
+{
+ htri_t is_registered = FAIL;
+ hid_t vol_id = H5I_INVALID_HID;
+ hid_t vol_id_out = H5I_INVALID_HID;
+
+ TESTING("VOL getters");
+
+ /* The null VOL connector should not be registered at the start of the test */
+ if((is_registered = H5VLis_connector_registered(NULL_VOL_CONNECTOR_NAME)) < 0)
+ TEST_ERROR;
+ if(TRUE == is_registered)
+ FAIL_PUTS_ERROR("NULL VOL connector is inappropriately registered");
+
+ /* Register the connector by name */
+ if((vol_id = H5VLregister_connector_by_name(NULL_VOL_CONNECTOR_NAME, H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+
+ /* Get the connector's ID */
+ if((vol_id_out = H5VLget_connector_id(NULL_VOL_CONNECTOR_NAME)) < 0)
+ TEST_ERROR;
+ if(vol_id != vol_id_out)
+ FAIL_PUTS_ERROR("VOL connector IDs don't match");
+
+ /* Unregister the connector */
+ if(H5VLunregister_connector(vol_id) < 0)
+ TEST_ERROR;
+
+ PASSED();
+ return SUCCEED;
+
+error:
+ H5E_BEGIN_TRY {
+ H5VLunregister_connector(vol_id);
+ } H5E_END_TRY;
+ return FAIL;
+
+} /* end test_getters() */
/*-------------------------------------------------------------------------
@@ -116,7 +272,10 @@ main(void)
HDputs("Testing VOL connector plugin functionality.");
- nerrors += test_registration() < 0 ? 1 : 0;
+ nerrors += test_registration_by_name() < 0 ? 1 : 0;
+ nerrors += test_registration_by_value() < 0 ? 1 : 0;
+ nerrors += test_multiple_registration() < 0 ? 1 : 0;
+ nerrors += test_getters() < 0 ? 1 : 0;
if(nerrors) {
HDprintf("***** %d VOL connector plugin TEST%s FAILED! *****\n",