Added a test case to verify the VOL capacity flags work correctly. (#2178)

* Added a test case to verify the VOL capacity flags work correctly.

* Committing clang-format changes

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
raylu-hdf 2022-10-25 07:59:03 -05:00 committed by GitHub
parent 4e4c7cf66d
commit f98c93ab19
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -47,6 +47,7 @@ static herr_t reg_opt_op_optional(void *obj, H5VL_optional_args_t *args, hid_t d
static herr_t reg_opt_link_optional(void *obj, const H5VL_loc_params_t *loc_params,
H5VL_optional_args_t *args, hid_t dxpl_id, void **req);
static herr_t reg_opt_datatype_get(void *obj, H5VL_datatype_get_args_t *args, hid_t dxpl_id, void **req);
#define REG_OPT_VOL_NAME "reg_opt"
#define REG_OPT_VOL_VALUE ((H5VL_class_value_t)502)
static const H5VL_class_t reg_opt_vol_g = {
@ -171,20 +172,24 @@ static const H5VL_class_t reg_opt_vol_g = {
NULL /* optional */
};
static herr_t fake_get_cap_flags(const void *info, uint64_t *cap_flags);
#define FAKE_VOL_NAME "fake"
#define FAKE_VOL_VALUE ((H5VL_class_value_t)501)
#define H5VL_FAKE_CAP_FLAGS \
(H5VL_CAP_FLAG_DATASET_BASIC | H5VL_CAP_FLAG_GROUP_BASIC | H5VL_CAP_FLAG_FILE_BASIC)
/* A VOL class struct that describes a VOL class with no
* functionality.
*/
static const H5VL_class_t fake_vol_g = {
H5VL_VERSION, /* VOL class struct version */
FAKE_VOL_VALUE, /* value */
FAKE_VOL_NAME, /* name */
0, /* connector version */
H5VL_CAP_FLAG_NONE, /* capability flags */
NULL, /* initialize */
NULL, /* terminate */
H5VL_VERSION, /* VOL class struct version */
FAKE_VOL_VALUE, /* value */
FAKE_VOL_NAME, /* name */
0, /* connector version */
H5VL_FAKE_CAP_FLAGS, /* capability flags */
NULL, /* initialize */
NULL, /* terminate */
{
/* info_cls */
(size_t)0, /* size */
@ -270,9 +275,9 @@ static const H5VL_class_t fake_vol_g = {
},
{
/* introspect_cls */
NULL, /* get_conn_cls */
NULL, /* get_cap_flags */
NULL, /* opt_query */
NULL, /* get_conn_cls */
fake_get_cap_flags, /* get_cap_flags */
NULL, /* opt_query */
},
{
/* request_cls */
@ -552,6 +557,23 @@ reg_opt_datatype_get(void H5_ATTR_UNUSED *obj, H5VL_datatype_get_args_t *args, h
return ret_value;
} /* end reg_opt_datatype_get() */
/*-------------------------------------------------------------------------
* Function: fake_get_cap_flags
*
* Purpose: Return the capability flags for the 'fake' connector
*
* Return: SUCCEED/FAIL
*
*-------------------------------------------------------------------------
*/
static herr_t
fake_get_cap_flags(const void H5_ATTR_UNUSED *info, uint64_t *cap_flags)
{
*cap_flags = fake_vol_g.cap_flags;
return SUCCEED;
} /* end fake_get_cap_flags() */
/*-------------------------------------------------------------------------
* Function: fake_async_get_cap_flags
*
@ -2115,6 +2137,85 @@ error:
return FAIL;
} /* end test_async_vol_props() */
/*-------------------------------------------------------------------------
* Function: test_vol_cap_flags()
*
* Purpose: Tests the VOL cap flags
*
* Return: SUCCEED/FAIL
*
*-------------------------------------------------------------------------
*/
static herr_t
test_vol_cap_flags(void)
{
hid_t fapl_id = H5I_INVALID_HID;
hid_t vol_id = H5I_INVALID_HID;
uint64_t vol_cap_flags = H5VL_CAP_FLAG_NONE;
H5VL_pass_through_info_t passthru_info;
TESTING("VOL capacity flags");
/* Register a fake VOL */
if ((vol_id = H5VLregister_connector(&fake_vol_g, H5P_DEFAULT)) < 0)
TEST_ERROR;
if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0)
TEST_ERROR;
if (H5Pset_vol(fapl_id, vol_id, NULL) < 0)
TEST_ERROR;
/* Verify the correctness of the VOL capacity flags */
if (H5Pget_vol_cap_flags(fapl_id, &vol_cap_flags) < 0)
TEST_ERROR;
if (!(vol_cap_flags & H5VL_CAP_FLAG_FILE_BASIC))
TEST_ERROR;
if (vol_cap_flags & H5VL_CAP_FLAG_ATTR_BASIC)
TEST_ERROR;
/* Stack the [internal] passthrough VOL connector on top of the fake connector */
passthru_info.under_vol_id = vol_id;
passthru_info.under_vol_info = NULL;
if (H5Pset_vol(fapl_id, H5VL_PASSTHRU, &passthru_info) < 0)
FAIL_STACK_ERROR;
/* Verify the correctness of the VOL capacity flags */
vol_cap_flags = H5VL_CAP_FLAG_NONE;
if (H5Pget_vol_cap_flags(fapl_id, &vol_cap_flags) < 0)
TEST_ERROR;
if (!(vol_cap_flags & H5VL_CAP_FLAG_FILE_BASIC))
TEST_ERROR;
if (vol_cap_flags & H5VL_CAP_FLAG_ATTR_BASIC)
TEST_ERROR;
if (H5Pclose(fapl_id) < 0)
TEST_ERROR;
/* Unregister the fake VOL ID */
if (H5VLunregister_connector(vol_id) < 0)
TEST_ERROR;
PASSED();
return SUCCEED;
error:
H5E_BEGIN_TRY
{
H5VLunregister_connector(vol_id);
H5Pclose(fapl_id);
}
H5E_END_TRY;
return FAIL;
} /* end test_vol_cap_flags() */
/*-------------------------------------------------------------------------
* Function: main
*
@ -2150,6 +2251,7 @@ main(void)
nerrors += test_basic_link_operation() < 0 ? 1 : 0;
nerrors += test_basic_datatype_operation() < 0 ? 1 : 0;
nerrors += test_async_vol_props() < 0 ? 1 : 0;
nerrors += test_vol_cap_flags() < 0 ? 1 : 0;
if (nerrors) {
HDprintf("***** %d Virtual Object Layer TEST%s FAILED! *****\n", nerrors, nerrors > 1 ? "S" : "");