# 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 = 'videocuj2_premium_youtube_app_quick'
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_quick'
TIME = 'long'
TEST_CATEGORY = 'Stress'
TEST_CLASS = 'Hardware'
TEST_TYPE = 'Server'
MAX_RESULT_SIZE_KB = 1024 * 1024
JOB_RETRIES = 4
ITERATION = 1
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.videocuj2_premium_youtube_app'
  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.videocuj2_premium_youtube_app'],
              ignore_test_failures=False,
              max_run_sec= 120 * 60,
              varslist=varslist,
              command_args=args)

parallel_simple(run, machines)