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

AUTHOR = 'n/a'
NAME = 'tabswitchcuj2_plus_noproxy'
METADATA = {
    "contacts": ["chromeos-perf-reliability-eng@google.com", "asadrieh@google.com"],
    "bug_component": "b:1025042",
    "criteria": "Tauto wrapper for SPRITE` v1 Tast test.",
    "hw_agnostic": True
}
ATTRIBUTES = 'suite:performance_cuj_sprite'
TIME = 'long'
TEST_CATEGORY = 'Stress'
TEST_CLASS = 'Hardware'
TEST_TYPE = 'Server'
MAX_RESULT_SIZE_KB = 1024 * 1024
JOB_RETRIES = 4
ITERATION = 10
REQUIRE_SSP = True
DEPENDENCIES = ''
PY_VERSION = 3

DOC = '''
Run the Tast-based MTBF performance CUJ test internally.

Tast is an integration-testing framework analogous 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.
'''

from autotest_lib.client.common_lib import utils
from autotest_lib.utils import labellib

def report_host_info(host):
  labels = labellib.LabelsMapping(host.host_info_store.get().labels)
  labels['test'] = 'meta.RunCUJ.tabswitchcuj2_plus_noproxy'
  utils.write_keyval(job.resultdir, labels)
  try:
    # Try to retrieve and report DUT HWID and serial number.
    dut.setup_hwid_and_serialnumber(host)
    logging.info("Host info store: %s", host.host_info_store.get())
    utils.write_keyval(job.resultdir, host.host_info_store.get().attributes)
  except Exception as e:
    logging.warning("Failed retrieving DUT host info: %s", e)

def run(machine):
  host=hosts.create_host(machine)
  report_host_info(host)
  varslist = ['iteration=%d' % ITERATION]
  job.run_test('tast',
              host=host,
              test_exprs=['meta.RunCUJ.tabswitchcuj2_plus_noproxy'],
              ignore_test_failures=False,
              max_run_sec= 120 * 60,
              varslist=varslist,
              command_args=args)

parallel_simple(run, machines)