# Copyright 2019 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.

from autotest_lib.server import utils

AUTHOR = 'chromeos-bluetooth'
NAME = 'bluetooth_AdapterCLHealth.stress'
PURPOSE = ('Batch of Bluetooth Classic health tests')
CRITERIA = 'Pass all health test'
ATTRIBUTES = ''
TIME = 'LONG'
TEST_CATEGORY = 'Functional'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth, working_bluetooth_btpeer:1'
PY_VERSION = 3

DOC = """
A Batch of Bluetooth Classic health tests. This test is written as a batch
of tests in order to reduce test time, since auto-test ramp up time is
costy. The batch is using BluetoothAdapterQuickTests wrapper methods to
start and end a test and a batch of tests.

This class can be called to run the entire test batch or to run a
specific test only

Specifically, the following subtests are executed in this autotest.
    - cl_adapter_pairing_test
    - cl_adapter_pairing_suspend_resume_test
    - cl_HID_reports_test
    - cl_HID_reports_suspend_resume_test
    - cl_HID_reports_reboot_test
    - cl_connect_disconnect_loop_test
    """

args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)
    job.run_test('bluetooth_AdapterCLHealth', host=host,
                 num_iterations=15, args_dict=args_dict)

parallel_simple(run, machines)
