diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 656817b17..0db9fa8af 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -294,6 +294,7 @@ if( HAVE_BUILD_TOOLS ) grib_local grib_step grib_set + grib_set_fail grib_iterator grib_proj_string grib_compare diff --git a/tests/grib_set.sh b/tests/grib_set.sh index d625cc66f..8635c77d8 100755 --- a/tests/grib_set.sh +++ b/tests/grib_set.sh @@ -10,11 +10,12 @@ . ./include.ctest.sh +label="grib_set_test" REDIRECT=/dev/null infile=${data_dir}/regular_gaussian_surface.grib1 -outfile=${data_dir}/temp.grib_set.grib -temp=temp.grib_set.out +outfile=${data_dir}/temp.$label.grib +temp=${data_dir}/temp.$label.out rm -f $outfile @@ -49,73 +50,6 @@ centre=`${tools_dir}/grib_get -p centre $outfile` centre=`${tools_dir}/grib_get -p centre:l $outfile` [ $centre -eq 80 ] -# Set without -s. Expected to fail -# ---------------------------------------------------- -set +e -${tools_dir}/grib_set -p levtype $infile $outfile > $temp 2>&1 -status=$? -set -e -[ $status -ne 0 ] -grep -q "provide some keys to set" $temp - -# Set with empty -s. Expected to fail -# ---------------------------------------------------- -set +e -${tools_dir}/grib_set -s '' $infile $outfile > $temp 2>&1 -status=$? -set -e -[ $status -ne 0 ] -grep -q "provide some keys to set" $temp - -# Out-of-bounds value. Expected to fail -# ---------------------------------------------------- -input=${data_dir}/reduced_gaussian_sub_area.grib2 -set +e -${tools_dir}/grib_set -s perturbationNumber=1000 $input $outfile 2>$temp -status=$? -set -e -[ $status -ne 0 ] -grep -q "Trying to encode value of 1000 but the maximum allowable value is 255 (number of bits=8)" $temp - -# Negative value for an unsigned key. Expected to fail -# ---------------------------------------------------- -input=${data_dir}/reduced_gaussian_sub_area.grib2 -set +e -${tools_dir}/grib_set -s perturbationNumber=-1 $input $outfile 2>$temp -status=$? -set -e -[ $status -ne 0 ] -grep -q "Trying to encode a negative value of -1 for key of type unsigned" $temp - -# Bad value for -d -# ---------------- -input=${data_dir}/reduced_gaussian_sub_area.grib2 -set +e -${tools_dir}/grib_set -d hello $input $outfile 2>$temp -status=$? -set -e -[ $status -ne 0 ] -grep -q "Invalid number" $temp - - -# ECC-1605: Out-of-bounds value for signed keys -# ---------------------------------------------------- -if [ $ECCODES_ON_WINDOWS -eq 0 ]; then - input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl - set +e - ${tools_dir}/grib_set -s forecastTime=2147483648 $input $outfile 2>$temp - status=$? - set -e - [ $status -ne 0 ] - grep -q "Trying to encode value of 2147483648 but the allowable range is -2147483647 to 2147483647" $temp - - set +e - ${tools_dir}/grib_set -s forecastTime=-2147483650 $input $outfile 2>$temp - status=$? - set -e - [ $status -ne 0 ] -fi - # GRIB-941: encoding of GRIB2 angles # ----------------------------------- angleInDegrees=130.9989 @@ -133,14 +67,6 @@ ${tools_dir}/grib_set -s centre=289 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $outfile ${tools_dir}/grib_dump -O $outfile > $temp grep -q 'centre = 289.*Zambia' $temp -# ECC-539: avoid output being the same as input -# ----------------------------------------------- -set +e -${tools_dir}/grib_set -s centre=0 $outfile $outfile -status=$? -set -e -[ $status -ne 0 ] - # offsetValuesBy # ------------------ input=${data_dir}/reduced_latlon_surface.grib2 @@ -151,48 +77,6 @@ max=`${tools_dir}/grib_get -F%.3f -p max $input` max=`${tools_dir}/grib_get -F%.3f -p max $outfile` [ "$max" = "13.097" ] -# ECC-1359: string that can be converted to an integer -# --------------------------------------------------- -${tools_dir}/grib_set -s month:s=6 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $outfile -grib_check_key_equals $outfile month 6 -# Now try an illegal value: a string that cannot be converted to an integer -set +e -${tools_dir}/grib_set -s month=BAD $ECCODES_SAMPLES_PATH/GRIB2.tmpl $outfile 2> $temp -status=$? -set -e -[ $status -ne 0 ] -grep -q "String cannot be converted to an integer" $temp - - -# ECC-1363: Does not fail for invalid value for key of type 'double' -# ------------------------------------------------------------------ -${tools_dir}/grib_set -s angleOfRotation:s=10.66 $ECCODES_SAMPLES_PATH/rotated_ll_sfc_grib2.tmpl $outfile -grib_check_key_equals $outfile angleOfRotation 10.66 -# Now try an illegal value: a string that cannot be converted to an integer -set +e -${tools_dir}/grib_set -s angleOfRotation=BAD $ECCODES_SAMPLES_PATH/rotated_ll_sfc_grib2.tmpl $outfile 2>$temp -status=$? -set -e -[ $status -ne 0 ] -grep -q "String cannot be converted to a double" $temp - - -# Set ascii key via double or long -# -------------------------------- -${tools_dir}/grib_set -s setLocalDefinition=1,localDefinitionNumber=21 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $outfile -${tools_dir}/grib_set -s marsDomain=x $outfile $temp -grib_check_key_equals $temp 'marsDomain' 'x' -set +e -${tools_dir}/grib_set -s marsDomain=9 $outfile $temp -status=$? -set -e -[ $status -ne 0 ] - -set +e -${tools_dir}/grib_set -s marsDomain=1.2 $outfile $temp -status=$? -set -e -[ $status -ne 0 ] # Strict option # --------------- @@ -215,35 +99,6 @@ grib_check_key_equals $input 'typeOfProcessedData:i' '2' ${tools_dir}/grib_set -s typeOfProcessedData=rubbish $input $outfile grib_check_key_equals $outfile 'typeOfProcessedData:i' '255' # set to default -# Codetable mismatch -# ------------------------ -input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl -set +e -${tools_dir}/grib_set -s stepUnits=d $input $outfile > $temp 2>&1 -status=$? -set -e -[ $status -ne 0 ] -grep -q "stepUnits: No such code table entry.*Did you mean" $temp - -set +e -${tools_dir}/grib_set -s centre=ECMF $input $outfile > $temp 2>&1 -status=$? -set -e -[ $status -ne 0 ] -grep -q "centre: No such code table entry.*Did you mean.*ecmf" $temp - - -# ------------------------ -# Unreadable message -# ------------------------ -echo GRIB > $outfile -set +e -${tools_dir}/grib_set -s edition=2 $outfile /dev/null > $temp 2>&1 -status=$? -set -e -[ $status -ne 0 ] -grep -q "unreadable message" $temp - # Clean up rm -f $outfile $temp diff --git a/tests/grib_set_fail.sh b/tests/grib_set_fail.sh new file mode 100755 index 000000000..b516e6c43 --- /dev/null +++ b/tests/grib_set_fail.sh @@ -0,0 +1,173 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="grib_set_fail_test" +REDIRECT=/dev/null + +outfile=${data_dir}/temp.$label.grib +temp=${data_dir}/temp.$label.out + +infile=${data_dir}/regular_gaussian_surface.grib2 + + +# Set without -s. Expected to fail +# ---------------------------------------------------- +set +e +${tools_dir}/grib_set -p levtype $infile $outfile > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "provide some keys to set" $temp + +# Set with empty -s. Expected to fail +# ---------------------------------------------------- +set +e +${tools_dir}/grib_set -s '' $infile $outfile > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "provide some keys to set" $temp + +# Out-of-bounds value. Expected to fail +# ---------------------------------------------------- +input=${data_dir}/reduced_gaussian_sub_area.grib2 +set +e +${tools_dir}/grib_set -s perturbationNumber=1000 $input $outfile 2>$temp +status=$? +set -e +[ $status -ne 0 ] +grep -q "Trying to encode value of 1000 but the maximum allowable value is 255 (number of bits=8)" $temp + +# Negative value for an unsigned key. Expected to fail +# ---------------------------------------------------- +input=${data_dir}/reduced_gaussian_sub_area.grib2 +set +e +${tools_dir}/grib_set -s perturbationNumber=-1 $input $outfile 2>$temp +status=$? +set -e +[ $status -ne 0 ] +grep -q "Trying to encode a negative value of -1 for key of type unsigned" $temp + +# Bad value for -d +# ---------------- +input=${data_dir}/reduced_gaussian_sub_area.grib2 +set +e +${tools_dir}/grib_set -d hello $input $outfile 2>$temp +status=$? +set -e +[ $status -ne 0 ] +grep -q "Invalid number" $temp + + +# ECC-1605: Out-of-bounds value for signed keys +# ---------------------------------------------------- +if [ $ECCODES_ON_WINDOWS -eq 0 ]; then + input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + set +e + ${tools_dir}/grib_set -s forecastTime=2147483648 $input $outfile 2>$temp + status=$? + set -e + [ $status -ne 0 ] + grep -q "Trying to encode value of 2147483648 but the allowable range is -2147483647 to 2147483647" $temp + + set +e + ${tools_dir}/grib_set -s forecastTime=-2147483650 $input $outfile 2>$temp + status=$? + set -e + [ $status -ne 0 ] +fi + + +# ECC-539: avoid output being the same as input +# ----------------------------------------------- +set +e +${tools_dir}/grib_set -s centre=0 $outfile $outfile +status=$? +set -e +[ $status -ne 0 ] + +# ECC-1359: string that can be converted to an integer +# --------------------------------------------------- +${tools_dir}/grib_set -s month:s=6 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $outfile +grib_check_key_equals $outfile month 6 +# Now try an illegal value: a string that cannot be converted to an integer +set +e +${tools_dir}/grib_set -s month=BAD $ECCODES_SAMPLES_PATH/GRIB2.tmpl $outfile 2> $temp +status=$? +set -e +[ $status -ne 0 ] +grep -q "String cannot be converted to an integer" $temp + + +# ECC-1363: Does not fail for invalid value for key of type 'double' +# ------------------------------------------------------------------ +${tools_dir}/grib_set -s angleOfRotation:s=10.66 $ECCODES_SAMPLES_PATH/rotated_ll_sfc_grib2.tmpl $outfile +grib_check_key_equals $outfile angleOfRotation 10.66 +# Now try an illegal value: a string that cannot be converted to an integer +set +e +${tools_dir}/grib_set -s angleOfRotation=BAD $ECCODES_SAMPLES_PATH/rotated_ll_sfc_grib2.tmpl $outfile 2>$temp +status=$? +set -e +[ $status -ne 0 ] +grep -q "String cannot be converted to a double" $temp + + +# Set ascii key via double or long +# -------------------------------- +${tools_dir}/grib_set -s setLocalDefinition=1,localDefinitionNumber=21 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $outfile +${tools_dir}/grib_set -s marsDomain=x $outfile $temp +grib_check_key_equals $temp 'marsDomain' 'x' +set +e +${tools_dir}/grib_set -s marsDomain=9 $outfile $temp +status=$? +set -e +[ $status -ne 0 ] + +set +e +${tools_dir}/grib_set -s marsDomain=1.2 $outfile $temp +status=$? +set -e +[ $status -ne 0 ] + + +# Codetable mismatch +# ------------------------ +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +set +e +${tools_dir}/grib_set -s stepUnits=d $input $outfile > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "stepUnits: No such code table entry.*Did you mean" $temp + +set +e +${tools_dir}/grib_set -s centre=ECMF $input $outfile > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "centre: No such code table entry.*Did you mean.*ecmf" $temp + + +# ------------------------ +# Unreadable message +# ------------------------ +echo GRIB > $outfile +set +e +${tools_dir}/grib_set -s edition=2 $outfile /dev/null > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "unreadable message" $temp + + +# Clean up +rm -f $outfile $temp