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