#!/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 suite to check Multi Profile Functionality with Wlan. Test Setup: Two Android device. One A2DP and HFP Headset connected to Relay. """ from acts.test_utils.bt import BtEnum from acts.test_utils.bt.bt_test_utils import clear_bonded_devices from acts.test_utils.coex.CoexBaseTest import CoexBaseTest from acts.test_utils.coex.coex_test_utils import connect_ble from acts.test_utils.coex.coex_test_utils import initiate_disconnect_from_hf from acts.test_utils.coex.coex_test_utils import multithread_func from acts.test_utils.coex.coex_test_utils import music_play_and_check_via_app from acts.test_utils.coex.coex_test_utils import pair_and_connect_headset from acts.test_utils.coex.coex_test_utils import setup_tel_config class CoexBtMultiProfileFunctionalityTest(CoexBaseTest): def setup_class(self): super().setup_class() req_params = ["sim_conf_file", "music_play_time", "music_file"] self.unpack_userparams(req_params) self.ag_phone_number, self.re_phone_number = setup_tel_config( self.pri_ad, self.sec_ad, self.sim_conf_file) if hasattr(self, "music_file"): self.push_music_to_android_device(self.pri_ad) def setup_test(self): super().setup_test() self.audio_receiver.enter_pairing_mode() if not pair_and_connect_headset( self.pri_ad, self.audio_receiver.mac_address, set([BtEnum.BluetoothProfile.HEADSET.value]) and set([BtEnum.BluetoothProfile.A2DP.value])): self.log.error("Failed to pair and connect to headset") return False def teardown_test(self): clear_bonded_devices(self.pri_ad) super().teardown_test() self.audio_receiver.clean_up() def start_media_streaming_initiate_hfp_call_with_iperf(self): """Start media streaming and initiate call from hf to check SCO connection along with iperf. Returns: True if successful, False otherwise. """ self.run_iperf_and_get_result() if not music_play_and_check_via_app( self.pri_ad, self.audio_receiver.mac_address): self.log.error("Failed to stream music file") return False if not initiate_disconnect_from_hf( self.audio_receiver, self.pri_ad, self.sec_ad, self.iperf["duration"]): self.log.error("Failed to initiate/hang up call") return False return self.teardown_result() def ble_with_multiprofile_connection(self): """Wrapper function to check ble connection along with a2dp streaming and hfp call connection with iperf. """ if not connect_ble(self.pri_ad, self.sec_ad): self.log.error("Failed to connect BLE device") return False if not music_play_and_check_via_app( self.pri_ad, self.audio_receiver.mac_address): self.log.error("Failed to stream music file") return False tasks = [(self.run_iperf_and_get_result,()), (initiate_disconnect_from_hf, (self.audio_receiver, self.pri_ad, self.sec_ad, self.iperf["duration"]))] if not multithread_func(self.log, tasks): return False return self.teardown_result() def test_a2dp_streaming_hfp_call_with_tcp_ul(self): """Starts TCP-uplink traffic with media streaming and HFP call. This test is to start TCP-uplink traffic between host machine and android device and test the functional behaviour of media streaming via A2DP and initiating a call when media streaming is ongoing to check HFP. Steps: 1. Start TCP-uplink traffic. 1. Enable bluetooth. 2. Start media streaming to A2DP headset. 4. Initiate a call from headset. Returns: True if successful, False otherwise. Test Id: Bt_CoEx_066 """ if not self.start_media_streaming_initiate_hfp_call_with_iperf(): return False return True def test_a2dp_streaming_hfp_call_with_tcp_dl(self): """Starts TCP-downlink traffic with media streaming and HFP call. This test is to start TCP-downlink traffic between host machine and android device and test the functional behaviour of media streaming via A2DP and initiating a call when media streaming is ongoing to check HFP. Steps: 1. Start TCP-downlink traffic. 1. Enable bluetooth. 2. Start media streaming to A2DP headset. 4. Initiate a call from headset. Returns: True if successful, False otherwise. Test Id: Bt_CoEx_067 """ if not self.start_media_streaming_initiate_hfp_call_with_iperf(): return False return True def test_a2dp_streaming_hfp_call_with_udp_ul(self): """Starts UDP-uplink traffic with media streaming and HFP call. This test is to start UDP-uplink traffic between host machine and android device and test the functional behaviour of media streaming via A2DP and initiating a call when media streaming is ongoing to check HFP. Steps: 1. Start UDP-uplink traffic. 1. Enable bluetooth. 2. Start media streaming to A2DP headset. 4. Initiate a call from headset. Returns: True if successful, False otherwise. Test Id: Bt_CoEx_068 """ if not self.start_media_streaming_initiate_hfp_call_with_iperf(): return False return True def test_a2dp_streaming_hfp_call_with_udp_dl(self): """Starts UDP-downlink traffic with media streaming and HFP call. This test is to start UDP-uplink traffic between host machine and android device and test the functional behaviour of media streaming via A2DP and initiating a call when media streaming is ongoing to check HFP. Steps: 1. Start UDP-downlink traffic. 1. Enable bluetooth. 2. Start media streaming to A2DP headset. 4. Initiate a call from headset. Returns: True if successful, False otherwise. Test Id: Bt_CoEx_069 """ if not self.start_media_streaming_initiate_hfp_call_with_iperf(): return False return True def test_ble_connection_a2dp_streaming_hfp_call_with_tcp_ul(self): """Starts TCP-uplink traffic while connecting to BLE device, A2DP streaming and HFP call. This test is to start TCP-uplink traffic between host machine and android device and test the functional behaviour of BLE connection, media streaming via A2DP and HFP call connection. Steps: 1. Enable Bluetooth. 2. Connect to BLE device. 3. Start media streaming to A2DP headset. 4. Start TCP-uplink traffic. 5. Initiate HFP call. Returns: True if successful, False otherwise. Test Id: Bt_CoEx_082 """ if not self.ble_with_multiprofile_connection(): return False return True def test_ble_connection_a2dp_streaming_hfp_call_with_tcp_dl(self): """Starts TCP-downlink traffic while connecting to BLE device, A2DP streaming and HFP call. This test is to start TCP-downlink traffic between host machine and android device and test the functional behaviour of BLE connection, media streaming via A2DP and HFP call connection. Steps: 1. Enable Bluetooth. 2. Connect to BLE device. 3. Start media streaming to A2DP headset. 4. Start TCP-uplink traffic. 5. Initiate HFP call. Returns: True if successful, False otherwise. Test Id: Bt_CoEx_083. """ if not self.ble_with_multiprofile_connection(): return False return True