mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-09 07:32:32 +08:00
89fbe00dec
* commit '54957d37f5aa73912763dbb6e308555e863c43f4': Commit copyright header change for src/H5PLpkg.c which was added after running script to make changes. Add new files in release_docs to MANIFEST. Cimmit changes to Makefile.in(s) and H5PL.c that resulted from running autogen.sh. Merge pull request #407 in HDFFV/hdf5 from ~LRKNOX/hdf5_lrk:hdf5_1_10_1 to hdf5_1_10_1 Change copyright headers to replace url referring to file to be removed and replace it with new url for COPYING file.
227 lines
7.4 KiB
Bash
227 lines
7.4 KiB
Bash
#! /bin/bash
|
|
#
|
|
# 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 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.
|
|
#
|
|
# Tests for the swmr feature using virtual datasets.
|
|
#
|
|
# Created:
|
|
# Dana Robinson, November 2015
|
|
|
|
srcdir=@srcdir@
|
|
|
|
###############################################################################
|
|
## test parameters
|
|
###############################################################################
|
|
|
|
Nwriters=6 # number of writers (1 per source dataset)
|
|
Nreaders=5 # number of readers to launch
|
|
nerrors=0
|
|
|
|
###############################################################################
|
|
## definitions for message file to coordinate test runs
|
|
###############################################################################
|
|
WRITER_MESSAGE=SWMR_WRITER_MESSAGE # The message file created by writer that the open is complete
|
|
# This should be the same as the define in "./swmr_common.h"
|
|
MESSAGE_TIMEOUT=300 # Message timeout length in secs
|
|
# This should be the same as the define in "./h5test.h"
|
|
|
|
###############################################################################
|
|
## short hands and function definitions
|
|
###############################################################################
|
|
DPRINT=: # Set to "echo Debug:" for debugging printing,
|
|
# else ":" for noop.
|
|
IFDEBUG=: # Set to null to turn on debugging, else ":" for noop.
|
|
|
|
# Print a line-line message left justified in a field of 70 characters
|
|
# beginning with the word "Testing".
|
|
#
|
|
TESTING() {
|
|
SPACES=" "
|
|
echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
|
|
}
|
|
|
|
# To wait for the writer message file or till the maximum # of seconds is reached
|
|
# $1 is the message file to wait for
|
|
# This performs similar function as the routine h5_wait_message() in test/h5test.c
|
|
WAIT_MESSAGE() {
|
|
message=$1 # Get the name of the message file to wait for
|
|
t0=`date +%s` # Get current time in seconds
|
|
difft=0 # Initialize the time difference
|
|
mexist=0 # Indicate whether the message file is found
|
|
while [ $difft -lt $MESSAGE_TIMEOUT ] ; # Loop till message times out
|
|
do
|
|
t1=`date +%s` # Get current time in seconds
|
|
difft=`expr $t1 - $t0` # Calculate the time difference
|
|
if [ -e $message ]; then # If message file is found:
|
|
mexist=1 # indicate the message file is found
|
|
rm $message # remove the message file
|
|
break # get out of the while loop
|
|
fi
|
|
done;
|
|
if test $mexist -eq 0; then
|
|
# Issue warning that the writer message file is not found, continue with launching the reader(s)
|
|
echo warning: $WRITER_MESSAGE is not found after waiting $MESSAGE_TIMEOUT seconds
|
|
else
|
|
echo $WRITER_MESSAGE is found
|
|
fi
|
|
}
|
|
|
|
###############################################################################
|
|
## Main
|
|
###############################################################################
|
|
# The build (current) directory might be different than the source directory.
|
|
if test -z "$srcdir"; then
|
|
srcdir=.
|
|
fi
|
|
|
|
# Check to see if the VFD specified by the HDF5_DRIVER environment variable
|
|
# supports SWMR.
|
|
./swmr_check_compat_vfd
|
|
rc=$?
|
|
if [ $rc -ne 0 ] ; then
|
|
echo
|
|
echo "The VFD specified by the HDF5_DRIVER environment variable"
|
|
echo "does not support SWMR."
|
|
echo
|
|
echo "SWMR acceptance tests skipped"
|
|
echo
|
|
exit 0
|
|
fi
|
|
|
|
# Parse options (none accepted at this time)
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
*) # unknown option
|
|
echo "$0: Unknown option ($1)"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# HDF5 has several tests that create and delete signal files to communicate
|
|
# between processes, and it seems that even though the names of the files are
|
|
# different, occasionally the wrong file is deleted, interrupting the flow of
|
|
# the test. Running each of these tests in its own directory should eliminate
|
|
# the problem.
|
|
mkdir vds_swmr_test
|
|
for FILE in vds_swmr*; do
|
|
case "$FILE" in
|
|
*.o) continue ;; ## don't copy the .o files
|
|
esac
|
|
cp $FILE vds_swmr_test
|
|
done
|
|
|
|
# With the --disable-shared option, swmr program files are built in the test
|
|
# directory, otherwise they are in test/.libs with a corresponding wrapper
|
|
# script in the test directory. The programs or wrapper scripts in test should
|
|
# always be copied, swmr files in .libs should be copied only if they exists.
|
|
if [ -f .libs/vds_swmr_writer ]; then
|
|
mkdir vds_swmr_test/.libs
|
|
cp .libs/vds_swmr* vds_swmr_test/.libs
|
|
fi
|
|
|
|
cd vds_swmr_test
|
|
|
|
|
|
echo
|
|
echo "###############################################################################"
|
|
echo "## Basic VDS SWMR test - writing to a tiled plane"
|
|
echo "###############################################################################"
|
|
|
|
# Launch the file generator
|
|
echo launch the generator
|
|
./vds_swmr_gen
|
|
if test $? -ne 0; then
|
|
echo generator had error
|
|
nerrors=`expr $nerrors + 1`
|
|
fi
|
|
|
|
# Check for error and exit if one occured
|
|
$DPRINT nerrors=$nerrors
|
|
if test $nerrors -ne 0 ; then
|
|
echo "VDS SWMR tests failed with $nerrors errors."
|
|
exit 1
|
|
fi
|
|
|
|
# Launch the writers
|
|
echo "launch the $Nwriters SWMR VDS writers (1 per source)"
|
|
pid_writers=""
|
|
n=0
|
|
while [ $n -lt $Nwriters ]; do
|
|
./vds_swmr_writer $n &
|
|
pid_writers="$pid_writers $!"
|
|
n=`expr $n + 1`
|
|
done
|
|
$DPRINT pid_writers=$pid_writers
|
|
$IFDEBUG ps
|
|
|
|
# Sleep to ensure that the writers have started
|
|
sleep 3
|
|
|
|
# Launch the readers
|
|
echo launch $Nreaders SWMR readers
|
|
pid_readers=""
|
|
n=0
|
|
while [ $n -lt $Nreaders ]; do
|
|
./vds_swmr_reader &
|
|
pid_readers="$pid_readers $!"
|
|
n=`expr $n + 1`
|
|
done
|
|
$DPRINT pid_readers=$pid_readers
|
|
$IFDEBUG ps
|
|
|
|
# Collect exit code of the writers
|
|
for xpid in $pid_writers; do
|
|
$DPRINT checked writer $xpid
|
|
wait $xpid
|
|
if test $? -ne 0; then
|
|
echo writer had error
|
|
nerrors=`expr $nerrors + 1`
|
|
fi
|
|
done
|
|
|
|
# Collect exit code of the readers
|
|
# (they usually finish after the writers)
|
|
for xpid in $pid_readers; do
|
|
$DPRINT checked reader $xpid
|
|
wait $xpid
|
|
if test $? -ne 0; then
|
|
echo reader had error
|
|
nerrors=`expr $nerrors + 1`
|
|
fi
|
|
done
|
|
|
|
# Check for error and exit if one occured
|
|
$DPRINT nerrors=$nerrors
|
|
if test $nerrors -ne 0 ; then
|
|
echo "VDS SWMR tests failed with $nerrors errors."
|
|
exit 1
|
|
fi
|
|
|
|
###############################################################################
|
|
## Report and exit
|
|
###############################################################################
|
|
cd ..
|
|
$DPRINT nerrors=$nerrors
|
|
if test $nerrors -eq 0 ; then
|
|
echo "VDS SWMR tests passed."
|
|
if test -z "$HDF5_NOCLEANUP"; then
|
|
# delete the test directory
|
|
rm -rf vds_swmr_test
|
|
fi
|
|
exit 0
|
|
else
|
|
echo "VDS SWMR tests failed with $nerrors errors."
|
|
exit 1
|
|
fi
|
|
|