# Copyright 2014 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 = 'keybuk@chromium.org'
NAME = 'bluetooth_Sanity_LEDiscovery'
ATTRIBUTES = ('suite:bluetooth, suite:bluetooth_sanity,'
              'suite:bluetooth_quicksanity')
TIME = 'SHORT'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'Server'
DEPENDENCIES = 'bluetooth, chameleon:bt_peer'

DOC = """
Verify that the device can discover Bluetooth Low Energy peripheral.

This is a useful sanity check because it tests basic functionality of the
radio and host subsystem when in LE mode.
"""

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_Sanity_LEDiscovery',
                 device_host=device_host,
                 tester_host=tester_host,
                 interactive=False)


parallel_simple(run, machines)
