diff options
Diffstat (limited to 'testing/mozbase/mozlog/mozlog/handlers/statushandler.py')
-rw-r--r-- | testing/mozbase/mozlog/mozlog/handlers/statushandler.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/testing/mozbase/mozlog/mozlog/handlers/statushandler.py b/testing/mozbase/mozlog/mozlog/handlers/statushandler.py new file mode 100644 index 000000000..b5aeb1b53 --- /dev/null +++ b/testing/mozbase/mozlog/mozlog/handlers/statushandler.py @@ -0,0 +1,52 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +from collections import ( + defaultdict, + namedtuple, +) + + +RunSummary = namedtuple("RunSummary", + ("unexpected_statuses", + "expected_statuses", + "log_level_counts", + "action_counts")) + + +class StatusHandler(object): + """A handler used to determine an overall status for a test run according + to a sequence of log messages.""" + + def __init__(self): + # The count of each type of unexpected result status (includes tests and subtests) + self.unexpected_statuses = defaultdict(int) + # The count of each type of expected result status (includes tests and subtests) + self.expected_statuses = defaultdict(int) + # The count of actions logged + self.action_counts = defaultdict(int) + # The count of messages logged at each log level + self.log_level_counts = defaultdict(int) + + def __call__(self, data): + action = data['action'] + self.action_counts[action] += 1 + + if action == 'log': + self.log_level_counts[data['level']] += 1 + + if action in ('test_status', 'test_end'): + status = data['status'] + if 'expected' in data: + self.unexpected_statuses[status] += 1 + else: + self.expected_statuses[status] += 1 + + def summarize(self): + return RunSummary( + dict(self.unexpected_statuses), + dict(self.expected_statuses), + dict(self.log_level_counts), + dict(self.action_counts), + ) |