# 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.cl_adapter_keyboard_pairing_test'
PURPOSE = 'Test bluetooth adapter pairing and connecting to a bluetooth device.'
CRITERIA = 'Adapter should work in correct states.'
ATTRIBUTES = 'suite:bluetooth, suite:bluetooth_e2e'
TIME = 'SHORT'  # ~3 minutes on octopus
TEST_CATEGORY = 'Functional'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth, working_bluetooth_btpeer:1'

DOC = """
Verify that the bluetooth adapter of the DUT could pair and connect
to a bluetooth device.

Specifically, the following subtests are executed in this autotest.
    - test_reset_on_adapter
    - test_pairable
    - test_discover_device
    - test_stop_discovery
    - test_device_name
    - test_device_class_of_service
    - test_device_class_of_device
    - test_pairing
    - test_connection_by_adapter
    - test_disconnection_by_adapter
    - test_connection_by_device
    - test_disconnection_by_device
    - test_remove_pairing
"""

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=1, btpeer_args=btpeer_args,
                 test_name=NAME.split('.')[1])

parallel_simple(run, machines)
