# Copyright 2019 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# The AVL test run a subset of tests in quick health.
# Tests included here should be very robust and stable.
#
# Purpose: Package of Bluetooth quick health tests

# Deprecated variables:
#     TIME = 'LONG' # Takes ~1 hour on kukui
#     TEST_CATEGORY = 'Functional'

from autotest_lib.server import utils
from autotest_lib.server.cros.connectivity_common.connectivity_test_version_control import test_version_setup

NAME = 'bluetooth_AdapterQuickHealth.AVL'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Pass all health test',
    'hw_agnostic': False,
    'life_cycle_stage': 'owner_monitored',
}


ATTRIBUTES = ''
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth_state:NORMAL, working_bluetooth_btpeer:2'


args_dict = utils.args_to_dict(args)

def run(machine):
    if not test_version_setup('bluetooth', args_dict):
        return

    host = hosts.create_host(machine)
    job.run_test('bluetooth_AdapterQuickHealth', host=host,
                 num_iterations=1, args_dict=args_dict,
                 tag='.'.join(NAME.split('.')[1:]),
                 flag='AVL')

parallel_simple(run, machines)
