# 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 = 'suite:bluetooth_stress'
TIME = 'LONG'
TEST_CATEGORY = 'Functional'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth, working_bluetooth_btpeer:1'

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)
btpeer_args = hosts.CrosHost.get_btpeer_arguments(args_dict)

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

parallel_simple(run, machines)
