# Copyright 2023 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 = 'spera_MultiTaskingApp_essential_lacros_05'
METADATA = {
    "contacts": ["chromeos-perf-reliability-eng@google.com", "abergman@google.com"],
    "bug_component": "b:1025042",
    "criteria": "Tauto wrapper for SPERA v2 Tast test.",
    "hw_agnostic": True
}
ATTRIBUTES = 'suite:performance_cuj_lacros_v2'
TIME = 'long'
TEST_TYPE = 'Server'
PRIORITY = 4916
MAX_RESULT_SIZE_KB = 1024 * 1024
JOB_RETRIES = 2
REQUIRE_SSP = True
DEPENDENCIES = 'essential'
PY_VERSION = 3

DOC = '''
Run the Tast-based MTBF performance CUJ test (v2).

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.
'''

import common
import logging

from autotest_lib.client.common_lib import utils
from autotest_lib.site_utils.deployment.prepare import dut
from autotest_lib.utils import labellib

def report_host_info(host):
  labels = labellib.LabelsMapping(host.host_info_store.get().labels)
  labels['test_version'] = 2
  labels['test'] = 'spera.MultiTaskingApp.essential_lacros'
  labels['test_iteration'] = '5'
  labels['total_tests_to_run'] = 180
  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)
  job.run_test('tast',
              host=host,
              test_exprs=['spera.MultiTaskingApp.essential_lacros'],
              clear_tpm=False,
              ignore_test_failures=False,
              max_run_sec=3600,
              command_args=args,
              vars_gs_path='config/perf_cuj/perf_cuj.config')

parallel_simple(run, machines)
