1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
#!/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
# ---------------------------------------------------------
# BUFR operator 203YYY: implement encoding
# ---------------------------------------------------------
label="bufr_operator_203_test"
tempBufr=temp.$label.bufr
tempFilt=temp.${label}.filter
tempText=temp.${label}.txt
sample_bufr4=$ECCODES_SAMPLES_PATH/BUFR4.tmpl
# Try it without overriding the reference values
# ---------------------------------------------
cat > $tempFilt <<EOF
set unexpandedDescriptors = { 307080 };
set heightOfStationGroundAboveMeanSeaLevel = -415;
set heightOfBarometerAboveMeanSeaLevel = -417;
set pack = 1;
write;
EOF
# Should fail
set +e
${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4 2>$tempText
status=$?
set -e
[ $status -ne 0 ]
grep -q "Value .* out of range" $tempText
# Now provide the 203YYY operator
# ---------------------------------
cat > $tempFilt <<EOF
set inputOverriddenReferenceValues = { -5000, -5000 };
set unexpandedDescriptors = { 203014, 7030, 7031, 203255, 307080 };
set heightOfStationGroundAboveMeanSeaLevel = -415;
set heightOfBarometerAboveMeanSeaLevel = -417;
set pack = 1;
write;
EOF
${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4
val=`${tools_dir}/bufr_get -s unpack=1 -p heightOfStationGroundAboveMeanSeaLevel $tempBufr`
[ "$val" = "-415" ]
val=`${tools_dir}/bufr_get -s unpack=1 -p heightOfBarometerAboveMeanSeaLevel $tempBufr`
[ "$val" = "-417" ]
# Add another instance but outside the 203YYY block. Should fail
# --------------------------------------------------------------
cat > $tempFilt <<EOF
set inputOverriddenReferenceValues = { -5000 };
set unexpandedDescriptors = { 203014, 7030, 203255, 307080, 203000, 7030 };
set #1#heightOfStationGroundAboveMeanSeaLevel = -415;
set #2#heightOfStationGroundAboveMeanSeaLevel = -416; # ref val not overridden
set pack = 1;
write;
EOF
set +e
${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4 2>$tempText
status=$?
set -e
[ $status -ne 0 ]
fgrep -q "Value (-416) out of range" $tempText
# Error conditions
# ------------------
cat > $tempFilt <<EOF
set inputOverriddenReferenceValues = { -5000, 5000 };
set unexpandedDescriptors = { 203014, 7030, 203255, 307080, 203000, 7030 };
set pack = 1;
EOF
set +e
${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4 > $tempText 2>&1
status=$?
set -e
[ $status -ne 0 ]
fgrep -q "number of overridden reference values (2) different from number of descriptors between operator 203YYY and 203255" $tempText
# No overridden ref vals provided
cat > $tempFilt <<EOF
set unexpandedDescriptors = { 203014, 7030, 203255, 307080, 203000, 7030 };
EOF
set +e
${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4 > $tempText 2>&1
status=$?
set -e
[ $status -ne 0 ]
fgrep -q "Overridden Reference Values array is empty" $tempText
# Ref val too large
cat > $tempFilt <<EOF
set inputOverriddenReferenceValues = { -50000000 }; # Value too large
set unexpandedDescriptors = { 203014, 7030, 203255, 307080, 203000, 7030 };
set pack = 1;
EOF
set +e
${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4 > $tempText 2>&1
status=$?
set -e
[ $status -ne 0 ]
fgrep -q "does not fit in 14 bits" $tempText
#
# ECC-2136: Support operator 203 for compressed data
# ---------------------------------------------------
cat > $tempFilt <<EOF
set compressedData = 1;
set inputOverriddenReferenceValues = { -5000, -5000 };
set unexpandedDescriptors = { 203014, 7030, 7031, 203255, 307080 };
set heightOfStationGroundAboveMeanSeaLevel = -415;
set heightOfBarometerAboveMeanSeaLevel = -417;
set pack = 1;
write;
EOF
${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4
val=`${tools_dir}/bufr_get -s unpack=1 -p heightOfStationGroundAboveMeanSeaLevel $tempBufr`
[ "$val" = "-415" ]
# Clean up
rm -f $tempBufr $tempFilt $tempText
|