aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVratko Polak <vrpolak@cisco.com>2019-09-12 15:45:31 +0200
committerVratko Polak <vrpolak@cisco.com>2019-09-13 10:31:40 +0200
commit8be5c3483fffdc62550f74acf8ccba2123547bb5 (patch)
tree9e0bb04d6eb0ba2722ac60ac8bbc8554bf5d331b
parent17220bfce36c723a3ca6fdd1ef757709ab50f4eb (diff)
CRC checker: Sort and indent dict output
Also, use double quotes, so the dict is shown not only as a valid Python code, but also a valid JSON. This should make it easier to handle big CRC changes such as: https://logs.fd.io/production/vex-yul-rot-jenkins-1 /vpp-csit-verify-api-crc-master/646/console.log.gz + Log indented message about CRC conflict to console even on failure, as in the exception, endlines are escaped. Change-Id: If4fe3003f612d4b0c156004a0aa2dab088e50723 Signed-off-by: Vratko Polak <vrpolak@cisco.com>
-rw-r--r--resources/libraries/python/VppApiCrc.py33
1 files changed, 18 insertions, 15 deletions
diff --git a/resources/libraries/python/VppApiCrc.py b/resources/libraries/python/VppApiCrc.py
index cb6f5b0c60..9a5247a351 100644
--- a/resources/libraries/python/VppApiCrc.py
+++ b/resources/libraries/python/VppApiCrc.py
@@ -96,15 +96,16 @@ class VppApiCrcChecker(object):
self._register_all()
self._check_dir(directory)
- def raise_or_log(self, exception):
- """If fail_on_mismatch, raise, else log to console the exception.
+ def log_and_raise(self, exc_msg):
+ """Log to console, on fail_on_mismatch also raise runtime exception.
- :param exception: The exception to raise or log.
- :type exception: RuntimeError
+ :param exc_msg: The message to include in log or exception.
+ :type exception: str
+ :raises RuntimeError: With the message, if fail_on_mismatch.
"""
+ logger.console("RuntimeError:\n{m}".format(m=exc_msg))
if self.fail_on_mismatch:
- raise exception
- logger.console("{exc!r}".format(exc=exception))
+ raise RuntimeError(exc_msg)
def _register_collection(self, collection_name, name_to_crc_mapping):
"""Add a named (copy of) collection of CRCs.
@@ -267,16 +268,19 @@ class VppApiCrcChecker(object):
return
self._initial_conflicts_reported = True
if self._reported:
- self.raise_or_log(
- RuntimeError("Dir check found incompatible API CRCs: {rep!r}"\
- .format(rep=self._reported)))
+ reported_indented = json.dumps(
+ self._reported, indent=1, sort_keys=True, separators=[",", ":"])
+ self.log_and_raise(
+ "Dir check found incompatible API CRCs:\n{ri}".format(
+ ri=reported_indented))
if not report_missing:
return
missing = {name: mapp for name, mapp in self._missing.items() if mapp}
if missing:
- self.raise_or_log(
- RuntimeError("Dir check found missing API CRCs: {mis!r}"\
- .format(mis=missing)))
+ missing_indented = json.dumps(
+ missing, indent=1, sort_keys=True, separators=[",", ":"])
+ self.log_and_raise("Dir check found missing API CRCs:\n{mi}".format(
+ mi=missing_indented))
def check_api_name(self, api_name):
"""Fail if the api_name has no known CRC associated.
@@ -305,6 +309,5 @@ class VppApiCrcChecker(object):
return
crc = self._found.get(api_name, None)
self._reported[api_name] = crc
- self.raise_or_log(
- RuntimeError("No active collection has API {api!r}"
- " CRC found {crc!r}".format(api=api_name, crc=crc)))
+ self.log_and_raise("No active collection has API {api!r}"
+ " CRC found {crc!r}".format(api=api_name, crc=crc))