# 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_ServiceBrowse'
ATTRIBUTES = "suite:bluetooth, suite:bluetooth_qualification"
SUITE = 'bluetooth,bluetooth_qualification'
TIME = 'SHORT'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'Server'
DEPENDENCIES = 'bluetooth,wificell'

DOC = """
Verify that the IUT behave correct during Service Browse procedure.

Two tests use different requests to execute Service Browse procedure:
one uses Service Search Request and Service Attribute Request,
the other one uses Service Search Attribute Request.

This test covers the Bluetooth SIG test cases:
TP/SERVER/BRW/BV-01-C
TP/SERVER/BRW/BV-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_ServiceBrowse',
                 device_host=device_host,
                 tester_host=tester_host,
                 interactive=False)

parallel_simple(run, machines)
