# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

AUTHOR = 'abergman, chromeos-engprod-platform-syd'
NAME = 'benchmark_CRXPRT2_2'
ATTRIBUTES = 'suite:performance_cuj_benchmarks'
TIME = 'long'
TEST_CATEGORY = 'Stress'
TEST_CLASS = 'Hardware'
TEST_TYPE = 'Server'
PRIORITY = 4995
MAX_RESULT_SIZE_KB = 1024 * 1024
JOB_RETRIES = 2
REQUIRE_SSP = True
DEPENDENCIES = ''

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

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_version'] = 1
  labels['test'] = 'benchmark.CRXPRT2'
  labels['test_iteration'] = '2'
  utils.write_keyval(job.resultdir, labels)

def run(machine):
  host=hosts.create_host(machine)
  report_host_info(host)
  job.run_test('tast',
              host=host,
              test_exprs=['benchmark.CRXPRT2'],
              ignore_test_failures=False,
              max_run_sec=3600,
              command_args=args,
              vars_gs_path='config/perf_cuj/perf_cuj.config')

parallel_simple(run, machines)
