From 6241682c47716a167fc8354c7886effc4beea9cb Mon Sep 17 00:00:00 2001 From: shahramn Date: Wed, 13 Mar 2024 17:21:00 +0000 Subject: [PATCH 1/2] ECC-1785: BUFR: Allow encoding satelliteID when rdbType=30 --- definitions/bufr/section.3.def | 2 +- tests/CMakeLists.txt | 1 + tests/bufr_ecc-1785.sh | 35 ++++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100755 tests/bufr_ecc-1785.sh diff --git a/definitions/bufr/section.3.def b/definitions/bufr/section.3.def index 1d9d8c7f9..d223bbbb2 100644 --- a/definitions/bufr/section.3.def +++ b/definitions/bufr/section.3.def @@ -51,7 +51,7 @@ unsigned[2] numberOfSubsets : dump; alias ls.numberOfSubsets=numberOfSubsets; if (section2Present && bufrHeaderCentre==98 && section2Length==52) { - if ( rdbType == 2 || rdbType == 3 || rdbType == 8 || rdbType == 12 ) { + if ( rdbType == 2 || rdbType == 3 || rdbType == 8 || rdbType == 12 || rdbType == 30 ) { transient isSatelliteType=1; } else { transient isSatelliteType=0; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 31a644601..e1f11445c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -249,6 +249,7 @@ if( HAVE_BUILD_TOOLS ) bufr_ecc-1305 bufr_ecc-1476 bufr_ecc-1623 + bufr_ecc-1785 grib_ecc-490 grib_ecc-756 grib_ecc-806 diff --git a/tests/bufr_ecc-1785.sh b/tests/bufr_ecc-1785.sh new file mode 100755 index 000000000..a09751e8b --- /dev/null +++ b/tests/bufr_ecc-1785.sh @@ -0,0 +1,35 @@ +#!/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 + +# --------------------------------------------------------- +# This is the test for the JIRA issue ECC-1785 +# BUFR: Allow encoding satelliteID when rdbType=30 +# --------------------------------------------------------- + +label="bufr_ecc-1785_test" + +tempBufr=temp.$label.bufr +tempFilt=temp.$label.filt +tempLog=temp.$label.log +tempRef=temp.$label.ref + +sample_bufr4=$ECCODES_SAMPLES_PATH/BUFR3_local_satellite.tmpl + +echo 'set numberOfSubsets=1; set rdbType=30; set satelliteID=78; write;' > $tempFilt + +${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4 + +result=$(${tools_dir}/bufr_get -p isSatelliteType,isSatellite,satelliteID $tempBufr) +[ "$result" = "1 1 78" ] + +# Clean up +rm -f $tempBufr $tempFilt $tempLog $tempRef From 53e32320a84c5ad67618a0c9801d8da4a06b9fd1 Mon Sep 17 00:00:00 2001 From: shahramn Date: Thu, 14 Mar 2024 11:10:38 +0000 Subject: [PATCH 2/2] ECC-1785: More testing --- src/bufr_util.cc | 2 +- src/grib_index.cc | 2 +- tests/bufr_ecc-1785.sh | 3 +-- tests/bufr_extract_headers.sh | 11 +++++++++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/bufr_util.cc b/src/bufr_util.cc index 0b4ffb0e7..95ff8eeb2 100644 --- a/src/bufr_util.cc +++ b/src/bufr_util.cc @@ -220,7 +220,7 @@ static int bufr_decode_extra_rdb_keys(const void* message, long offset_section2, DEBUG_ASSERT(hdr->ecmwfLocalSectionPresent); - if (hdr->rdbType == 2 || hdr->rdbType == 3 || hdr->rdbType == 8 || hdr->rdbType == 12) { + if (hdr->rdbType == 2 || hdr->rdbType == 3 || hdr->rdbType == 8 || hdr->rdbType == 12 || hdr->rdbType == 30) { isSatelliteType = true; } if (isSatelliteType || hdr->numberOfSubsets > 1) { diff --git a/src/grib_index.cc b/src/grib_index.cc index 1be83df79..b6eb0b3a2 100644 --- a/src/grib_index.cc +++ b/src/grib_index.cc @@ -1254,7 +1254,7 @@ static int codes_index_add_file_internal(grib_index* index, const char* filename if (warn_about_duplicates) { const bool offset_is_unique = map_of_offsets.insert( std::pair(h->offset, h) ).second; if (!offset_is_unique) { - fprintf(stderr, "ECCODES WARNING : File '%s': field offset %lld is not unique.\n", filename, h->offset); + fprintf(stderr, "ECCODES WARNING : File '%s': field offset %ld is not unique.\n", filename, (long)h->offset); long edition = 0; if (grib_get_long(h, "edition", &edition) == GRIB_SUCCESS && edition == 2) { fprintf(stderr, "ECCODES WARNING : This can happen if the file contains multi-field GRIB messages.\n"); diff --git a/tests/bufr_ecc-1785.sh b/tests/bufr_ecc-1785.sh index a09751e8b..1a4ae4a2c 100755 --- a/tests/bufr_ecc-1785.sh +++ b/tests/bufr_ecc-1785.sh @@ -20,7 +20,6 @@ label="bufr_ecc-1785_test" tempBufr=temp.$label.bufr tempFilt=temp.$label.filt tempLog=temp.$label.log -tempRef=temp.$label.ref sample_bufr4=$ECCODES_SAMPLES_PATH/BUFR3_local_satellite.tmpl @@ -32,4 +31,4 @@ result=$(${tools_dir}/bufr_get -p isSatelliteType,isSatellite,satelliteID $tempB [ "$result" = "1 1 78" ] # Clean up -rm -f $tempBufr $tempFilt $tempLog $tempRef +rm -f $tempBufr $tempFilt $tempLog diff --git a/tests/bufr_extract_headers.sh b/tests/bufr_extract_headers.sh index 0d518d732..481a5cd2f 100755 --- a/tests/bufr_extract_headers.sh +++ b/tests/bufr_extract_headers.sh @@ -14,6 +14,8 @@ label="bufr_extract_headers_test" temp1="temp.${label}.1" temp2="temp.${label}.2" +tempBufr=temp.$label.bufr +tempFilt=temp.$label.filt # Multi-message BUFR # -------------------- @@ -190,6 +192,14 @@ ${tools_dir}/bufr_set -s restricted=1 $input $temp1 r=`$EXEC ${test_dir}/bufr_extract_headers restricted $temp1` [ "$r" = "1" ] +# ECC-1785 Allow encoding satelliteID when rdbType=30 +# ---------------------------------------------------- +sample_bufr4=$ECCODES_SAMPLES_PATH/BUFR3_local_satellite.tmpl +echo 'set numberOfSubsets=1; set rdbType=30; set satelliteID=78; write;' > $tempFilt +${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4 +r=$(${test_dir}/bufr_extract_headers isSatellite,satelliteID $tempBufr) +[ "$r" = "1 78" ] + echo "Test with invalid inputs..." # --------------------------------- @@ -234,3 +244,4 @@ grep -q "No BUFR messages in file" $temp2 # Clean up rm -f $temp1 $temp2 +rm -f $tempBufr $tempFilt