# 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())