# 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_VideoConfProxy_vp9_grid_essential_lacros_06'
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 = 4835
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.VideoConfProxy.vp9_grid_essential_lacros'
  labels['test_iteration'] = '6'
  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.VideoConfProxy.vp9_grid_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)
