#/usr/bin/env python3.4
#
# Copyright (C) 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
"""
Basic Bluetooth Classic stress tests.
"""
import time
from acts.base_test import BaseTestClass
from acts.test_utils.bt.bt_test_utils import log_energy_info
from acts.test_utils.bt.bt_test_utils import pair_pri_to_sec
from acts.test_utils.bt.bt_test_utils import reset_bluetooth
from acts.test_utils.bt.bt_test_utils import setup_multiple_devices_for_bt_test
class BtStressTest(BaseTestClass):
default_timeout = 10
def __init__(self, controllers):
BaseTestClass.__init__(self, controllers)
def setup_class(self):
return setup_multiple_devices_for_bt_test(self.android_devices)
def setup_test(self):
return reset_bluetooth(self.android_devices)
def setup_test(self):
setup_result = reset_bluetooth(self.android_devices)
self.log.debug(log_energy_info(self.android_devices, "Start"))
for a in self.android_devices:
a.ed.clear_all_events()
return setup_result
def teardown_test(self):
self.log.debug(log_energy_info(self.android_devices, "End"))
return True
def test_toggle_bluetooth(self):
"""Stress test toggling bluetooth on and off.
Test the integrity of toggling bluetooth on and off.
Steps:
1. Toggle bluetooth off.
2. Toggle bluetooth on.
3. Repeat steps 1 and 2 one-hundred times.
Expected Result:
Each iteration of toggling bluetooth on and off should not cause an
exception.
Returns:
Pass if True
Fail if False
TAGS: Classic, Stress
Priority: 1
"""
test_result = True
test_result_list = []
for n in range(100):
self.log.info("Toggling bluetooth iteration {}.".format(n + 1))
test_result = reset_bluetooth([self.android_devices[0]])
test_result_list.append(test_result)
if not test_result:
self.log.debug("Failure to reset Bluetooth... continuing")
self.log.info("Toggling Bluetooth failed {}/100 times".format(len(
test_result_list)))
if False in test_result_list:
return False
return test_result
def test_pair_bluetooth_stress(self):
"""Stress test for pairing BT devices.
Test the integrity of Bluetooth pairing.
Steps:
1. Pair two Android devices
2. Verify both devices are paired
3. Unpair devices.
4. Verify devices unpaired.
5. Repeat steps 1-4 100 times.
Expected Result:
Each iteration of toggling Bluetooth pairing and unpairing
should succeed.
Returns:
Pass if True
Fail if False
TAGS: Classic, Stress
Priority: 1
"""
for n in range(100):
self.log.info("Pair bluetooth iteration {}.".format(n + 1))
if (pair_pri_to_sec(self.android_devices[0].droid,
self.android_devices[1].droid) == False):
self.log.error("Failed to bond devices.")
return False
for ad in self.android_devices:
bonded_devices = ad.droid.bluetoothGetBondedDevices()
for b in bonded_devices:
ad.droid.bluetoothUnbond(b['address'])
#Necessary sleep time for entries to update unbonded state
time.sleep(1)
bonded_devices = ad.droid.bluetoothGetBondedDevices()
if len(bonded_devices) > 0:
self.log.error("Failed to unbond devices: {}".format(
bonded_devices))
return False
return True