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

# The test is to stress the better together test and measure the Mean
# Time Between Failures (MTBF).
#
#
# Purpose: Bluetooth adapter MTBF test

# Deprecated variables:
#     TIME = 'LONG'
#     TEST_CATEGORY = 'Functional'

from autotest_lib.server import utils

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


ATTRIBUTES = ''
MAX_RESULT_SIZE_KB = 512000
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_AdapterMTBF', host=host,
                 num_iterations=1, args_dict=args_dict,
                 test_name=NAME.split('.')[1])

parallel_simple(run, machines)
