Home | History | Annotate | Download | only in site_utils
      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