# 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-test-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:testesim, cellular_modem_state:NORMAL"

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

"group:cellular" indicates that the test runs on DUTs with a Cellular modem.
"cellular_sim_test_esim": Used to select tests that require a test 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_test_esim" && !"cellular_unstable")'],
                    ignore_test_failures=True, max_run_sec=10800,
                    command_args=args,
                    varsfiles=[temp_file.name])

parallel_simple(run, machines)
