From: Sam Hague Date: Fri, 25 May 2018 18:17:06 +0000 (-0400) Subject: Write exceptions to file X-Git-Tag: pre-potassium~776 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=e26facb2347781d873a1b08de414dfdcaadcfdcd;hp=500e35e148e53f73fdf5ab3f0ffd46872fd7adea;p=integration%2Ftest.git Write exceptions to file Change-Id: Ic62ed4abea609f04564ec1f1011daf839e33c617 Signed-off-by: Sam Hague --- diff --git a/csit/libraries/KarafKeywords.robot b/csit/libraries/KarafKeywords.robot index cece9c4490..749470b7d8 100644 --- a/csit/libraries/KarafKeywords.robot +++ b/csit/libraries/KarafKeywords.robot @@ -247,6 +247,7 @@ Fail If Exceptions Found During Test \ ${cmd} = Set Variable sed '1,/ROBOT MESSAGE: Starting test ${test_name}/d' ${log_file} \ ${output} = Get Karaf Log Lines From Test Start ${ODL_SYSTEM_${i}_IP} ${test_name} ${cmd} \ ${exlist} = Get and Verify Exceptions ${output} + \ Write Exceptions Map To File ${SUITE_NAME}.${TEST_NAME} /tmp/odl${i}_exceptions.txt \ ${listlength} = BuiltIn.Get Length ${exlist} \ BuiltIn.Run Keyword If ${listlength} != 0 BuiltIn.Fail New exceptions found: ${listlength} diff --git a/csit/libraries/netvirt/excepts.py b/csit/libraries/netvirt/excepts.py index 092f2b7005..98859bf940 100644 --- a/csit/libraries/netvirt/excepts.py +++ b/csit/libraries/netvirt/excepts.py @@ -1,5 +1,7 @@ import collections +import errno import logging +import os import re # Make sure to have unique matches in different lines @@ -156,7 +158,7 @@ def get_exceptions(lines): The lines are parsed to create a list where all lines related to a timestamp are aggregated. Timestamped lines with exception (case insensitive) are copied to the exception map keyed to the index of the timestamp line. Each exception value - also has a 3 element list containing the last three WARN and ERROR lines. + also has a list containing WARN and ERROR lines proceeding the exception. :param list lines: :return OrderedDict _ex_map: map of exceptions @@ -243,3 +245,32 @@ def verify_exceptions(lines): return get_exceptions(lines) return check_exceptions() + + +def write_exceptions_map_to_file(testname, filename, mode="a+"): + """ + Write the exceptions map to a file under the testname header. The output + will include all lines in the exception itself as well as any previous + contextual warning or error lines. The output will be appended or overwritten + depending on the mode parameter. It is assumed that the caller has called + verify_exceptions() earlier to populate the exceptions map, otherwise only + the testname and header will be printed to the file. + + :param str testname: The name of the test + :param str filename: The file to open for writing + :param str mode: Append (a+) or overwrite (w+) + """ + try: + os.makedirs(os.path.dirname(filename)) + except OSError as exception: + if exception.errno != errno.EEXIST: + raise + + with open(filename, mode) as fp: + fp.write("Starting test: {}\n".format(testname)) + fp.write("{}\n".format("-" * 40)) + for ex_idx, ex in _ex_map.items(): + for exwe_index in ex.get("warnerr_list"): + for line in _ts_list[exwe_index]: + fp.write(line) + fp.writelines(ex.get("lines"))