summaryrefslogtreecommitdiffstats
path: root/src/H5FDtest.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5FDtest.c')
-rw-r--r--src/H5FDtest.c72
1 files changed, 70 insertions, 2 deletions
diff --git a/src/H5FDtest.c b/src/H5FDtest.c
index 080223c..18b53a0 100644
--- a/src/H5FDtest.c
+++ b/src/H5FDtest.c
@@ -25,8 +25,8 @@
/* Module Setup */
/****************/
-#include "H5FDmodule.h" /* This source code file is part of the H5FD module */
-#define H5FD_TESTING /* Suppress warning about H5FD testing funcs */
+#include "H5FDmodule.h" /* This source code file is part of the H5FD module */
+#define H5FD_TESTING /* Suppress warning about H5FD testing funcs */
/***********/
@@ -34,6 +34,8 @@
/***********/
#include "H5private.h" /* Generic Functions */
#include "H5FDpkg.h" /* File Drivers */
+#include "H5FLprivate.h" /* Free Lists */
+#include "H5Eprivate.h" /* Error handling */
/****************/
/* Local Macros */
@@ -63,6 +65,8 @@
/*****************************/
/* Library Private Variables */
/*****************************/
+/* Declare external the free list for H5FD_vfd_swmr_idx_entry_t */
+H5FL_SEQ_EXTERN(H5FD_vfd_swmr_idx_entry_t);
/*******************/
@@ -114,3 +118,67 @@ H5FD__supports_swmr_test(const char *vfd_name)
} /* end H5FD__supports_swmr_test() */
+/*
+ * Tests for VFD SWMR
+ */
+/*-------------------------------------------------------------------------
+ * Function: H5FD__vfd_swmr_md_test
+ *
+ * Purpose: Verify the info obtained from the driver's local copy is as
+ * indicated by the parameter: num_entries and index
+ *
+ * Return: SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD__vfd_swmr_reader_md_test(H5FD_t *file, unsigned num_entries, H5FD_vfd_swmr_idx_entry_t index[])
+{
+ unsigned vfd_num_entries = 0;
+ H5FD_vfd_swmr_idx_entry_t *vfd_index = NULL;
+ unsigned i;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Retrieve index from VFD SWMR driver */
+ /* Initial call to get # of entries */
+ if(H5FD_vfd_swmr_get_tick_and_idx(file, TRUE, NULL, &vfd_num_entries, vfd_index) < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "Error in retrieving index from driver")
+
+ /* Verify number of index entries */
+ if(vfd_num_entries != num_entries)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "Error in retrieving index from driver")
+
+ if(vfd_num_entries) {
+ /* Allocate memory for index entries */
+ if(NULL == (vfd_index = H5FL_SEQ_MALLOC(H5FD_vfd_swmr_idx_entry_t, vfd_num_entries)))
+ HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, FAIL, "memory allocation failed for index entries")
+
+ /* Second call to retrieve the index */
+ if(H5FD_vfd_swmr_get_tick_and_idx(file, FALSE, NULL, &vfd_num_entries, vfd_index) < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "Error in retrieving index from driver")
+
+ /* Verify index entries */
+ for(i = 0; i < vfd_num_entries; i++) {
+ if(vfd_index[i].length != index[i].length)
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "incorrect length read from metadata file")
+
+ if(vfd_index[i].hdf5_page_offset != index[i].hdf5_page_offset)
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "incorrect hdf5_page_offset read from metadata file")
+
+ if(vfd_index[i].md_file_page_offset != index[i].md_file_page_offset)
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "incorrect md_file_page_offset read from metadata file")
+
+ if(vfd_index[i].chksum != index[i].chksum)
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "incorrect chksum read from metadata file")
+ }
+ }
+
+done:
+ /* Free local copy of index entries */
+ if(vfd_num_entries && vfd_index)
+ vfd_index = (H5FD_vfd_swmr_idx_entry_t *)H5FL_SEQ_FREE(H5FD_vfd_swmr_idx_entry_t, vfd_index);
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5FD__vfd_swmr_reader_md_test() */