# 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_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 searching for attributes of
services.

The tester sends Service Search Request and Service Attribute Request to the DUT
to ensure that it is able to response with different attributes:
ServiceRecordHandle, BrowseGroupList, DocumentationURL, ClientExecutableURL,
IconURL, ProtocolDescriptorList, VersionNumberList, ServiceDatabaseState,
BluetoothProfileDescriptorList, AdditionalProtocolDescriptorLists, ServiceID,
ServiceRecordState, ServiceInfoTime, LanguageBaseAttributeIdList,
ServiceAvailability, ServiceName, ServiceDescription, ProviderName.
It also checks that responses with continuation state work properly,
as well as requests with non-existing attributes and various invalid requests.

This test covers the Bluetooth SIG test cases:
TP/SERVER/SA/BV-01-C
TP/SERVER/SA/BV-03-C
TP/SERVER/SA/BV-04-C
TP/SERVER/SA/BV-05-C
TP/SERVER/SA/BV-06-C
TP/SERVER/SA/BV-07-C
TP/SERVER/SA/BV-08-C
TP/SERVER/SA/BV-09-C
TP/SERVER/SA/BV-10-C
TP/SERVER/SA/BV-11-C
TP/SERVER/SA/BV-12-C
TP/SERVER/SA/BV-13-C
TP/SERVER/SA/BV-14-C
TP/SERVER/SA/BV-15-C
TP/SERVER/SA/BV-16-C
TP/SERVER/SA/BV-17-C
TP/SERVER/SA/BV-18-C
TP/SERVER/SA/BV-19-C
TP/SERVER/SA/BV-20-C
TP/SERVER/SA/BV-21-C
TP/SERVER/SA/BI-01-C
TP/SERVER/SA/BI-02-C
TP/SERVER/SA/BI-03-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)
