# 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'
SUITE = 'bluetooth,bluetooth_sanity'
TIME = 'SHORT'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'Server'
DEPENDENCIES = 'bluetooth,wificell,router:panther'

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)
