From 721ef5977e3afa42fa7dd7d4ea13091632539f86 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 2 Sep 2019 16:12:52 +0100 Subject: [PATCH] ECC-765: Added valgrind test with suppressions --- tests/CMakeLists.txt | 1 + tests/bufr_ecc-765.sh | 230 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 231 insertions(+) create mode 100755 tests/bufr_ecc-765.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8be2a1e55..48cd459dd 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -103,6 +103,7 @@ list( APPEND tests_data_reqd bufr_ecc-393 bufr_ecc-433 bufr_ecc-750 + bufr_ecc-765 bufr_ecc-875 bufr_ecc-887 grib_ecc-490 diff --git a/tests/bufr_ecc-765.sh b/tests/bufr_ecc-765.sh new file mode 100755 index 000000000..965604eeb --- /dev/null +++ b/tests/bufr_ecc-765.sh @@ -0,0 +1,230 @@ +#!/bin/sh +# Copyright 2005-2019 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.sh + +# --------------------------------------------------------- +# This is the test for the JIRA issue ECC-765. +# BUFR decoding memory leaks +# --------------------------------------------------------- +label="bufr_ecc-765-test" +tempLog=temp.${label}.log +tempSupp=temp.${label}.supp + +if test "x$ECCODES_TEST_WITH_VALGRIND" = "x"; then + echo "Environment variable ECCODES_TEST_WITH_VALGRIND not defined. Test disabled" + exit 0 +fi + +# The presence of ECCODES_TEST_WITH_VALGRIND environment variable redefines +# tools_dir so we reset it to its original +tools_dir=$build_dir/bin + +# --------------------------------------------------------- +# Test 1: Set of BUFR files which have zero leaks. +# Over time this list should increase +# --------------------------------------------------------- +bufr_files_zero_leaks=" + 207003.bufr + PraticaTemp.bufr + aaen_55.bufr + aben_55.bufr + aeolus_wmo_26.bufr + delayed_repl_01.bufr + goes16_nm.bufr + good_j2eo.bufr + israel_observations_2017041010.bufr + mhen_55.bufr + modw_87.bufr + sentinel1.bufr + synop_multi_subset.bufr + tropical_cyclone.bufr + uegabe.bufr +" + +VALGRIND_OPTIONS="--error-exitcode=1 --leak-check=full --log-file=$tempLog" + +# bufr_filter has a small leak to do with parsing and action files not related to BUFR decoding, +# So instead we use bufr_ls to do the unpacking +for bf in $bufr_files_zero_leaks; do + valgrind $VALGRIND_OPTIONS ${tools_dir}/bufr_ls -s unpack=1 ${data_dir}/bufr/$bf >/dev/null +done + + +# --------------------------------------------------------- +# Test 2: Set of BUFR files which have a small known leak. +# Over time this list should decrease +# --------------------------------------------------------- +bufr_files_known_leaks=" + ahws_139.bufr + airc_142.bufr + airc_144.bufr + airs_57.bufr + alws_139.bufr + amda_144.bufr + amsa_55.bufr + amsb_55.bufr + amse_55.bufr + amsu_55.bufr + amv2_87.bufr + amv3_87.bufr + asbh_139.bufr + asbl_139.bufr + asca_139.bufr + asch_139.bufr + ascs_139.bufr + aseh_139.bufr + asel_139.bufr + ashs_139.bufr + atap_55.bufr + ateu_155.bufr + atms_201.bufr + atov_55.bufr + avhm_87.bufr + avhn_87.bufr + avhr_58.bufr + b002_95.bufr + b002_96.bufr + b003_56.bufr + b004_145.bufr + b005_87.bufr + b005_89.bufr + b006_96.bufr + b007_31.bufr + bssh_170.bufr + bssh_176.bufr + bssh_178.bufr + bssh_180.bufr + btem_109.bufr + buoy_27.bufr + cmwi_87.bufr + cmwn_87.bufr + cnow_28.bufr + cori_156.bufr + crit_202.bufr + csrh_189.bufr + emsg_189.bufr + emsg_87.bufr + eum_iasi_twt.bufr + eumetsat_iasi_co.bufr + euwv_87.bufr + fy3a_154.bufr + fy3b_154.bufr + g2nd_208.bufr + g2to_206.bufr + go15_87.bufr + goee_87.bufr + goes_87.bufr + goga_89.bufr + gosat.bufr + grst_26.bufr + gsd1_208.bufr + gsd2_208.bufr + gsd3_208.bufr + gst4_26.bufr + hirb_55.bufr + hirs_55.bufr + ias1_240.bufr + iasi_241.bufr + ifco_208.bufr + ikco_217.bufr + imssnow.bufr + itrg_208.bufr + itwt_233.bufr + j2eo_216.bufr + j2nb_216.bufr + jaso_214.bufr + kond_209.bufr + maer_207.bufr + meta_140.bufr + metar_with_2_bias.bufr + mhsa_55.bufr + mhsb_55.bufr + mhse_55.bufr + mloz_206.bufr + modi_87.bufr + monw_87.bufr + new.bufr + nomi_206.bufr + nos1_208.bufr + nos2_208.bufr + nos3_208.bufr + nos4_208.bufr + nos5_208.bufr + nos6_208.bufr + nos7_208.bufr + nos8_208.bufr + ocea_131.bufr + ocea_132.bufr + ocea_133.bufr + ocea_21.bufr + pgps_110.bufr + pilo_91.bufr + profiler_european.bufr + rada_250.bufr + rado_250.bufr + s4kn_165.bufr + sb19_206.bufr + sbu8_206.bufr + ship_11.bufr + ship_12.bufr + ship_13.bufr + ship_14.bufr + ship_19.bufr + ship_9.bufr + smin_49.bufr + smis_49.bufr + smiu_49.bufr + smos_203.bufr + sn4k_165.bufr + soil_7.bufr + srals3_ecmwf4.bufr + srals3_eumetsat.bufr + ssbt_127.bufr + stuk_7.bufr + syno_1.bufr + syno_2.bufr + syno_3.bufr + syno_4.bufr + syno_multi.bufr + synop.bufr + temp-land-with-substituted-values.bufr + temp_101.bufr + temp_102.bufr + temp_106.bufr + tmr7_129.bufr + tros_31.bufr + wavb_134.bufr +" + +cat > $tempSupp << EOF +{ + eccodes_string_split_suppression + Memcheck:Leak + match-leak-kinds: definite + fun:malloc + fun:string_split + fun:load_bufr_elements_table + fun:bufr_get_from_table + fun:accessor_bufr_elements_table_get_descriptor + fun:grib_bufr_descriptor_new +} +EOF +VALGRIND_OPTIONS="--error-exitcode=1 --leak-check=full --log-file=$tempLog --suppressions=$tempSupp" + +# bufr_filter has a small leak to do with parsing and action files not related to BUFR decoding, +# So instead we use bufr_ls to do the unpacking +for bf in $bufr_files_known_leaks; do + valgrind $VALGRIND_OPTIONS ${tools_dir}/bufr_ls -s unpack=1 ${data_dir}/bufr/$bf >/dev/null +done + + +# Clean up +rm -f $tempLog $tempSupp