# Copyright 2018 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 = "jaydeepmehta@chromium.org"
NAME = "cts-hardware"
PURPOSE = "Special hardware only test-suite for ARC++ CTS qualification."
CRITERIA = "All tests with SUITE=cts-hardware must pass."

TIME = "LONG"
TEST_CATEGORY = "General"
TEST_CLASS = "suite"
TEST_TYPE = "Server"

DOC = """
ChromeOS ARC++ tests.
"""

import common
from autotest_lib.server.cros.dynamic_suite import dynamic_suite

def predicate(test):
  if not hasattr(test, 'suite') or not hasattr(test, 'name'):
    return False
  if not NAME in test.suite.split(','):
    return False
  # Moblab specific workflow:
  # Moblab prepares retry test package list using test failures in TF stdout.
  # `args_dics['tests']` holds list of items in format abi.CtsPackageName.
  #   ie. ['arm,CtsAppTestCases', 'x86.CtsCameraTestCases', ...]
  # `test.name` holds the actual autotest test name.
  #   ie. cheets_CTS_P.x86.CtsMediaTestCases.other
  name = test.name.split('.')
  if 'tests' in args_dict and name[1]+'.'+name[2] not in args_dict['tests']:
    return False
  return True

args_dict['name'] = NAME
args_dict['job'] = job
args_dict['file_bugs'] = False
args_dict['max_runtime_mins'] = 10080
args_dict['timeout_mins'] = 10080
args_dict['add_experimental'] = True
args_dict['predicate'] = predicate
dynamic_suite.reimage_and_run(**args_dict)

