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

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

parallel_simple(run, machines)
