[svn-r23494] I added another filter library dynlib2.c for plugin.c test. The test script moves the libdynlib2.so to /tmp then runs

plugin.c.

Tested on jam and koala.
This commit is contained in:
Raymond Lu 2013-03-29 15:59:15 -05:00
parent 5e5e9e3987
commit ed621aae38
6 changed files with 142 additions and 71 deletions

View File

@ -79,13 +79,14 @@ if HAVE_SHARED_CONDITIONAL
# The libh5test library provides common support code for the tests.
noinst_LTLIBRARIES=libh5test.la
# The libdynlib1 library for testing plugin module plugin.c.
# The libdynlib1 and libdynlib2 library for testing plugin module plugin.c.
# Build it as shared library if configure is enabled for shared library.
lib_LTLIBRARIES=libdynlib1.la
lib_LTLIBRARIES=libdynlib1.la libdynlib2.la
libdynlib1_la_SOURCES=dynlib1.c
libdynlib2_la_SOURCES=dynlib2.c
install-data-local:
$(RM) $(DESTDIR)$(libdir)/*dynlib1*
$(RM) $(DESTDIR)$(libdir)/*dynlib*
else
# The libh5test library provides common support code for the tests.

View File

@ -133,6 +133,12 @@ am__v_lt_0 = --silent
am__v_lt_1 =
@HAVE_SHARED_CONDITIONAL_TRUE@am_libdynlib1_la_rpath = -rpath \
@HAVE_SHARED_CONDITIONAL_TRUE@ $(libdir)
libdynlib2_la_LIBADD =
am__libdynlib2_la_SOURCES_DIST = dynlib2.c
@HAVE_SHARED_CONDITIONAL_TRUE@am_libdynlib2_la_OBJECTS = dynlib2.lo
libdynlib2_la_OBJECTS = $(am_libdynlib2_la_OBJECTS)
@HAVE_SHARED_CONDITIONAL_TRUE@am_libdynlib2_la_rpath = -rpath \
@HAVE_SHARED_CONDITIONAL_TRUE@ $(libdir)
libh5test_la_LIBADD =
am_libh5test_la_OBJECTS = h5test.lo testframe.lo cache_common.lo
libh5test_la_OBJECTS = $(am_libh5test_la_OBJECTS)
@ -510,13 +516,13 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libdynlib1_la_SOURCES) $(libh5test_la_SOURCES) accum.c \
app_ref.c big.c bittests.c btree2.c cache.c cache_api.c \
cache_tagging.c cmpd_dset.c cross_read.c dangle.c dsets.c \
dt_arith.c dtransform.c dtypes.c earray.c efc.c \
enc_dec_plist.c enc_dec_plist_with_endianess.c enum.c \
err_compat.c error_test.c extend.c external.c farray.c fheap.c \
file_image.c fillval.c filter_fail.c flush1.c flush2.c \
SOURCES = $(libdynlib1_la_SOURCES) $(libdynlib2_la_SOURCES) \
$(libh5test_la_SOURCES) accum.c app_ref.c big.c bittests.c \
btree2.c cache.c cache_api.c cache_tagging.c cmpd_dset.c \
cross_read.c dangle.c dsets.c dt_arith.c dtransform.c dtypes.c \
earray.c efc.c enc_dec_plist.c enc_dec_plist_with_endianess.c \
enum.c err_compat.c error_test.c extend.c external.c farray.c \
fheap.c file_image.c fillval.c filter_fail.c flush1.c flush2.c \
freespace.c gen_bad_ohdr.c gen_bogus.c gen_cross.c \
gen_deflate.c gen_file_image.c gen_filespace.c gen_filters.c \
gen_new_array.c gen_new_fill.c gen_new_group.c gen_new_mtime.c \
@ -528,12 +534,13 @@ SOURCES = $(libdynlib1_la_SOURCES) $(libh5test_la_SOURCES) accum.c \
tcheck_version.c $(testhdf5_SOURCES) testmeta.c \
$(ttsafe_SOURCES) unlink.c vfd.c
DIST_SOURCES = $(am__libdynlib1_la_SOURCES_DIST) \
$(libh5test_la_SOURCES) accum.c app_ref.c big.c bittests.c \
btree2.c cache.c cache_api.c cache_tagging.c cmpd_dset.c \
cross_read.c dangle.c dsets.c dt_arith.c dtransform.c dtypes.c \
earray.c efc.c enc_dec_plist.c enc_dec_plist_with_endianess.c \
enum.c err_compat.c error_test.c extend.c external.c farray.c \
fheap.c file_image.c fillval.c filter_fail.c flush1.c flush2.c \
$(am__libdynlib2_la_SOURCES_DIST) $(libh5test_la_SOURCES) \
accum.c app_ref.c big.c bittests.c btree2.c cache.c \
cache_api.c cache_tagging.c cmpd_dset.c cross_read.c dangle.c \
dsets.c dt_arith.c dtransform.c dtypes.c earray.c efc.c \
enc_dec_plist.c enc_dec_plist_with_endianess.c enum.c \
err_compat.c error_test.c extend.c external.c farray.c fheap.c \
file_image.c fillval.c filter_fail.c flush1.c flush2.c \
freespace.c gen_bad_ohdr.c gen_bogus.c gen_cross.c \
gen_deflate.c gen_file_image.c gen_filespace.c gen_filters.c \
gen_new_array.c gen_new_fill.c gen_new_group.c gen_new_mtime.c \
@ -904,8 +911,9 @@ BUILD_ALL_PROGS = gen_bad_ohdr gen_bogus gen_cross gen_deflate gen_filters gen_n
@HAVE_SHARED_CONDITIONAL_FALSE@noinst_LTLIBRARIES = libh5test.la
@HAVE_SHARED_CONDITIONAL_TRUE@noinst_LTLIBRARIES = libh5test.la
@HAVE_SHARED_CONDITIONAL_TRUE@lib_LTLIBRARIES = libdynlib1.la
@HAVE_SHARED_CONDITIONAL_TRUE@lib_LTLIBRARIES = libdynlib1.la libdynlib2.la
@HAVE_SHARED_CONDITIONAL_TRUE@libdynlib1_la_SOURCES = dynlib1.c
@HAVE_SHARED_CONDITIONAL_TRUE@libdynlib2_la_SOURCES = dynlib2.c
libh5test_la_SOURCES = h5test.c testframe.c cache_common.c
# Use libhd5test.la to compile all of the tests
@ -1040,6 +1048,8 @@ clean-noinstLTLIBRARIES:
}
libdynlib1.la: $(libdynlib1_la_OBJECTS) $(libdynlib1_la_DEPENDENCIES) $(EXTRA_libdynlib1_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(am_libdynlib1_la_rpath) $(libdynlib1_la_OBJECTS) $(libdynlib1_la_LIBADD) $(LIBS)
libdynlib2.la: $(libdynlib2_la_OBJECTS) $(libdynlib2_la_DEPENDENCIES) $(EXTRA_libdynlib2_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(am_libdynlib2_la_rpath) $(libdynlib2_la_OBJECTS) $(libdynlib2_la_LIBADD) $(LIBS)
libh5test.la: $(libh5test_la_OBJECTS) $(libh5test_la_DEPENDENCIES) $(EXTRA_libh5test_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(am_libh5test_la_rpath) $(libh5test_la_OBJECTS) $(libh5test_la_LIBADD) $(LIBS)
@ -1309,6 +1319,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtransform.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtypes.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dynlib1.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dynlib2.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earray.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/efc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enc_dec_plist.Po@am__quote@
@ -1668,11 +1679,11 @@ help:
@HAVE_SHARED_CONDITIONAL_TRUE@ # The libh5test library provides common support code for the tests.
@HAVE_SHARED_CONDITIONAL_TRUE@ # The libdynlib1 library for testing plugin module plugin.c.
@HAVE_SHARED_CONDITIONAL_TRUE@ # The libdynlib1 and libdynlib2 library for testing plugin module plugin.c.
@HAVE_SHARED_CONDITIONAL_TRUE@ # Build it as shared library if configure is enabled for shared library.
@HAVE_SHARED_CONDITIONAL_TRUE@install-data-local:
@HAVE_SHARED_CONDITIONAL_TRUE@ $(RM) $(DESTDIR)$(libdir)/*dynlib1*
@HAVE_SHARED_CONDITIONAL_TRUE@ $(RM) $(DESTDIR)$(libdir)/*dynlib*
@HAVE_SHARED_CONDITIONAL_FALSE@ # The libh5test library provides common support code for the tests.

View File

@ -44,14 +44,17 @@ const H5Z_class2_t* H5PL_get_plugin_info(void) {return H5Z_DYNLIB1;}
/*-------------------------------------------------------------------------
* Function: H5Z_filter_dynlib1
*
* Purpose: A dynlib1 compression method that doesn't do anything.
* Purpose: A dynlib1 filter method that adds on and subtract from
* the original value with another value. It will be built
* as a shared library. plugin.c test will load and use
* this filter library.
*
* Return: Success: Data chunk size
*
* Failure: 0
*
* Programmer: Robb Matzke
* Tuesday, April 21, 1998
* 29 March 2013
*
*-------------------------------------------------------------------------
*/

93
test/dynlib2.c Normal file
View File

@ -0,0 +1,93 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
* 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 files COPYING and Copyright.html. COPYING can be found at the root *
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Raymond Lu
* 13 February 2013
*
* Purpose: Tests the plugin module (H5PL)
*/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <hdf5.h>
static size_t H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts,
const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf);
/* This message derives from H5Z */
const H5Z_class2_t H5Z_DYNLIB2[1] = {{
H5Z_CLASS_T_VERS, /* H5Z_class_t version */
H5Z_FILTER_DYNLIB2, /* Filter id number */
1, 1, /* Encoding and decoding enabled */
"dynlib2", /* Filter name for debugging */
NULL, /* The "can apply" callback */
NULL, /* The "set local" callback */
(H5Z_func_t)H5Z_filter_dynlib2, /* The actual filter function */
}};
const H5PL_type_t H5PL_get_plugin_type(void) {return H5PL_TYPE_FILTER;}
const H5Z_class2_t* H5PL_get_plugin_info(void) {return H5Z_DYNLIB2;}
/*-------------------------------------------------------------------------
* Function: H5Z_filter_dynlib2
*
* Purpose: A dynlib2 filter method that assigns the power of 2 of the
* original value during write and calculates the square root
* of the original value during read. It will be built as a
* shared library. plugin.c test will load and use this filter
* library.
*
* Return: Success: Data chunk size
*
* Failure: 0
*
* Programmer: Raymond Lu
* 29 March 2013
*
*-------------------------------------------------------------------------
*/
static size_t
H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts,
const unsigned int *cd_values, size_t nbytes,
size_t *buf_size, void **buf)
{
int *int_ptr=(int *)*buf; /* Pointer to the data values */
size_t buf_left=*buf_size; /* Amount of data buffer left to process */
/* Check for the correct number of parameters */
if(cd_nelmts>0)
return(0);
if(flags & H5Z_FLAG_REVERSE) { /*read*/
/* Calculate and assign the square root for all the data values */
while(buf_left>0) {
*int_ptr = (int)sqrt((double)*int_ptr);
*int_ptr++;
buf_left -= sizeof(int);
} /* end while */
} /* end if */
else { /*write*/
/* Calculate and assign the power of 2 to all the data values */
while(buf_left>0) {
*int_ptr = (int)pow((double)*int_ptr, 2);
*int_ptr++;
buf_left -= sizeof(int);
} /* end while */
} /* end else */
return nbytes;
}

View File

@ -62,6 +62,9 @@ const char *FILENAME[] = {
#define DSET_DIM1 100
#define DSET_DIM2 200
/* Limit random number within 20000 */
#define RANDOM_LIMIT 20000
int points_deflate[DSET_DIM1][DSET_DIM2],
points_dynlib1[DSET_DIM1][DSET_DIM2],
points_dynlib2[DSET_DIM1][DSET_DIM2],
@ -200,8 +203,7 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl)
for(i=0; i<size[0]; i++) {
for(j=0; j<size[1]/2; j++) {
/*points[i][j] = (int)7;*/
points[i][j] = (int)HDrandom ();
points[i][j] = (int)HDrandom () % RANDOM_LIMIT;
}
}
if(H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, points) < 0)
@ -263,7 +265,7 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl)
for(i=0; i<(size_t)hs_size[0]; i++) {
for(j=0; j<(size_t)hs_size[1]; j++) {
points[(size_t)hs_offset[0]+i][(size_t)hs_offset[1]+j] = (int)HDrandom();
points[(size_t)hs_offset[0]+i][(size_t)hs_offset[1]+j] = (int)HDrandom() % RANDOM_LIMIT;
}
}
if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, hs_offset, NULL, hs_size,
@ -348,7 +350,7 @@ test_filters(hid_t file, hid_t fapl)
unsigned int compress_level = 9;
/*----------------------------------------------------------
* STEP 2: Test deflation by itself.
* STEP 1: Test deflation by itself.
*----------------------------------------------------------
*/
#ifdef H5_HAVE_FILTER_DEFLATE
@ -385,15 +387,14 @@ test_filters(hid_t file, hid_t fapl)
* for this filter. */
if(H5Zunregister(H5Z_FILTER_DYNLIB1) < 0) goto error;
#ifdef TMP
/*----------------------------------------------------------
* STEP 2: Test Bogus2 by itself.
* STEP 3: Test DYNLIB2 by itself.
*----------------------------------------------------------
*/
puts("Testing DYNLIB2 filter");
if((dc = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
if(H5Pset_chunk (dc, 2, chunk_size) < 0) goto error;
if(H5Pset_filter (dc, H5Z_FILTER_DYNLIB2, H5Z_FLAG_MANDATORY, 1, &compress_level) < 0) goto error;
if(H5Pset_filter (dc, H5Z_FILTER_DYNLIB2, H5Z_FLAG_MANDATORY, 0, NULL) < 0) goto error;
if(test_filter_internal(file,DSET_DYNLIB2_NAME,dc) < 0) goto error;
@ -405,27 +406,6 @@ test_filters(hid_t file, hid_t fapl)
* for this filter. */
if(H5Zunregister(H5Z_FILTER_DYNLIB2) < 0) goto error;
/*----------------------------------------------------------
* STEP 3: Test BZIP2 by itself.
*----------------------------------------------------------
*/
puts("Testing BZIP2 filter");
if((dc = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
if(H5Pset_chunk (dc, 2, chunk_size) < 0) goto error;
if(H5Pset_filter (dc, H5Z_FILTER_BZIP2, H5Z_FLAG_MANDATORY, 1, &compress_level) < 0) goto error;
if(test_filter_internal(file,DSET_BZIP2_NAME,dc) < 0) goto error;
/* Clean up objects used for this test */
if(H5Pclose (dc) < 0) goto error;
/* Unregister the dynamic filter BOGUS for testing purpose. The next time when this test is run for
* the new file format, the library's H5PL code has to search in the table of loaded plugin libraries
* for this filter. */
if(H5Zunregister(H5Z_FILTER_BZIP2) < 0) goto error;
#endif
return 0;
error:
@ -498,7 +478,7 @@ test_read_with_filters(hid_t file, hid_t fapl)
hid_t dset; /* Dataset ID */
/*----------------------------------------------------------
* STEP 2: Test deflation by itself.
* STEP 1: Test deflation by itself.
*----------------------------------------------------------
*/
#ifdef H5_HAVE_FILTER_DEFLATE
@ -531,9 +511,8 @@ test_read_with_filters(hid_t file, hid_t fapl)
if(H5Dclose(dset) < 0) TEST_ERROR
#ifdef TMP
/*----------------------------------------------------------
* STEP 2: Test Bogus2 by itself.
* STEP 3: Test Bogus2 by itself.
*----------------------------------------------------------
*/
TESTING("Testing DYNLIB2 filter");
@ -544,20 +523,6 @@ test_read_with_filters(hid_t file, hid_t fapl)
if(H5Dclose(dset) < 0) TEST_ERROR
/*----------------------------------------------------------
* STEP 3: Test BZIP2 by itself.
*----------------------------------------------------------
*/
TESTING("Testing BZIP2 filter");
if((dset = H5Dopen2(file,DSET_BZIP2_NAME,H5P_DEFAULT)) < 0) TEST_ERROR
if(test_read_data(dset, points_bzip2) < 0) TEST_ERROR
if(H5Dclose(dset) < 0) TEST_ERROR
#endif
return 0;
error:

View File

@ -21,9 +21,6 @@
srcdir=@srcdir@
TOP_BUILDDIR=@top_builddir@
echo $srcdir
echo $TOP_BUILDDIR
# Determine backward compatibility options enabled
DEPRECATED_SYMBOLS="@DEPRECATED_SYMBOLS@"
@ -32,7 +29,8 @@ verbose=yes
TEST_NAME=plugin
TEST_BIN=`pwd`/$TEST_NAME
ENVCMD="env HDF5_PLUGIN_PATH=`pwd`/.libs"
CP="cp .libs/libdynlib2.so.* /tmp"
ENVCMD="env HDF5_PLUGIN_PATH=/tmp:`pwd`/.libs"
# Print a line-line message left justified in a field of 70 characters
# beginning with the word "Testing".
@ -44,7 +42,7 @@ TESTING() {
# Main Body
# Run the test
$ENVCMD $TEST_BIN
$CP; $ENVCMD $TEST_BIN
if [ $? != 0 ]; then
nerrors=`expr $nerrors + 1`
fi