From c6c7baa14bd6fe305b15179e6ef92b6999e73c6b Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Mon, 16 Oct 2017 13:36:49 +0200 Subject: [PATCH] handle various special cases when comparing package testing output --- mx.fastr/mx_fastr_pkgs.py | 42 +++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/mx.fastr/mx_fastr_pkgs.py b/mx.fastr/mx_fastr_pkgs.py index a505536eba..9bd585cc92 100644 --- a/mx.fastr/mx_fastr_pkgs.py +++ b/mx.fastr/mx_fastr_pkgs.py @@ -434,7 +434,7 @@ def _set_test_status(fastr_test_info): with open(fastr_testfile_status.abspath) as f: fastr_content = f.readlines() - result = _fuzzy_compare(gnur_content, fastr_content) + result = _fuzzy_compare(gnur_content, fastr_content, gnur_testfile_status.abspath, fastr_testfile_status.abspath) if result == -1: print "{0}: content malformed: {1}".format(pkg, gnur_test_output_relpath) fastr_test_status.status = "INDETERMINATE" @@ -503,9 +503,14 @@ def _find_line(gnur_line, fastr_content, fastr_i): def _replace_engine_references(output): for idx, val in enumerate(output): - output[idx] = val.replace('fastr', '<engine>').replace('gnur', '<engine>') - -def _fuzzy_compare(gnur_content, fastr_content): + if "RUNIT TEST PROTOCOL -- " in val: + # RUnit prints the current date and time + output[idx] = "RUNIT TEST PROTOCOL -- <date/time>" + else: + # ignore differences which come from test directory paths + output[idx] = val.replace('fastr', '<engine>').replace('gnur', '<engine>') + +def _fuzzy_compare(gnur_content, fastr_content, gnur_filename, fastr_filename): _replace_engine_references(gnur_content) _replace_engine_references(fastr_content) gnur_start = _find_start(gnur_content) @@ -525,15 +530,31 @@ def _fuzzy_compare(gnur_content, fastr_content): fastr_line = fastr_content[fastr_i] if gnur_line != fastr_line: + if fastr_line.startswith('Warning') and 'FastR does not support graphics package' in fastr_content[fastr_i + 1]: + # ignore warning about FastR not supporting the graphics package + fastr_i = fastr_i + 2 + if fastr_content[fastr_i].startswith('NULL') and not gnur_line.startswith('NULL'): + # ignore additional visible NULL + fastr_i = fastr_i + 1 + continue + if gnur_line.startswith('Warning') and gnur_i + 1 < gnur_end and 'closing unused connection' in gnur_content[gnur_i + 1]: + # ignore message about closed connection + gnur_i = gnur_i + 2 + continue + if gnur_i > 0 and gnur_content[gnur_i - 1].startswith(' user system elapsed'): + # ignore differences in timing + gnur_i = gnur_i + 1 + fastr_i = fastr_i + 1 + continue # we are fuzzy on Error/Warning as FastR often differs # in the context/format of the error/warniong message AND GnuR is sometimes # inconsistent over which error message it uses. Unlike the unit test environment, # we cannot tag tests in any way, so we simply check that FastR does report # an error. We then scan forward to try to get the files back in sync, as the # the number of error/warning lines may differ. - if gnur_line.startswith(('Error', 'Warning')): - to_match = 'Error' if gnur_line.startswith('Error') else 'Warning' - if not fastr_line.startswith(to_match): + if 'Error' in gnur_line or 'Warning' in gnur_line: + to_match = 'Error' if 'Error' in gnur_line else 'Warning' + if to_match not in fastr_line: result = 1 break else: @@ -562,6 +583,11 @@ def _fuzzy_compare(gnur_content, fastr_content): break gnur_i = gnur_i + 1 fastr_i = fastr_i + 1 + if result == 1: + print gnur_filename + ':%d' % gnur_i + ' vs. ' + fastr_filename + ':%d' % fastr_i + print gnur_line.strip() + print "vs." + print fastr_line.strip() return result def _ignore_whitespace(gnur_line, fastr_line): @@ -572,7 +598,7 @@ def pkgtest_cmp(args): gnur_content = f.readlines() with open(args[1]) as f: fastr_content = f.readlines() - return _fuzzy_compare(gnur_content, fastr_content) + return _fuzzy_compare(gnur_content, fastr_content, args[0], args[1]) def find_top100(args): libinstall = join(_fastr_suite_dir(), "top100.tmp") -- GitLab