1 # 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 7 from __future__ import absolute_import 8 from __future__ import division 9 from __future__ import print_function 10 11 import collections 12 import json 13 import sys 14 15 from autotest_lib.client.common_lib import enum 16 17 18 # Return code that will be sent back to callers. 19 RETURN_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 30 class 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 48 def 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()) 52