# Copyright 2019 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.

from autotest_lib.server import utils
from autotest_lib.server.cros.bluetooth import bluetooth_test

AUTHOR = 'chromeos-chameleon'
NAME = 'bluetooth_AdapterLESanity'
PURPOSE = ('Batch of Bluetooth LE sanity tests')
CRITERIA = 'Pass all sanity test'
ATTRIBUTES = 'suite:bluetooth'
TIME = 'MEDIUM'
TEST_CATEGORY = 'Functional'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth, chameleon:bt_ble_hid'

DOC = """
    A Batch of Bluetooth LE sanity tests. This test is written as a batch
    of tests in order to reduce test time, since auto-test ramp up time is
    costy. The batch is using BluetoothAdapterQuickTests wrapper methods to
    start and end a test and a batch of tests.

    This class can be called to run the entire test batch or to run a
    specific test only - todo http://b/132199238 [autotest BT quick sanity]
    add support for running a single test in quick test
    """

args_dict = utils.args_to_dict(args)
chameleon_args = hosts.CrosHost.get_chameleon_arguments(args_dict)
newblue_enable = args_dict['newblue'] == 'enable'\
  if 'newblue' in args_dict else False

def run(machine):
    host = hosts.create_host(machine, chameleon_args=chameleon_args)
    bluetooth_test.enable_newblue(host=host, enable=newblue_enable)
    job.run_test('bluetooth_AdapterLESanity', host=host,
                  num_iterations=1)

parallel_simple(run, machines)
