blob: 26f4da01dc6d10a0057fe13ee34d7a3fc62bd4a4 [file] [log] [blame]
Xixuan Wu888ee7a2018-04-24 10:27:27 -07001# Copyright 2018 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Shared libs by run_suite.py & run_suite_skylab.py."""
6
7from __future__ import absolute_import
8from __future__ import division
9from __future__ import print_function
10
11import collections
12import json
13import sys
14
15from autotest_lib.client.common_lib import enum
16
17
18# Return code that will be sent back to callers.
19RETURN_CODES = enum.Enum(
20 'OK',
21 'ERROR',
22 'WARNING',
23 'INFRA_FAILURE',
24 'SUITE_TIMEOUT',
25 'BOARD_NOT_AVAILABLE',
26 'INVALID_OPTIONS',
27)
28
29
30class SuiteResult(collections.namedtuple('SuiteResult',
31 ['return_code', 'output_dict'])):
32 """Result of running a suite to return."""
33
34 def __new__(cls, return_code, output_dict=None):
35 if output_dict is None:
36 output_dict = dict()
37 else:
38 output_dict = output_dict.copy()
39 output_dict['return_code'] = return_code
40 return super(SuiteResult, cls).__new__(cls, return_code, output_dict)
41
42 @property
43 def string_code(self):
44 """Return the enum string name of the numerical return_code."""
45 return RETURN_CODES.get_string(self.return_code)
46
47
48def dump_json(obj):
49 """Write obj JSON to stdout."""
50 output_json = json.dumps(obj, sort_keys=True)
51 sys.stdout.write('#JSON_START#%s#JSON_END#' % output_json.strip())