hdf5/test/vol_plugin.c
2020-01-28 18:18:38 -06:00

353 lines
11 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* All rights reserved. *
* *
* 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. *
* If you do not have access to either file, you may request a copy from *
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* 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"
#include "null_vol_connector.h"
/*-------------------------------------------------------------------------
* Function: test_registration_by_value()
*
* Purpose: Tests if we can load, register, and close a VOL
* connector by value.
*
* Return: SUCCEED/FAIL
*
*-------------------------------------------------------------------------
*/
static herr_t
test_registration_by_value(void)
{
htri_t is_registered = FAIL;
hid_t vol_id = H5I_INVALID_HID;
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_by_value(NULL_VOL_CONNECTOR_VALUE)) < 0)
TEST_ERROR;
if(TRUE == is_registered)
FAIL_PUTS_ERROR("NULL VOL connector is inappropriately registered");
/* 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 */
if((is_registered = H5VLis_connector_registered_by_value(NULL_VOL_CONNECTOR_VALUE)) < 0)
TEST_ERROR;
if(FALSE == is_registered)
FAIL_PUTS_ERROR("NULL VOL connector was not registered");
/* Unregister the connector */
if(H5VLunregister_connector(vol_id) < 0)
TEST_ERROR;
/* The connector should not be registered now */
if((is_registered = H5VLis_connector_registered_by_value(NULL_VOL_CONNECTOR_VALUE)) < 0)
TEST_ERROR;
if(TRUE == is_registered)
FAIL_PUTS_ERROR("NULL VOL connector is inappropriately registered");
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("VOL registration by name");
/* The null VOL connector should not be registered at the start of the test */
if((is_registered = H5VLis_connector_registered_by_name(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 */
if((is_registered = H5VLis_connector_registered_by_name(NULL_VOL_CONNECTOR_NAME)) < 0)
TEST_ERROR;
if(FALSE == is_registered)
FAIL_PUTS_ERROR("NULL VOL connector was not registered");
/* Unregister the connector */
if(H5VLunregister_connector(vol_id) < 0)
TEST_ERROR;
/* The connector should not be registered now */
if((is_registered = H5VLis_connector_registered_by_name(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 {
H5VLunregister_connector(vol_id);
} H5E_END_TRY;
return FAIL;
} /* 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("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_by_name(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_by_name(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_by_name(NULL_VOL_CONNECTOR_NAME)) < 0)
TEST_ERROR;
if(TRUE == is_registered)
FAIL_PUTS_ERROR("NULL VOL connector is inappropriately registered");
/* Repeat testing with the _by_value routines */
if((is_registered = H5VLis_connector_registered_by_value(NULL_VOL_CONNECTOR_VALUE)) < 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_value(NULL_VOL_CONNECTOR_VALUE, H5P_DEFAULT)) < 0)
TEST_ERROR;
}
/* The connector should be registered now */
if((is_registered = H5VLis_connector_registered_by_value(NULL_VOL_CONNECTOR_VALUE)) < 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_by_value(NULL_VOL_CONNECTOR_VALUE)) < 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_by_name(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 by name */
if((vol_id_out = H5VLget_connector_id_by_name(NULL_VOL_CONNECTOR_NAME)) < 0)
TEST_ERROR;
if(vol_id != vol_id_out)
FAIL_PUTS_ERROR("VOL connector IDs don't match");
if(H5VLclose(vol_id_out) < 0)
TEST_ERROR;
/* Unregister the connector */
if(H5VLunregister_connector(vol_id) < 0)
TEST_ERROR;
/* Repeat testing with the _by_value routines */
if((is_registered = H5VLis_connector_registered_by_value(NULL_VOL_CONNECTOR_VALUE)) < 0)
TEST_ERROR;
if(TRUE == is_registered)
FAIL_PUTS_ERROR("NULL VOL connector is inappropriately registered");
/* Register the connector by value */
if((vol_id = H5VLregister_connector_by_value(NULL_VOL_CONNECTOR_VALUE, H5P_DEFAULT)) < 0)
TEST_ERROR;
/* Get the connector's ID by value */
if((vol_id_out = H5VLget_connector_id_by_value(NULL_VOL_CONNECTOR_VALUE)) < 0)
TEST_ERROR;
if(vol_id != vol_id_out)
FAIL_PUTS_ERROR("VOL connector IDs don't match");
if(H5VLclose(vol_id_out) < 0)
TEST_ERROR;
/* Unregister the connector */
if(H5VLunregister_connector(vol_id) < 0)
TEST_ERROR;
PASSED();
return SUCCEED;
error:
H5E_BEGIN_TRY {
H5VLclose(vol_id_out);
H5VLunregister_connector(vol_id);
} H5E_END_TRY;
return FAIL;
} /* end test_getters() */
/*-------------------------------------------------------------------------
* Function: main
*
* Purpose: Tests VOL connector plugin operations
*
* Return: EXIT_SUCCESS/EXIT_FAILURE
*
*-------------------------------------------------------------------------
*/
int
main(void)
{
int nerrors = 0;
h5_reset();
HDputs("Testing VOL connector plugin functionality.");
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",
nerrors, nerrors > 1 ? "S" : "");
HDexit(EXIT_FAILURE);
}
HDputs("All VOL connector plugin tests passed.");
HDexit(EXIT_SUCCESS);
} /* end main() */