# Copyright 2021 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

AUTHOR = 'The ChromiumOS Authors'
NAME = 'tast.cellular-ota-prod-esim-stable'
METADATA = {
    'contacts': ['tauto-core@google.com'],
    'bug_component': 'b:1034523', # ChromeOS > Test > Harness > Tauto
    'criteria': 'Tauto wrapper for specified tast tests',
}
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
ATTRIBUTES = 'suite:cellular_ota'
MAX_RESULT_SIZE_KB = 1024 * 1024
PY_VERSION = 3
DEPENDENCIES = "carrier:esim, cellular_modem_state:NORMAL"

DOC = '''
Run the stable Tast tests which verify cellular prod esim functionality.

"group:cellular" indicates that the test runs on DUTs with a Cellular modem.
"cellular_sim_prod_esim": Used to select tests that require a prod esim card.
!"cellular_unstable": Select only stable tests.

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.

See http://go/tast-failures for information about investigating failures.
'''

import json
import tempfile
import yaml

def run(machine):
    host = hosts.create_host(machine)
    with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w+') as temp_file:
        host_info = host.host_info_store.get()
        yaml.safe_dump({'autotest_host_info_labels':
                        json.dumps(host_info.labels)},
                        stream=temp_file)
        temp_file.flush()
        job.run_test('tast',
                    host=host,
                    test_exprs=['("group:cellular" && "cellular_sim_prod_esim" && !"cellular_unstable")'],
                    ignore_test_failures=True, max_run_sec=10800,
                    command_args=args,
                    varsfiles=[temp_file.name])

parallel_simple(run, machines)
