# Copyright 2017 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 advertisements_data


AUTHOR = 'rjahagir'
NAME = 'bluetooth_AdapterSuspendResume.stress_100'
PURPOSE = 'Test bluetooth adapter state with suspending and resuming DUT.'
CRITERIA = 'Adapter should power on or off with correct parameters.'
ATTRIBUTES = 'suite:bluetooth, suite:bluetooth_stress'
TIME = 'LONG' # This test takes approximately 30 mins on peach_pi.
TEST_CATEGORY = 'Functional'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth'

DOC = """
This test case verifies that the Bluetooth adapter of the DUT can
behave normally when subjected to suspending and resuming the DUT.

This autotest include the following test cases:
     self.test_case_adapter_on_SR()
     self.test_case_adapter_off_SR()
"""

args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)
    job.run_test('bluetooth_AdapterSuspendResume',
                 host=host,
                 num_iterations=100)

parallel_simple(run, machines)
