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

DOC = '''
Run the unstable 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 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_prod_esim" && "cellular_unstable")'],
                    ignore_test_failures=True, max_run_sec=10800,
                    command_args=args,
                    varsfiles=[temp_file.name])

parallel_simple(run, machines)
