# Copyright 2020 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

AUTHOR = 'chromeos-bluetooth'
NAME = 'bluetooth_AdapterAdvMonitor.advmon_suspend_resume_tests'
PURPOSE = ('batch of Bluetooth Advertisement Monitor tests')
CRITERIA = 'All tests should pass'
TIME = 'MEDIUM'
TEST_CATEGORY = 'Functional'
# TODO: Remove ['Quick Health'] from AdapterAdvMonitor when moving to stable.
ATTRIBUTES = 'suite:bluetooth_flaky'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth, working_bluetooth_btpeer:2'
PY_VERSION = 3

DOC = """ Tests monitor functionality with suspend/resume. """

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])

parallel_simple(run, machines)
