| # Copyright 2018 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Shared libs by run_suite.py & run_suite_skylab.py.""" |
| |
| from __future__ import absolute_import |
| from __future__ import division |
| from __future__ import print_function |
| |
| import collections |
| import json |
| import sys |
| |
| from autotest_lib.client.common_lib import enum |
| |
| |
| # Return code that will be sent back to callers. |
| RETURN_CODES = enum.Enum( |
| 'OK', |
| 'ERROR', |
| 'WARNING', |
| 'INFRA_FAILURE', |
| 'SUITE_TIMEOUT', |
| 'BOARD_NOT_AVAILABLE', |
| 'INVALID_OPTIONS', |
| ) |
| |
| |
| class SuiteResult(collections.namedtuple('SuiteResult', |
| ['return_code', 'output_dict'])): |
| """Result of running a suite to return.""" |
| |
| def __new__(cls, return_code, output_dict=None): |
| if output_dict is None: |
| output_dict = dict() |
| else: |
| output_dict = output_dict.copy() |
| output_dict['return_code'] = return_code |
| return super(SuiteResult, cls).__new__(cls, return_code, output_dict) |
| |
| @property |
| def string_code(self): |
| """Return the enum string name of the numerical return_code.""" |
| return RETURN_CODES.get_string(self.return_code) |
| |
| |
| def dump_json(obj): |
| """Write obj JSON to stdout.""" |
| output_json = json.dumps(obj, sort_keys=True) |
| sys.stdout.write('#JSON_START#%s#JSON_END#' % output_json.strip()) |