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

# Tests minimum supported condition and device count.

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterAdvMonitor.advmon_condition_device_count_tests.floss'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Pass the tests for the minimum supported condition and device count',
    'hw_agnostic': False,
    'requirements': ['bt-hciExt-0006-v01', 'bt-hciExt-0007-v01',
                     'bt-hciExt-0008-v01', 'bt-hciExt-0009-v01',
                     'bt-hciExt-0010-v01']
}
ATTRIBUTES = 'suite:bluetooth_floss'
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth_state:NORMAL, working_bluetooth_btpeer:1'

args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)
    job.run_test('bluetooth_AdapterAdvMonitor',
                 host=host,
                 num_iterations=1,
                 args_dict=args_dict,
                 test_name=NAME.split('.')[1], tag='.'.join(NAME.split('.')[1:]), floss=True)

parallel_simple(run, machines)
