diff --git a/test/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_EA5.compare b/test/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_EA5.compare new file mode 100644 index 0000000000000000000000000000000000000000..088a08ae12dc5a4f5c3ad605ede17108ec0fe4be --- /dev/null +++ b/test/Regression/Compare_gribfiles/7.0.4/Controls/CONTROL_EA5.compare @@ -0,0 +1,40 @@ +DAY1 +DAY2 +DTIME 3 +TYPE AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN +TIME 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +STEP 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +ACCTYPE FC +ACCTIME 06/18 +ACCMAXSTEP 12 +CLASS EA +STREAM OPER +NUMBER OFF +EXPVER 1 +GRID 1000 +LEFT -0 +LOWER 0 +UPPER 5000 +RIGHT 5000 +LEVEL 137 +LEVELIST 130/to/137 +CWC 1 +RESOL 159 +GAUSS 0 +ACCURACY 24 +OMEGA 0 +OMEGADIFF 0 +ETA 1 +ETADIFF 0 +DPDETA 1 +SMOOTH 0 +FORMAT GRIB1 +ADDPAR 186/187/188/235/139/39 +PREFIX EA +ECSTORAGE 0 +ECTRANS 1 +ECFSDIR ectmp:/${USER}/econdemand/ +MAILFAIL ${USER} +MAILOPS ${USER} +GRIB2FLEXPART 0 +EOF diff --git a/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120100 b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120100 new file mode 100644 index 0000000000000000000000000000000000000000..2f13181129b644237b9d3b7bad344b3d8d2b5070 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120100 differ diff --git a/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120103 b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120103 new file mode 100644 index 0000000000000000000000000000000000000000..98b062aba14404f9068b236af94b7773829bb6a8 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120103 differ diff --git a/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120106 b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120106 new file mode 100644 index 0000000000000000000000000000000000000000..ffab5fc6c492c2665a5211242b09600ccf3c9a60 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120106 differ diff --git a/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120109 b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120109 new file mode 100644 index 0000000000000000000000000000000000000000..7bc46c56b77ee42dc4ab1aed4d555d52408b64a3 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120109 differ diff --git a/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120112 b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120112 new file mode 100644 index 0000000000000000000000000000000000000000..ac00421772296496ca1be967ed6c358a91bbc074 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120112 differ diff --git a/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120115 b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120115 new file mode 100644 index 0000000000000000000000000000000000000000..b54e9ba288aff7866b59769d2fb0cfbcdee3c650 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120115 differ diff --git a/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120118 b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120118 new file mode 100644 index 0000000000000000000000000000000000000000..c183450b38d65d911cf006075c443c5353916c02 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120118 differ diff --git a/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120121 b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120121 new file mode 100644 index 0000000000000000000000000000000000000000..7ae16fcef53a74d4335c3c3ca50ef65614c96e93 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.0.4/EA5/EA18120121 differ diff --git a/test/Regression/Compare_gribfiles/7.1/Controls/CONTROL_EA5.compare b/test/Regression/Compare_gribfiles/7.1/Controls/CONTROL_EA5.compare new file mode 100644 index 0000000000000000000000000000000000000000..27a505d713a315b30d6adfc69827e4096f54a402 --- /dev/null +++ b/test/Regression/Compare_gribfiles/7.1/Controls/CONTROL_EA5.compare @@ -0,0 +1,23 @@ +START_DATE +DTIME 3 +TYPE AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN AN +TIME 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +STEP 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +ACCTYPE FC +ACCTIME 06/18 +ACCMAXSTEP 12 +CLASS EA +STREAM OPER +GRID 1. +LEFT 0. +LOWER 0. +UPPER 5. +RIGHT 5. +LEVEL 137 +LEVELIST 130/to/137 +RESOL 159 +ETA 1 +ADDPAR LCC/MCC/HCC/SKT/STL1/SWVL1 +PREFIX EA +ECTRANS 1 +CWC 1 diff --git a/test/Regression/Compare_gribfiles/7.1/EA5/EA18120100 b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120100 new file mode 100644 index 0000000000000000000000000000000000000000..2f13181129b644237b9d3b7bad344b3d8d2b5070 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120100 differ diff --git a/test/Regression/Compare_gribfiles/7.1/EA5/EA18120103 b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120103 new file mode 100644 index 0000000000000000000000000000000000000000..98b062aba14404f9068b236af94b7773829bb6a8 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120103 differ diff --git a/test/Regression/Compare_gribfiles/7.1/EA5/EA18120106 b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120106 new file mode 100644 index 0000000000000000000000000000000000000000..ffab5fc6c492c2665a5211242b09600ccf3c9a60 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120106 differ diff --git a/test/Regression/Compare_gribfiles/7.1/EA5/EA18120109 b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120109 new file mode 100644 index 0000000000000000000000000000000000000000..7bc46c56b77ee42dc4ab1aed4d555d52408b64a3 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120109 differ diff --git a/test/Regression/Compare_gribfiles/7.1/EA5/EA18120112 b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120112 new file mode 100644 index 0000000000000000000000000000000000000000..ac00421772296496ca1be967ed6c358a91bbc074 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120112 differ diff --git a/test/Regression/Compare_gribfiles/7.1/EA5/EA18120115 b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120115 new file mode 100644 index 0000000000000000000000000000000000000000..b54e9ba288aff7866b59769d2fb0cfbcdee3c650 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120115 differ diff --git a/test/Regression/Compare_gribfiles/7.1/EA5/EA18120118 b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120118 new file mode 100644 index 0000000000000000000000000000000000000000..c183450b38d65d911cf006075c443c5353916c02 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120118 differ diff --git a/test/Regression/Compare_gribfiles/7.1/EA5/EA18120121 b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120121 new file mode 100644 index 0000000000000000000000000000000000000000..7ae16fcef53a74d4335c3c3ca50ef65614c96e93 Binary files /dev/null and b/test/Regression/Compare_gribfiles/7.1/EA5/EA18120121 differ diff --git a/test/Regression/Compare_gribfiles/New_files/EA13080800 b/test/Regression/Compare_gribfiles/New_files/EA13080800 new file mode 100644 index 0000000000000000000000000000000000000000..b38d5e6c69563c3d6d2b7b617190d96c390e4d54 Binary files /dev/null and b/test/Regression/Compare_gribfiles/New_files/EA13080800 differ diff --git a/test/Regression/Compare_gribfiles/New_files/EA13080803 b/test/Regression/Compare_gribfiles/New_files/EA13080803 new file mode 100644 index 0000000000000000000000000000000000000000..293fa14c5b1c8e55d8dce3d9ee3aedd3647c9109 Binary files /dev/null and b/test/Regression/Compare_gribfiles/New_files/EA13080803 differ diff --git a/test/Regression/Compare_gribfiles/New_files/EA13080806 b/test/Regression/Compare_gribfiles/New_files/EA13080806 new file mode 100644 index 0000000000000000000000000000000000000000..f05485aea8ae1da7b47445eb7501096fa4b340bf Binary files /dev/null and b/test/Regression/Compare_gribfiles/New_files/EA13080806 differ diff --git a/test/Regression/Compare_gribfiles/New_files/EA13080809 b/test/Regression/Compare_gribfiles/New_files/EA13080809 new file mode 100644 index 0000000000000000000000000000000000000000..39389c8c83ae935b329b20596c688b7d5affb6b7 Binary files /dev/null and b/test/Regression/Compare_gribfiles/New_files/EA13080809 differ diff --git a/test/Regression/Compare_gribfiles/New_files/EA13080812 b/test/Regression/Compare_gribfiles/New_files/EA13080812 new file mode 100644 index 0000000000000000000000000000000000000000..b5948f2c7664c577cc546b40eec6ca0971be1011 Binary files /dev/null and b/test/Regression/Compare_gribfiles/New_files/EA13080812 differ diff --git a/test/Regression/Compare_gribfiles/New_files/EA13080815 b/test/Regression/Compare_gribfiles/New_files/EA13080815 new file mode 100644 index 0000000000000000000000000000000000000000..b9490a2d4cdef532a6bde71b9a31f6053139b059 Binary files /dev/null and b/test/Regression/Compare_gribfiles/New_files/EA13080815 differ diff --git a/test/Regression/Compare_gribfiles/New_files/EA13080818 b/test/Regression/Compare_gribfiles/New_files/EA13080818 new file mode 100644 index 0000000000000000000000000000000000000000..8abad5e097da27e248b5ec31a2a7d9b65b16f6d2 Binary files /dev/null and b/test/Regression/Compare_gribfiles/New_files/EA13080818 differ diff --git a/test/Regression/Compare_gribfiles/New_files/EA13080821 b/test/Regression/Compare_gribfiles/New_files/EA13080821 new file mode 100644 index 0000000000000000000000000000000000000000..f0375f5cb7eeb3db99ef212f66606ae67107ab0b Binary files /dev/null and b/test/Regression/Compare_gribfiles/New_files/EA13080821 differ diff --git a/test/Regression/Compare_gribfiles/Reference_files/EA13080800 b/test/Regression/Compare_gribfiles/Reference_files/EA13080800 new file mode 100644 index 0000000000000000000000000000000000000000..b38d5e6c69563c3d6d2b7b617190d96c390e4d54 Binary files /dev/null and b/test/Regression/Compare_gribfiles/Reference_files/EA13080800 differ diff --git a/test/Regression/Compare_gribfiles/Reference_files/EA13080803 b/test/Regression/Compare_gribfiles/Reference_files/EA13080803 new file mode 100644 index 0000000000000000000000000000000000000000..293fa14c5b1c8e55d8dce3d9ee3aedd3647c9109 Binary files /dev/null and b/test/Regression/Compare_gribfiles/Reference_files/EA13080803 differ diff --git a/test/Regression/Compare_gribfiles/Reference_files/EA13080806 b/test/Regression/Compare_gribfiles/Reference_files/EA13080806 new file mode 100644 index 0000000000000000000000000000000000000000..f05485aea8ae1da7b47445eb7501096fa4b340bf Binary files /dev/null and b/test/Regression/Compare_gribfiles/Reference_files/EA13080806 differ diff --git a/test/Regression/Compare_gribfiles/Reference_files/EA13080809 b/test/Regression/Compare_gribfiles/Reference_files/EA13080809 new file mode 100644 index 0000000000000000000000000000000000000000..39389c8c83ae935b329b20596c688b7d5affb6b7 Binary files /dev/null and b/test/Regression/Compare_gribfiles/Reference_files/EA13080809 differ diff --git a/test/Regression/Compare_gribfiles/Reference_files/EA13080812 b/test/Regression/Compare_gribfiles/Reference_files/EA13080812 new file mode 100644 index 0000000000000000000000000000000000000000..b5948f2c7664c577cc546b40eec6ca0971be1011 Binary files /dev/null and b/test/Regression/Compare_gribfiles/Reference_files/EA13080812 differ diff --git a/test/Regression/Compare_gribfiles/Reference_files/EA13080815 b/test/Regression/Compare_gribfiles/Reference_files/EA13080815 new file mode 100644 index 0000000000000000000000000000000000000000..b9490a2d4cdef532a6bde71b9a31f6053139b059 Binary files /dev/null and b/test/Regression/Compare_gribfiles/Reference_files/EA13080815 differ diff --git a/test/Regression/Compare_gribfiles/Reference_files/EA13080818 b/test/Regression/Compare_gribfiles/Reference_files/EA13080818 new file mode 100644 index 0000000000000000000000000000000000000000..8abad5e097da27e248b5ec31a2a7d9b65b16f6d2 Binary files /dev/null and b/test/Regression/Compare_gribfiles/Reference_files/EA13080818 differ diff --git a/test/Regression/Compare_gribfiles/Reference_files/EA13080821 b/test/Regression/Compare_gribfiles/Reference_files/EA13080821 new file mode 100644 index 0000000000000000000000000000000000000000..f0375f5cb7eeb3db99ef212f66606ae67107ab0b Binary files /dev/null and b/test/Regression/Compare_gribfiles/Reference_files/EA13080821 differ diff --git a/test/Regression/Compare_gribfiles/test_cmp_grib_file.py b/test/Regression/Compare_gribfiles/test_cmp_grib_file.py new file mode 100644 index 0000000000000000000000000000000000000000..31d52c7c8361fbef2ccf2790b6184a2972f4faf5 --- /dev/null +++ b/test/Regression/Compare_gribfiles/test_cmp_grib_file.py @@ -0,0 +1,244 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +""" + +# ------------------------------------------------------------------------------ +# MODULES +# ------------------------------------------------------------------------------ +import os +import sys +from eccodes import GribFile, GribMessage + +# ------------------------------------------------------------------------------ +# FUNCTION +# ------------------------------------------------------------------------------ +def get_cmdline_params(parlist, debug=True): + + import getopt + + iref_path = '' # e.g. Reference_files + inew_path = '' # e.g. New_files + smatch = '' # e.g. files matching pattern + + try: + opts, pars = getopt.getopt(parlist, + "hr:n:p:", + ["ipref=", "ipnew=", "pattern="]) + except getopt.GetoptError: + print('test_cmp_grib_file.py -r <ipref> -n <ipnew> -p <pattern>') + sys.exit(2) + + for opt, par in opts: + if opt == '-h': + print('test_cmp_grib_file.py -r <ipref> -n <ipnew> -p <pattern>') + sys.exit() + elif opt in ("-r", "--ipref"): + iref_path = par + elif opt in ("-n", "--ipnew"): + inew_path = par + elif opt in ("-p", "--pattern"): + smatch = par + + if iref_path == '': + sys.exit('NO REFERENCE INPUT PATH SET!') + if inew_path == '': + sys.exit('NO "NEW" COMPARISON INPUT PATH SET!') + if smatch == '': + sys.exit('NO MATCHING PATTERN FOR FILES SET!') + + if debug: + print("\n\nWelcome!") + print('Reference path is: ', iref_path) + print('New path is: ', inew_path) + print('Filepattern is: ', smatch) + + return iref_path, inew_path, smatch + +def get_files(ipath, matchingstring, debug=True): + """ + @Description: + Get filenames from input path matching the + string or regular expression and return it. + + @Input: + ipath: string + Path to the files. + + matchingstring: string + A string defining the filenames, + with or without regular exprssion. + + @Return + filename: list of strings + A list of all files matching the pattern of + matchingstring. + """ + import fnmatch + + files = [] + + for fn in os.listdir(ipath): + if fnmatch.fnmatch(fn, matchingstring): + files.append(fn) + + filelist = sorted(files) + if debug: + print('The input files are: %s' %(filelist)) + + return filelist + +def cmp_files_list(flist1, flist2): + ''' + ''' + + # 1. same length? + length = len(flist1) == len(flist2) + if not length: + print('There are not the same amount of files.') + sys.exit('Message 1') + + # 2. same content? + content = [True for i, j in zip(flist1, flist2) if i == j] + if not len(content) == len(flist1): + print('Not the same file list') + sys.exit('Message 2') + + return True + + +def cmp_number_messages(iref, flist1, inew, flist2): + + ref_dict = {} + new_dict = {} + res_dict = {} + for file in flist1: + with GribFile(os.path.join(iref,file)) as grib: + ref_dict[file] = len(grib) + with GribFile(os.path.join(inew,file)) as grib: + new_dict[file] = len(grib) + + res_dict[file] = ref_dict[file] == new_dict[file] + + for k, res in res_dict.items(): + if not res == True: + print('LOG: Amount of messages in files {} are not the same!'.format(k)) + + return True + + +def cmp_grib_msg_header(ipath_ref, ipath_new, filelist): + from subprocess import Popen, PIPE + # ref_dict = {} + # new_dict = {} + # for file in flist1: + # with GribFile(os.path.join(iref,file)) as grib: + # for i in range(len(grib)): + # msg = GribMessage(grib) + # ref_dict[file] = {} + # ref_dict[file][i] = [msg['shortName'],msg['level'], + # msg['editionNumber'],msg['dataDate'], + # msg['dataTime'],msg['marsClass'], + # msg['type'], msg['gridType'], + # msg['stepRange']] + error_flag = False + cmp_flag = False + for file in filelist: + try: + res = Popen(['grib_compare', '-H', + ipath_ref + '/' + file, + ipath_new + '/' + file], + stdin=PIPE, stdout=PIPE, stderr=PIPE) + output, error = res.communicate()#.decode("utf-8")) + if error: + print('... ERROR: \n\t{}'.format(error.decode())) + error_flag = True + if output: + print('{}'.format(output.decode())) + cmp_flag = True + except ValueError as e: + print('... ERROR CODE: ' + str(e.returncode)) + print('... ERROR MESSAGE:\n \t ' + str(res)) + error_flag = True + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + error_flag = True + + if error_flag: + sys.exit('... ERROR IN GRIB MESSAGE COMPARISON!') + if cmp_flag: + sys.exit('... FILES HAVE DIFFERENCES IN GRIB MESSAGES!') + + return True + + +def cmp_grib_msg_statistics(ipath_ref, ipath_new, filelist): + + from subprocess import Popen, PIPE + + error_flag = False + cmp_flag = False + for file in filelist: + try: + res = Popen(['grib_compare', '-c', 'statistics:n', + ipath_ref + '/' + file, + ipath_new + '/' + file], + stdin=PIPE, stdout=PIPE, stderr=PIPE) + output, error = res.communicate()#.decode("utf-8")) + if error: + print('... ERROR: \n\t{}'.format(error.decode())) + error_flag = True + if output: + print('\nIn File: {}'.format(file)) + print('{}'.format(output.decode())) + cmp_flag = True + except ValueError as e: + print('... ERROR CODE: ' + str(e.returncode)) + print('... ERROR MESSAGE:\n \t ' + str(res)) + error_flag = True + except OSError as e: + print('... ERROR CODE: ' + str(e.errno)) + print('... ERROR MESSAGE:\n \t ' + str(e.strerror)) + error_flag = True + + if error_flag: + sys.exit('... ERROR IN GRIB MESSAGE COMPARISON!') + if cmp_flag: + sys.exit('... FILES HAVE DIFFERENT STATISTICS!') + return True + +if __name__ == '__main__': + + # get the parameter list of program call + ref_path, new_path, fmatch = get_cmdline_params(sys.argv[1:]) + + # get the list of files of both cases + ref_files = get_files(ref_path, fmatch) + new_files = get_files(new_path, fmatch) + + # flag to store successfull tests + suc = True + + # 1. Does the 2 cases contain the same list of files? + suc = True if suc and cmp_files_list(ref_files, new_files) else False + + # 2. Does each file in both cases contain the same amount of messages? + suc = True if suc and cmp_number_messages(ref_path, ref_files, new_path, new_files) else False + + # 3. Does each file has the same parameters (in Header)? + # Since we can be sure that both cases have the same files, + # we just use 1 filelist + suc = True if suc and cmp_grib_msg_header(ref_path, new_path, new_files) else False + + # 4. Are the statistics of each message the same? + # Since we can be sure that both cases have the same files, + # we just use 1 filelist + suc = True if suc and cmp_grib_msg_statistics(ref_path, new_path, new_files) else False + + # If the program comes this far and flag "suc" = True, + # all tests were successful + if suc: + exit('GRIB_COMPARISON: SUCCESSFULL!') + else: + exit('GRIB_COMPARISON: FAILURE!')