# 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-unstable'
METADATA = {
    "contacts": ["cros-connectivity@google.com"],
    "bug_component": "b:1131774", # ChromeOS > Software > System Services > Connectivity > Cellular
}
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
ATTRIBUTES = 'suite:cellular_ota_flaky'
MAX_RESULT_SIZE_KB = 1024 * 1024
PY_VERSION = 3
DEPENDENCIES = "carrier:testesim, cellular_modem_state:NORMAL"

DOC = '''
Run the unstable 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 unstable 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)
