diff options
author | Vratko Polak <vrpolak@cisco.com> | 2019-09-12 15:45:31 +0200 |
---|---|---|
committer | Vratko Polak <vrpolak@cisco.com> | 2019-09-13 10:31:40 +0200 |
commit | 8be5c3483fffdc62550f74acf8ccba2123547bb5 (patch) | |
tree | 9e0bb04d6eb0ba2722ac60ac8bbc8554bf5d331b | |
parent | 17220bfce36c723a3ca6fdd1ef757709ab50f4eb (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.py | 33 |
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)) |