# 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 = 'googlemeetcuj_basic_class'
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.googlemeetcuj_basic_class'
  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.googlemeetcuj_basic_class'],
              ignore_test_failures=False,
              max_run_sec= 120 * 60,
              varslist=varslist,
              command_args=args)

parallel_simple(run, machines)