mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-11-21 03:13:42 +08:00
329 lines
8.1 KiB
Bash
Executable File
329 lines
8.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
#set -x
|
|
quiet=0
|
|
leakcheck=0
|
|
timing=0
|
|
|
|
# Figure our dst server
|
|
SVC=`./nctestserver dts`
|
|
if test "x$SVC" = "x" ; then
|
|
echo "cannot locate test server"
|
|
exit
|
|
fi
|
|
DTS="$SVC/dts"
|
|
|
|
PARAMS="[log]"
|
|
#PARAMS="${PARAMS}[show=fetch]"
|
|
|
|
#OCLOGFILE=/dev/null
|
|
OCLOGFILE="" ; export OCLOGFILE
|
|
|
|
# Capture arguments
|
|
srcdir="$1"
|
|
builddir="$2"
|
|
mode="$3"
|
|
if test "x$4" = "x" ; then cache=1 ; else cache=0; fi
|
|
longtests="$5"
|
|
|
|
if test "x$timing" = "x1" ; then leakcheck=0; fi
|
|
|
|
# get the list of test files
|
|
WHICHTESTS="S1 C1 C2"
|
|
if test -n "$longtests"; then
|
|
WHICHTESTS="${WHICHTESTS} L1 LC1 LC2"
|
|
fi
|
|
|
|
#locate the testdata and expected directory
|
|
if test "$cache" = 0 ; then
|
|
# No cache means no cache, including prefetch
|
|
CACHE="[noprefetch]"
|
|
expected3="${srcdir}/nocacheremote3"
|
|
expected4="${srcdir}/nocacheremote4"
|
|
else
|
|
CACHE="[cache][prefetch]"
|
|
expected3="${srcdir}/expectremote3"
|
|
expected4="${srcdir}/expectremote4"
|
|
fi
|
|
|
|
PARAMS="${PARAMS}${CACHE}"
|
|
|
|
##################################################
|
|
# Remote test info
|
|
##################################################
|
|
|
|
# For special testing
|
|
REMOTEURLX="$DTS"
|
|
REMOTETESTSX="test.03"
|
|
|
|
REMOTEURLXC="$DTS"
|
|
REMOTETESTSXC="test.03;1;s0,s1"
|
|
|
|
# These shorter tests are always run
|
|
REMOTEURLS1="$DTS"
|
|
REMOTETESTSS1="\
|
|
test.01 test.02 test.04 test.05 test.06 test.07a test.07 \
|
|
test.21 \
|
|
test.50 test.53 test.55 test.56 test.57 \
|
|
test.66 test.67 test.68 test.69"
|
|
|
|
# Server is failing on some tests ; investigate why
|
|
S1FAIL="test.06a test.22 test.23 test.31"
|
|
|
|
# These longer tests are optional
|
|
REMOTEURLL1="$REMOTEURLS1"
|
|
REMOTETESTSL1="\
|
|
test.03 \
|
|
test.06 \
|
|
b31 b31a D1 Drifters EOSDB \
|
|
ingrid nestedDAS NestedSeq NestedSeq2 OverideExample \
|
|
SimpleDrdsExample test.an1 \
|
|
test.dfp1 test.gr1 \
|
|
test.gr2 test.gr3 test.gr4 test.gr5 \
|
|
test.sds1 test.sds2 test.sds3 \
|
|
test.sds4 test.sds5 \
|
|
test.vs1 test.vs2 test.vs3 test.vs4 test.vs5 \
|
|
whoi"
|
|
|
|
# Anything larger than about 100k will not be in the distribution
|
|
TOOBIGL1="parserBug0001 test.satimage Sat_Images test.32"
|
|
|
|
# Following contain %XX escapes which I cannot handle yet
|
|
ESCAPEDFAIL="test.dfr1 test.dfr2 test.dfr3 test.GridFile test.PointFile test.SwathFile test.sds6 test.sds7"
|
|
|
|
# Following tests are to check constraint handling
|
|
REMOTEURLC1="$DTS"
|
|
REMOTETESTSC1="\
|
|
test.01;1;f64 \
|
|
test.02;1;b[1:2:10] \
|
|
test.03;1;i32[0:1][1:2][0:2] \
|
|
test.04;1;types.i32 \
|
|
test.05;1;types.floats.f32 \
|
|
test.06;1;ThreeD \
|
|
test.07;1;person.age \
|
|
test.07;3;person \
|
|
test.07;4;types.f32"
|
|
|
|
# Following tests are to check selection handling
|
|
REMOTEURLC2="http://oceanwatch.pfeg.noaa.gov/opendap/GLOBEC"
|
|
REMOTETESTSC2="\
|
|
GLOBEC_cetaceans;1;number&number>6 \
|
|
GLOBEC_cetaceans;2;lat,lon&lat>42.0&lat<=42.5\
|
|
"
|
|
|
|
# C3 is too slow for testing. It has nested sequences.
|
|
#We need to think about better optimizations
|
|
REMOTEURLC3="http://dapper.pmel.noaa.gov/dapper/argo"
|
|
REMOTETESTSC3="\
|
|
argo_all.cdp;1;&location.LATITUDE<1&location.LATITUDE>-1\
|
|
"
|
|
|
|
# Test string access
|
|
# this test cannot be used because the
|
|
# dataset has a limited lifetime
|
|
#REMOTEURLC4="http://motherlode.ucar.edu:$PORT/thredds/dodsC/station/metar"
|
|
#REMOTETESTSC4="\
|
|
#Surface_METAR_20120101_0000.nc;1;weather[0:10]"
|
|
|
|
# Constrained long tests
|
|
REMOTEURLLC1="$DTS"
|
|
REMOTETESTSLC1="\
|
|
test.03;2;s1"
|
|
|
|
REMOTEURLLC2="http://ferret.pmel.noaa.gov/geoide/dodsC/PSDgriddedData/ncep.reanalysis.dailyavgs/surface"
|
|
REMOTETESTSLC2="slp_aggregated;1;slp.slp[23255:23316][29:29][88:88]"
|
|
|
|
# Unknown problem: test.07;2;&age>2
|
|
IGNORE="test.07.2"
|
|
|
|
# Known to fail
|
|
|
|
XFAILTESTS3=""
|
|
# For now, remove some tests from windows platform.
|
|
if [ `uname | cut -d "_" -f 1` = "MINGW32" ]; then
|
|
XFAILTESTS3="$XFAILTESTS3 test.67 test.06.1 test.06"
|
|
fi
|
|
|
|
|
|
XFAILTESTS4="$XFAILTESTS3"
|
|
|
|
# Server is down at the moment
|
|
SVCFAILTESTS3="GLOBEC_cetaceans.1 GLOBEC_cetaceans.2"
|
|
SVCFAILTESTS4="$SVCFAILTESTS3"
|
|
|
|
# Misc tests not currently used
|
|
REMOTEURL0="http://test.opendap.org/opendap/netcdf/examples"
|
|
REMOTETESTS0="\
|
|
cami_0000-09-01_64x128_L26_c030918.nc \
|
|
ECMWF_ERA-40_subset.nc \
|
|
sresa1b_ncar_ccsm3_0_run1_200001.nc \
|
|
tos_O1_2001-2002.nc
|
|
123bears.nc \
|
|
ber-2002-10-01.nc \
|
|
ceopL2AIRS2-2.nc \
|
|
ceopL2AIRS2.nc \
|
|
data.nc \
|
|
fnoc1.nc \
|
|
in1.nc \
|
|
in_2.nc \
|
|
in.nc \
|
|
in_no_three_double_dmn.nc \
|
|
in_v.nc \
|
|
saco1.nc \
|
|
testfile.nc \
|
|
text.nc \
|
|
"
|
|
|
|
case "$mode" in
|
|
3)
|
|
EXPECTED="$expected3"
|
|
TITLE="DAP to netCDF-3 translation"
|
|
PARAMS="${PARAMS}[netcdf3]"
|
|
XFAILTESTS="$XFAILTESTS3"
|
|
SVCFAILTESTS="$SVCFAILTESTS3"
|
|
;;
|
|
4)
|
|
EXPECTED="$expected4"
|
|
TITLE="DAP to netCDF-4 translation"
|
|
PARAMS="${PARAMS}[netcdf4]"
|
|
XFAILTESTS="$XFAILTESTS4"
|
|
SVCFAILTESTS="$SVCFAILTESTS4"
|
|
;;
|
|
esac
|
|
|
|
RESULTSDIR="./results"
|
|
# Locate some tools
|
|
NCDUMP="${builddir}/ncdump/ncdump"
|
|
if test "x$leakcheck" = x1 ; then
|
|
VALGRIND="valgrind -q --error-exitcode=2 --leak-check=full"
|
|
else
|
|
VALGRIND=
|
|
fi
|
|
if test "x$timing" = "x1" ; then TIMECMD="time"; else TIMECMD=""; fi
|
|
|
|
rm -fr ${RESULTSDIR}
|
|
mkdir "${RESULTSDIR}"
|
|
|
|
passcount=0
|
|
xfailcount=0
|
|
svcfailcount=0
|
|
failcount=0
|
|
|
|
echo "*** Testing $TITLE "
|
|
echo " Client Parameters: ${PARAMS}"
|
|
if test "$cache" = 0; then
|
|
echo " Caching: off"
|
|
else
|
|
echo " Caching: on"
|
|
fi
|
|
echo " Note: The remote tests may be slow or even fail if the server is overloaded"
|
|
|
|
status=0
|
|
|
|
for i in $WHICHTESTS ; do
|
|
constrained=0
|
|
case "$i" in
|
|
S1) TESTURL="$REMOTEURLS1" ; TESTSET="$REMOTETESTSS1" ;;
|
|
S2) TESTURL="$REMOTEURLS2" ; TESTSET="$REMOTETESTSS2" ;;
|
|
L1) TESTURL="$REMOTEURLL1" ; TESTSET="$REMOTETESTSL1" ;;
|
|
L2) TESTURL="$REMOTEURLL2" ; TESTSET="$REMOTETESTSL2" ;;
|
|
C1) TESTURL="$REMOTEURLC1" ; TESTSET="$REMOTETESTSC1" ; constrained=1 ;;
|
|
C2) TESTURL="$REMOTEURLC2" ; TESTSET="$REMOTETESTSC2" ; constrained=1 ;ncconstrained=0 ;;
|
|
C3) TESTURL="$REMOTEURLC3" ; TESTSET="$REMOTETESTSC3" ; constrained=1 ;ncconstrained=0 ;;
|
|
LC1) TESTURL="$REMOTEURLLC1" ; TESTSET="$REMOTETESTSLC1" ; constrained=1 ;;
|
|
LC2) TESTURL="$REMOTEURLLC2" ; TESTSET="$REMOTETESTSLC2" ; constrained=1 ;;
|
|
X) TESTURL="$REMOTEURLX" ; TESTSET="$REMOTETESTSX" ; constrained=0 ;;
|
|
XC) TESTURL="$REMOTEURLXC" ; TESTSET="$REMOTETESTSXC" ; constrained=1 ;;
|
|
*) echo "Unknown which test: $i" ;;
|
|
esac
|
|
|
|
cd ${RESULTSDIR}
|
|
rm -f ./.dodsrc
|
|
echo '#DODSRC' >./.dodsrc
|
|
|
|
for t in ${TESTSET} ; do
|
|
# see if we are using constraints
|
|
if test "x$constrained" = "x0" ; then # No constraint
|
|
testname=$t
|
|
ce=
|
|
else # Constrained
|
|
testname=`echo $t | cut -d ';' -f1`
|
|
testno=`echo $t | cut -d ';' -f2`
|
|
ce=`echo $t | cut -d ';' -f3-`
|
|
fi
|
|
if test "x$constrained" = "x0" ; then
|
|
name="${testname}"
|
|
url="${PARAMS}${TESTURL}/$testname"
|
|
else
|
|
name="${testname}.${testno}"
|
|
url="${PARAMS}${TESTURL}/$testname?${ce}"
|
|
fi
|
|
if test "x$quiet" = "x0" ; then echo "*** Testing: ${name}"; fi
|
|
if test "x$quiet" = "x0" ; then echo "*** URL: ${url}"; fi
|
|
|
|
# determine if this is an xfailtest
|
|
isxfail=0
|
|
for x in ${XFAILTESTS} ; do
|
|
if test "x${name}" = "x${x}" ; then isxfail=1; fi
|
|
done
|
|
|
|
# determine if this is a down server test
|
|
issvcfail=0
|
|
for x in ${SVCFAILTESTS} ; do
|
|
if test "x${name}" = "x${x}" ; then issvcfail=1; fi
|
|
done
|
|
|
|
status=0
|
|
|
|
if ${TIMECMD} ${VALGRIND} ${NCDUMP} "${url}" > ${name}.dmp ; then status=$status; else status=1; fi
|
|
# compare with expected
|
|
if diff -w ${EXPECTED}/${name}.dmp ${name}.dmp
|
|
then status=$status; else status=1; fi
|
|
if test "x$status" = "x1" ; then
|
|
if test "x$isxfail" = "x1" ; then status=2; fi # xfail
|
|
if test "x$issvcfail" = "x1" ; then status=3; fi # svcfail
|
|
fi
|
|
|
|
case "$status" in
|
|
0)
|
|
passcount=`expr $passcount + 1`
|
|
if test "x$quiet" = "x" ; then echo "*** SUCCEED: ${name}"; fi
|
|
;;
|
|
1)
|
|
failcount=`expr $failcount + 1`
|
|
echo "*** FAIL: ${name}"
|
|
;;
|
|
2)
|
|
xfailcount=`expr $xfailcount + 1`
|
|
echo "*** XFAIL : ${name}"
|
|
;;
|
|
3)
|
|
svcfailcount=`expr $svcfailcount + 1`
|
|
echo "*** SVCFAIL : ${name}"
|
|
;;
|
|
esac
|
|
|
|
done
|
|
|
|
rm -f ./.dodsrc
|
|
|
|
cd ..
|
|
|
|
done
|
|
|
|
totalcount=`expr $passcount + $failcount + $xfailcount + $svcfailcount`
|
|
okcount=`expr $passcount + $xfailcount + $svcfailcount`
|
|
|
|
echo "*** PASSED: ${okcount}/${totalcount} ; ${xfailcount} expected failures ; ${failcount} unexpected failures"
|
|
if test "$svcfailcount" -gt 0 ; then
|
|
echo " ${svcfailcount} failures from unavailable server"
|
|
fi
|
|
|
|
# Ignore failures for now
|
|
#failcount=0
|
|
if test "$failcount" -gt 0 ; then
|
|
exit 1
|
|
else
|
|
exit 0
|
|
fi
|