# 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_browse_test'
ATTRIBUTES = 'suite:bluetooth, suite:bluetooth_e2e'
TIME = 'SHORT'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'Server'
DEPENDENCIES = 'bluetooth, working_bluetooth_btpeer:1'

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 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)
