# Copyright (c) 2020 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 = 'chromeos-bluetooth'
NAME = 'bluetooth_AdapterCLHealth.cl_sdp_service_search_attribute_request_test'
ATTRIBUTES = 'suite:bluetooth, suite:bluetooth_e2e'
TIME = 'SHORT'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'Server'
DEPENDENCIES = 'bluetooth, working_bluetooth_btpeer:1'

DOC = """
Verify the correct behaviour of the device when executing Service Search
Attribute transaction.

The tester sends a Service Search Attribute Request to the DUT, checking:
* non-existing Service, existing Attribute
* existing Service, non-existing Attribute
* non-existing Service, non-existing Attribute
* existing Service, existing Attribute
* various specific attributes, listed in Test Specification
* correctness of continuation state behavior
* responses to invalid requests

This test covers the following Bluetooth SIG test cases:
TP/SERVER/SSA/BV-01-C
TP/SERVER/SSA/BV-02-C
TP/SERVER/SSA/BV-03-C
TP/SERVER/SSA/BV-04-C
TP/SERVER/SSA/BV-06-C
TP/SERVER/SSA/BV-07-C
TP/SERVER/SSA/BV-08-C
TP/SERVER/SSA/BV-09-C
TP/SERVER/SSA/BV-10-C
TP/SERVER/SSA/BV-11-C
TP/SERVER/SSA/BV-12-C
TP/SERVER/SSA/BV-13-C
TP/SERVER/SSA/BV-14-C
TP/SERVER/SSA/BV-15-C
TP/SERVER/SSA/BV-16-C
TP/SERVER/SSA/BV-17-C
TP/SERVER/SSA/BV-18-C
TP/SERVER/SSA/BV-19-C
TP/SERVER/SSA/BV-20-C
TP/SERVER/SSA/BV-21-C
TP/SERVER/SSA/BV-22-C
TP/SERVER/SSA/BV-23-C
TP/SERVER/SSA/BI-01-C
TP/SERVER/SSA/BI-02-C

"""

from autotest_lib.server import utils

args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)
    job.run_test('bluetooth_AdapterCLHealth', host=host,
                 num_iterations=1, args_dict=args_dict,
                 test_name=NAME.split('.')[1])

parallel_simple(run, machines)
