# Copyright 2020 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.

from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib import utils

AUTHOR = 'Chromium OS team'
NAME = 'tast.generic-servo'
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
DEPENDENCIES = 'servo_state:WORKING'
# This test belongs to no suite; it is intended mainly for manual invocation
# via test_that.
ATTRIBUTES = ''
MAX_RESULT_SIZE_KB = 256 * 1024

# tast.py uses binaries installed from autotest_server_package.tar.bz2.
REQUIRE_SSP = True

DOC = '''
Run arbitrary Tast tests with servo support.

Tast is an integration-testing framework analagous to the test-running portion
of Autotest. See https://chromium.googlesource.com/chromiumos/platform/tast/ for
more information.

This test runs arbitary Tast-based tests specified by args given to test_that.
This test might be useful on debugging to simulate Tast test runs invoked via
Autotest.

Examples:
    test_that --args="tast_expr=example.ServoEcho servo_host=${SERVO_HOST}
            servo_port=${SERVO_PORT}" ${DUT} tast.generic-servo
    test_that --args="tast_expr='(\"group:mainline\")' servo_host=${SERVO_HOST}
            servo_port=${SERVO_PORT}" ${DUT} tast.generic-servo
    test_that --args=tast_expr='("group:mainline")' ${DUT} tast.generic-servo
'''

args_dict = utils.args_to_dict(args)
assert 'servo_state:WORKING' in DEPENDENCIES
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

try:
    expr = args_dict['tast_expr']
except KeyError:
    raise error.TestFail(
        'Attribute expression is unspecified; set --args=tast_expr=...')

def run(machine):
    job.run_test('tast',
                 host=hosts.create_host(machine, servo_args=servo_args),
                 test_exprs=[expr],
                 ignore_test_failures=False, max_run_sec=3600,
                 command_args=args)

parallel_simple(run, machines)
