blob: 3b715378927eb474efb86af398da4c62fc7468bf [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.
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 connect_dev_to_headset
from acts_contrib.test_utils.coex.coex_test_utils import connect_wlan_profile
from acts_contrib.test_utils.coex.coex_test_utils import initiate_disconnect_from_hf
from acts_contrib.test_utils.coex.coex_test_utils import initiate_disconnect_call_dut
from acts_contrib.test_utils.coex.coex_test_utils import multithread_func
from acts_contrib.test_utils.coex.coex_test_utils import pair_and_connect_headset
from acts_contrib.test_utils.coex.coex_test_utils import perform_classic_discovery
from acts_contrib.test_utils.coex.coex_test_utils import toggle_screen_state
from acts_contrib.test_utils.coex.coex_test_utils import setup_tel_config
from acts_contrib.test_utils.coex.coex_test_utils import start_fping
from acts_contrib.test_utils.tel.tel_voice_utils import hangup_call
from acts_contrib.test_utils.tel.tel_voice_utils import initiate_call
BLUETOOTH_WAIT_TIME = 2
class WlanWithHfpFunctionalityTest(CoexBaseTest):
def setup_class(self):
super().setup_class()
req_params = ["sim_conf_file", "fping_drop_tolerance"]
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)
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])):
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 call_from_sec_ad_to_pri_ad(self):
"""Initiates the call from secondary device and accepts the call
from HF.
Steps:
1. Initiate call from secondary device to primary device.
2. Accept the call from HF.
3. Hangup the call from primary device.
Returns:
True if successful, False otherwise.
"""
if not initiate_call(self.log, self.sec_ad, self.ag_phone_number):
self.log.error("Failed to initiate call")
return False
if not self.audio_receiver.press_accept_call():
self.log.error("Failed to answer call from HF.")
return False
if not hangup_call(self.log, self.pri_ad):
self.log.error("Failed to hangup call.")
return False
return False
def connect_to_headset_when_turned_off_with_iperf(self):
"""Wrapper function to start iperf and test connection to headset
when it is turned off.
Returns:
True if successful, False otherwise.
"""
self.run_iperf_and_get_result()
self.audio_receiver.clean_up()
if not connect_dev_to_headset(
self.pri_ad, self.audio_receiver.mac_address,
set([BtEnum.BluetoothProfile.HEADSET.value])):
self.log.error("Failed to connect to headset.")
return True
return False
def check_headset_reconnection_with_iperf(self):
"""Wrapper function to start iperf and check behaviour of hfp
reconnection."""
self.run_iperf_and_get_result()
self.audio_receiver.clean_up()
self.audio_receiver.power_on()
if not self.pri_ad.droid.bluetoothIsDeviceConnected(
self.audio_receiver.mac_address):
self.log.error("Device not found in connected list")
return False
return self.teardown_result()
def initiate_call_from_hf_with_iperf(self):
"""Wrapper function to start iperf and initiate call"""
self.run_iperf_and_get_result()
if not initiate_disconnect_from_hf(self.audio_receiver, self.pri_ad,
self.sec_ad, self.iperf["duration"]):
return False
return self.teardown_result()
def initiate_call_from_hf_bt_discovery_with_iperf(self):
"""Wrapper function to start iperf, initiate call and perform classic
discovery.
"""
self.run_iperf_and_get_result()
tasks = [(initiate_disconnect_from_hf,
(self.audio_receiver, self.pri_ad, self.sec_ad,
self.iperf["duration"])),
(perform_classic_discovery,
(self.pri_ad, self.iperf["duration"], self.json_file,
self.dev_list))]
if not multithread_func(self.log, tasks):
return False
return self.teardown_result()
def initiate_call_associate_ap_with_iperf(self):
"""Wrapper function to initiate call from primary device and associate
with access point and start iperf traffic."""
args = [
lambda: initiate_disconnect_call_dut(self.pri_ad, self.sec_ad, self.iperf["duration"], self.re_phone_number)
]
self.run_thread(args)
if not connect_wlan_profile(self.pri_ad, self.network):
return False
self.run_iperf_and_get_result()
return self.teardown_result()
def test_hfp_call_with_tcp_ul(self):
"""Starts TCP-uplink traffic with hfp connection.
This test is to start TCP-uplink traffic between host machine and
android device and test the functional behaviour of hfp connection
and call.
Steps:.
1. Start TCP-uplink traffic.
2. Initiate call from HF and disconnect call from primary device.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_042
"""
if not self.initiate_call_from_hf_with_iperf():
return False
return True
def test_hfp_call_with_tcp_dl(self):
"""Starts TCP-downlink traffic with hfp connection.
This test is to start TCP-downlink traffic between host machine and
android device and test the functional behaviour of hfp connection
and call.
Steps:.
1. Start TCP-downlink traffic.
2. Initiate call from HF and disconnect call from primary device.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_043
"""
if not self.initiate_call_from_hf_with_iperf():
return False
return True
def test_hfp_call_with_udp_ul(self):
"""Starts UDP-uplink traffic with hfp connection.
This test is to start UDP-uplink traffic between host machine and
android device and test the functional behaviour of hfp connection
and call.
Steps:.
1. Start UDP-uplink traffic.
2. Initiate call from HF and disconnect call from primary device.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_044
"""
if not self.initiate_call_from_hf_with_iperf():
return False
return True
def test_hfp_call_with_udp_dl(self):
"""Starts UDP-downlink traffic with hfp connection.
This test is to start UDP-downlink traffic between host machine and
android device and test the functional behaviour of hfp connection
and call.
Steps:.
1. Start UDP-downlink traffic.
2. Initiate call from HF and disconnect call from primary device.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_045
"""
if not self.initiate_call_from_hf_with_iperf():
return False
return True
def test_hfp_call_bluetooth_discovery_with_tcp_ul(self):
"""Starts TCP-uplink traffic with hfp connection and bluetooth
discovery.
This test is to start TCP-uplink traffic between host machine and
android device and test the functional behaviour of hfp connection
and call and bluetooth discovery.
Steps:.
1. Start TCP-uplink traffic.
2. Initiate call from HF and disconnect call from primary device.
3. Start bluetooth discovery.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_046
"""
if not self.initiate_call_from_hf_bt_discovery_with_iperf():
return False
return True
def test_hfp_call_bluetooth_discovery_with_tcp_dl(self):
"""Starts TCP-downlink traffic with hfp connection and bluetooth
discovery.
This test is to start TCP-downlink traffic between host machine and
android device and test the functional behaviour of hfp connection
and call and bluetooth discovery.
Steps:.
1. Start TCP-downlink traffic.
2. Initiate call from HF and disconnect call from primary device.
3. Start bluetooth discovery.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_047
"""
if not self.initiate_call_from_hf_bt_discovery_with_iperf():
return False
return True
def test_hfp_call_bluetooth_discovery_with_udp_ul(self):
"""Starts UDP-uplink traffic with hfp connection and bluetooth
discovery.
This test is to start UDP-uplink traffic between host machine and
android device and test the functional behaviour of hfp connection
and call and bluetooth discovery.
Steps:.
1. Start UDP-uplink traffic.
2. Initiate call from HF and disconnect call from primary device.
3. Start bluetooth discovery.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_048
"""
if not self.initiate_call_from_hf_bt_discovery_with_iperf():
return False
return True
def test_hfp_call_bluetooth_discovery_with_udp_dl(self):
"""Starts UDP-downlink traffic with hfp connection and bluetooth
discovery.
This test is to start UDP-downlink traffic between host machine and
android device and test the functional behaviour of hfp connection
and call and bluetooth discovery.
Steps:.
1. Start UDP-downlink traffic.
2. Initiate call from HF and disconnect call from primary device.
3. Start bluetooth discovery.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_049
"""
if not self.initiate_call_from_hf_bt_discovery_with_iperf():
return False
return True
def test_hfp_call_and_associate_ap_with_tcp_ul(self):
"""Starts TCP-uplink traffic with hfp call.
This test is to start TCP-uplink traffic between host machine and
android device and test functional behaviour of hfp call connection
while associating with AP.
Steps:
1. Initiate call from HF and disconnect call from primary device.
2. Associate with AP.
3. Start TCP-uplink traffic.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_050
"""
if not self.initiate_call_associate_ap_with_iperf():
return False
return True
def test_hfp_call_and_associate_ap_with_tcp_dl(self):
"""Starts TCP-downlink traffic with hfp call.
This test is to start TCP-downlink traffic between host machine and
android device and test functional behaviour of hfp call connection
while associating with AP.
Steps:
1. Initiate call from HF and disconnect call from primary device.
2. Associate with AP.
3. Start TCP-downlink traffic.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_051
"""
if not self.initiate_call_associate_ap_with_iperf():
return False
return True
def test_hfp_call_and_associate_ap_with_udp_ul(self):
"""Starts UDP-uplink traffic with hfp call.
This test is to start UDP-uplink traffic between host machine and
android device and test functional behaviour of hfp call connection
while associating with AP.
Steps:
1. Initiate call from HF and disconnect call from primary device.
2. Associate with AP.
3. Start UDP-uplink traffic.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_052
"""
if not self.initiate_call_associate_ap_with_iperf():
return False
return True
def test_hfp_call_and_associate_ap_with_udp_dl(self):
"""Starts UDP-downlink traffic with hfp call.
This test is to start UDP-downlink traffic between host machine and
android device and test functional behaviour of hfp call connection
while associating with AP.
Steps:
1. Initiate call from HF and disconnect call from primary device.
2. Associate with AP.
3. Start UDP-downlink traffic.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_053
"""
if not self.initiate_call_associate_ap_with_iperf():
return False
return True
def test_hfp_redial_with_tcp_ul(self):
"""Starts TCP-uplink traffic with hfp connection.
This test is to start TCP-uplink traffic between host machine and
android device with hfp connection.
Steps:
1. Start TCP-uplink traffic.
2. Initiate call from HF(last dialed number) and disconnect call
from primary device.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_054
"""
if not self.initiate_call_from_hf_with_iperf():
return False
return True
def test_hfp_redial_with_tcp_dl(self):
"""Starts TCP-downlink traffic with hfp connection.
This test is to start TCP-downlink traffic between host machine and
android device with hfp connection.
Steps:
1. Start TCP-downlink traffic.
2. Initiate call from HF(last dialed number) and disconnect call
from primary device.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_055
"""
if not self.initiate_call_from_hf_with_iperf():
return False
return True
def test_hfp_redial_with_udp_ul(self):
"""Starts UDP-uplink traffic with hfp connection.
This test is to start UDP-uplink traffic between host machine and
android device with hfp connection.
Steps:
1. Start UDP-uplink traffic.
2. Initiate call from HF(last dialed number) and disconnect call
from primary device.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_056
"""
if not self.initiate_call_from_hf_with_iperf():
return False
return True
def test_hfp_redial_with_udp_dl(self):
"""Starts UDP-downlink traffic with hfp connection.
This test is to start TCP-downlink traffic between host machine and
android device with hfp connection.
Steps:
1. Start UDP-downlink traffic.
2. Initiate call from HF(last dialed number) and disconnect call
from primary device.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_057
"""
if not self.initiate_call_from_hf_with_iperf():
return False
return True
def test_hfp_reconnection_with_tcp_ul(self):
"""Starts TCP-uplink traffic with hfp reconnection.
This test is to start TCP-uplink traffic between host machine and
android device and test the functional behaviour of hfp reconnection.
Steps:.
1. Start TCP-uplink traffic.
2. Connect HF to DUT.
3. Disconnect HF from DUT.
4. Switch off the headset and turn ON HF to reconnect.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_062
"""
if not self.check_headset_reconnection_with_iperf():
return False
return True
def test_hfp_reconnection_with_tcp_dl(self):
"""Starts TCP-downlink traffic with hfp reconnection.
This test is to start TCP-downlink traffic between host machine and
android device and test the functional behaviour of hfp reconnection.
Steps:.
1. Start TCP-downlink traffic.
2. Connect HF to DUT.
3. Disconnect HF from DUT.
4. Switch off the headset and turn ON HF to reconnect.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_063
"""
if not self.check_headset_reconnection_with_iperf():
return False
return True
def test_hfp_reconnection_with_udp_ul(self):
"""Starts UDP-uplink traffic with hfp reconnection.
This test is to start UDP-uplink traffic between host machine and
android device and test the functional behaviour of hfp reconnection.
Steps:.
1. Start UDP-uplink traffic.
2. Connect HF to DUT.
3. Disconnect HF from DUT.
4. Switch off the headset and turn ON HF to reconnect.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_064
"""
if not self.check_headset_reconnection_with_iperf():
return False
return True
def test_hfp_reconnection_with_udp_dl(self):
"""Starts UDP-downlink traffic with hfp reconnection.
This test is to start UDP-downlink traffic between host machine and
android device and test the functional behaviour of hfp reconnection.
Steps:.
1. Start UDP-downlink traffic.
2. Connect HF to DUT.
3. Disconnect HF from DUT.
4. Switch off the headset and turn ON HF to reconnect.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_065
"""
if not self.check_headset_reconnection_with_iperf():
return False
return True
def test_hfp_connection_when_hf_turned_off_with_tcp_ul(self):
"""Starts TCP-uplink traffic with hfp connection.
This test is to start TCP-Uplink traffic between host machine and
android device and test the functional behaviour of hfp connection
when device is off.
Steps:
1. Start TCP-uplink traffic.
2. Make sure headset is turned off.
3. Initiate hfp connection to headset from DUT.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_072
"""
if not self.connect_to_headset_when_turned_off_with_iperf():
return False
return self.teardown_result()
def test_hfp_connection_when_hf_turned_off_with_tcp_dl(self):
"""Starts TCP-downlink traffic with hfp connection.
This test is to start TCP-downlink traffic between host machine and
android device and test the functional behaviour of hfp connection
when device is off.
Steps:
1. Start TCP-downlink traffic.
2. Make sure headset is turned off.
3. Initiate hfp connection to headset from DUT.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_073
"""
if not self.connect_to_headset_when_turned_off_with_iperf():
return False
return self.teardown_result()
def test_hfp_connection_when_hf_turned_off_with_udp_ul(self):
"""Starts UDP-uplink traffic with hfp connection.
This test is to start UDP-Uplink traffic between host machine and
android device and test the functional behaviour of hfp connection
when device is off.
Steps:
1. Start UDP-uplink traffic.
2. Make sure headset is turned off.
3. Initiate hfp connection to headset from DUT.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_074
"""
if not self.connect_to_headset_when_turned_off_with_iperf():
return False
return self.teardown_result()
def test_hfp_connection_when_hf_turned_off_with_udp_dl(self):
"""Starts UDP-downlink traffic with hfp connection.
This test is to start UDP-downlink traffic between host machine and
android device and test the functional behaviour of hfp connection
when device is off.
Steps:
1. Start UDP-downlink traffic.
2. Make sure headset is turned off.
3. Initiate hfp connection to headset from DUT.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_075
"""
if not self.connect_to_headset_when_turned_off_with_iperf():
return False
return self.teardown_result()
def test_hfp_call_with_fping(self):
"""Starts fping with hfp call connection.
This test is to start fping between host machine and android device
and test the functional behaviour of hfp call.
Steps:
1. Start fping from AP backend to android device.
1. Initiate call from headset to secondary device.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_078
"""
tasks = [(start_fping, (self.pri_ad, self.iperf["duration"],
self.fping_drop_tolerance)),
(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 True
def test_hfp_call_toggle_screen_state_with_fping(self):
"""Starts fping with hfp call connection.
This test is to start fping between host machine and android device
and test the functional behaviour of hfp call when toggling the
screen state.
Steps:
1. Start fping from AP backend.
1. Initiate call from primary device headset to secondary device.
Returns:
True if successful, False otherwise.
Test Id: Bt_CoEx_081
"""
tasks = [(start_fping, (self.pri_ad, self.iperf["duration"],
self.fping_drop_tolerance)),
(initiate_disconnect_from_hf,
(self.audio_receiver, self.pri_ad, self.sec_ad,
self.iperf["duration"])), (toggle_screen_state,
(self.pri_ad, self.iterations))]
if not multithread_func(self.log, tasks):
return False
return True