blob: 53dc7fa8cd4a0bbaead3edd7526f487852905754 [file] [log] [blame]
#!/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