#!/usr/bin/env python3 # # Copyright (C) 2018 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. """ Test to check MultiProfile Stress with Wlan. Test Setup: One Android device. """ import time from acts_contrib.test_utils.bt import BtEnum from acts_contrib.test_utils.bt.bt_test_utils import clear_bonded_devices from acts_contrib.test_utils.coex.CoexBaseTest import CoexBaseTest from acts_contrib.test_utils.coex.coex_test_utils import disconnect_headset_from_dev from acts_contrib.test_utils.coex.coex_test_utils import pair_and_connect_headset class CoexBtMultiProfileStressTest(CoexBaseTest): def setup_class(self): super().setup_class() self.receiver = self.relay_devices[1] req_params = ["iterations"] self.unpack_userparams(req_params) def setup_test(self): super().setup_test() self.audio_receiver.enter_pairing_mode() self.receiver.setup() self.receiver.power_on() self.receiver.enter_pairing_mode() def teardown_test(self): clear_bonded_devices(self.pri_ad) super().teardown_test() self.audio_receiver.clean_up() self.receiver.clean_up() def initiate_classic_connection_to_multiple_devices(self): """Initiates multiple BR/EDR connections. Steps: 1. Initiate A2DP Connection. 2. Initiate HFP Connection. 3. Disconnect A2DP Connection. 4. Disconnect HFP Connection. 5. Repeat step 1 to 4. Returns: True if successful, False otherwise. """ for i in range(self.iterations): if not pair_and_connect_headset( self.pri_ad, self.receiver.mac_address, {BtEnum.BluetoothProfile.A2DP.value}): self.log.error("Failed to connect A2DP Profile.") return False time.sleep(2) if not pair_and_connect_headset( self.pri_ad, self.audio_receiver.mac_address, {BtEnum.BluetoothProfile.HEADSET.value}): self.log.error("Failed to connect HEADSET profile.") return False time.sleep(2) if not disconnect_headset_from_dev( self.pri_ad, self.receiver.mac_address, [BtEnum.BluetoothProfile.A2DP.value]): self.log.error("Could not disconnect {}".format( self.receiver.mac_address)) return False if not disconnect_headset_from_dev( self.pri_ad, self.audio_receiver.mac_address, [BtEnum.BluetoothProfile.HEADSET.value]): self.log.error("Could not disconnect {}".format( self.audio_receiver.mac_address)) return False return True def initiate_classic_connection_with_iperf(self): """Wrapper function to initiate bluetooth classic connection to multiple devices. """ self.run_iperf_and_get_result() if not self.initiate_classic_connection_to_multiple_devices(): return False return self.teardown_result() def test_stress_multiple_connection_with_tcp_ul(self): """ Connects multiple headsets with wlan traffic over TCP-uplink. This test is to perform connect and disconnect with A2DP and HFP profiles on two different bluetooth devices. Steps: 1. Run wlan traffic over TCP-uplink. 2. Initiate connect and disconnect to multiple profiles from primary device. Returns: True if successful, False otherwise. Test Id: Bt_CoEx_Stress_037 """ if not self.initiate_classic_connection_with_iperf(): return False return True def test_stress_multiple_connection_with_tcp_dl(self): """ Connects multiple headsets with wlan traffic over TCP-downlink. This test is to perform connect and disconnect with A2DP and HFP profiles on two different bluetooth devices. Steps: 1. Run wlan traffic over TCP-downlink. 2. Initiate connect and disconnect to multiple profiles from primary device. Returns: True if successful, False otherwise. Test Id: Bt_CoEx_Stress_038 """ if not self.initiate_classic_connection_with_iperf(): return False return True def test_stress_multiple_connection_with_udp_ul(self): """ Connects multiple headsets with wlan traffic over UDP-uplink. This test is to perform connect and disconnect with A2DP and HFP profiles on two different bluetooth devices. Steps: 1. Run wlan traffic over UDP-uplink. 2. Initiate connect and disconnect to multiple profiles from primary device. Returns: True if successful, False otherwise. Test Id: Bt_CoEx_Stress_039 """ if not self.initiate_classic_connection_with_iperf(): return False return True def test_stress_multiple_connection_with_udp_dl(self): """ Connects multiple headsets with wlan traffic over UDP-downlink. This test is to perform connect and disconnect with A2DP and HFP profiles. Steps: 1. Run wlan traffic over UDP-downlink. 2. Initiate connect and disconnect to multiple profiles from primary device. Returns: True if successful, False otherwise. Test Id: Bt_CoEx_Stress_040 """ if not self.initiate_classic_connection_with_iperf(): return False return True