# Copyright (c) 2013 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 = 'arakhov@chromium.org'
NAME = 'bluetooth_SDP_ServiceSearchRequestBasic'
ATTRIBUTES = ('suite:bluetooth, suite:bluetooth_qualification,'
              'suite:bluetooth_e2e')
TIME = 'SHORT'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'Server'
DEPENDENCIES = 'bluetooth, chameleon:bt_peer'

DOC = """
Verify the correct behaviour of the device when searching for services.

The tester sends a Service Search Request to the DUT, searching the UUID of
SDP Server Service, which is known to exist.
Tester also searchs for Service Class ID = 0x0001, which should never exist.
In order to verify the correct behaviour of continuation state, some number of
fake Bluetooth services are registered on the device. This is needed to create
a request with a very long response, and to force the SDP server on the device
to use this continuation state functionality.
The tester also sends Service Search Requests with intentionally invalid PDU
size parameter and with generally incorrect syntax to verify that the IUT reacts
correctly in these cases.

This test covers the following Bluetooth SIG test cases:
TP/SERVER/SS/BV-01-C
TP/SERVER/SS/BV-03-C
TP/SERVER/SS/BV-04-C
TP/SERVER/SS/BI-01-C
TP/SERVER/SS/BI-02-C
"""

from autotest_lib.server.cros.bluetooth import bluetooth_tester
from autotest_lib.server import utils


args_dict = utils.args_to_dict(args)

def run(machine):
    device_host = hosts.create_host(machine)
    tester_host = bluetooth_tester.create_host_from(device_host, args=args_dict)
    job.run_test('bluetooth_SDP_ServiceSearchRequestBasic',
                 device_host=device_host,
                 tester_host=tester_host,
                 interactive=False)

parallel_simple(run, machines)
