Merge "Added 5G SA components to ACTS"
diff --git a/acts_tests/acts_contrib/test_utils/tel/tel_5g_utils.py b/acts_tests/acts_contrib/test_utils/tel/tel_5g_utils.py
index d5d6f76..a9d5af7 100644
--- a/acts_tests/acts_contrib/test_utils/tel/tel_5g_utils.py
+++ b/acts_tests/acts_contrib/test_utils/tel/tel_5g_utils.py
@@ -21,6 +21,7 @@
from queue import Empty
from acts.utils import rand_ascii_str
from acts_contrib.test_utils.tel.tel_defines import NETWORK_MODE_NR_LTE_GSM_WCDMA
+from acts_contrib.test_utils.tel.tel_defines import NETWORK_MODE_NR_ONLY
from acts_contrib.test_utils.tel.tel_defines import OverrideNetworkContainer
from acts_contrib.test_utils.tel.tel_defines import DisplayInfoContainer
from acts_contrib.test_utils.tel.tel_defines import EventDisplayInfoChanged
@@ -66,28 +67,59 @@
return None
-def provision_device_for_5g(log, ad):
- # Mode Pref
- set_preferred_mode_for_5g(ad)
+def provision_device_for_5g(log, ads, sa_5g=False):
+ """Provision Devices for 5G
- # Attach nsa5g
- if not is_current_network_5g_nsa(ad):
- ad.log.error("Phone not attached on nsa 5g")
- return False
+ Args:
+ log: Log object.
+ ads: android device object(s).
+ sa_5g: Check for provision on sa_5G or not
+
+ Returns:
+ True: Device(s) are provisioned on 5G
+ False: Device(s) are not provisioned on 5G
+ """
+ if sa_5g:
+ if not provision_device_for_5g_sa(log, ads):
+ return False
+ else:
+ if not provision_device_for_5g_nsa(log, ads):
+ return False
return True
-def provision_both_devices_for_5g(log, ads):
- # Mode Pref
- tasks = [(set_preferred_mode_for_5g, [ad]) for ad in ads]
- if not multithread_func(log, tasks):
- log.error("failed to set preferred network mode on 5g")
- return False
- # Attach
- tasks = [(is_current_network_5g_nsa, [ad]) for ad in ads]
- if not multithread_func(log, tasks):
- log.error("phone not on 5g nsa")
- return False
- return True
+
+def provision_device_for_5g_nsa(log, ads):
+ """Provision Devices for 5G NSA
+
+ Args:
+ log: Log object.
+ ads: android device object(s).
+
+ Returns:
+ True: Device(s) are provisioned on 5G NSA
+ False: Device(s) are not provisioned on 5G NSA
+ """
+ if isinstance(ads, list):
+ # Mode Pref
+ tasks = [(set_preferred_mode_for_5g, [ad]) for ad in ads]
+ if not multithread_func(log, tasks):
+ log.error("failed to set preferred network mode on 5g")
+ return False
+ # Attach
+ tasks = [(is_current_network_5g_nsa, [ad]) for ad in ads]
+ if not multithread_func(log, tasks):
+ log.error("phone not on 5g nsa")
+ return False
+ return True
+ else:
+ # Mode Pref
+ set_preferred_mode_for_5g(ads)
+
+ # Attach nsa5g
+ if not is_current_network_5g_nsa(ads):
+ ads.log.error("Phone not attached on nsa 5g")
+ return False
+ return True
def provision_both_devices_for_volte(log, ads):
@@ -109,15 +141,6 @@
return True
-def verify_5g_attach_for_both_devices(log, ads):
- # Attach
- tasks = [(is_current_network_5g_nsa, [ad]) for ad in ads]
- if not multithread_func(log, tasks):
- log.error("phone not on 5g nsa")
- return False
- return True
-
-
def provision_both_devices_for_wfc_cell_pref(log,
ads,
wifi_ssid,
@@ -175,6 +198,34 @@
return True
+def verify_5g_attach_for_both_devices(log, ads, sa_5g=False):
+ """Verify the network is attached
+
+ Args:
+ log: Log object.
+ ads: android device object(s).
+ sa_5g: Check for verify data network type is on 5G SA or not
+
+ Returns:
+ True: Device(s) are attached on 5G
+ False: Device(s) are not attached on 5G NSA
+ """
+ if sa_5g:
+ # Attach
+ tasks = [(is_current_network_5g_sa, [ad]) for ad in ads]
+ if not multithread_func(log, tasks):
+ log.error("phone not on 5g sa")
+ return False
+ return True
+ else:
+ # Attach
+ tasks = [(is_current_network_5g_nsa, [ad]) for ad in ads]
+ if not multithread_func(log, tasks):
+ log.error("phone not on 5g nsa")
+ return False
+ return True
+
+
def set_preferred_mode_for_5g(ad, sub_id=None, mode=None):
"""Set Preferred Network Mode for 5G NSA
Args:
@@ -189,5 +240,75 @@
return set_preferred_network_mode_pref(ad.log, ad, sub_id, mode)
+def is_current_network_5g_sa(ad):
+ """Verifies 5G SA override network type
+ Args:
+ ad: android device object.
+
+ Returns:
+ True: if data is on 5g SA
+ False: if data is not on 5g SA
+ """
+ network_connected = ad.droid.telephonyGetCurrentDataNetworkType()
+ if network_connected == 'NR':
+ ad.log.debug("Network is currently connected to %s", network_connected)
+ return True
+ else:
+ ad.log.error("Network is currently connected to %s, Expected on NR", network_connected)
+ return False
+
+
+def provision_device_for_5g_sa(log, ads):
+ """Provision Devices for 5G SA
+
+ Args:
+ log: Log object.
+ ads: android device object(s).
+
+ Returns:
+ True: Device(s) are provisioned on 5G SA
+ False: Device(s) are not provisioned on 5G SA
+ """
+ if isinstance(ads, list):
+ # Mode Pref
+ tasks = [(set_preferred_mode_for_5g, [ad, None, NETWORK_MODE_NR_ONLY]) for ad in ads]
+ if not multithread_func(log, tasks):
+ log.error("failed to set preferred network mode on 5g SA")
+ return False
+
+ tasks = [(is_current_network_5g_sa, [ad]) for ad in ads]
+ if not multithread_func(log, tasks):
+ log.error("phone not on 5g SA")
+ return False
+ return True
+ else:
+ # Mode Pref
+ set_preferred_mode_for_5g(ads, None, NETWORK_MODE_NR_ONLY)
+
+ if not is_current_network_5g_sa(ads):
+ ads.log.error("Phone not attached on SA 5g")
+ return False
+ return True
+
+
+def check_current_network_5g(ad, timeout=30, sa_5g=False):
+ """Verifies data network type is on 5G
+
+ Args:
+ ad: android device object.
+ timeout: max time to wait for event
+ sa_5g: Check for verify data network type is on 5G SA or not
+
+ Returns:
+ True: if data is on 5g
+ False: if data is not on 5g
+ """
+ if sa_5g:
+ if not is_current_network_5g_sa(ad):
+ return False
+ else:
+ if not is_current_network_5g_nsa(ad, timeout):
+ return False
+ return True
diff --git a/acts_tests/acts_contrib/test_utils/tel/tel_data_utils.py b/acts_tests/acts_contrib/test_utils/tel/tel_data_utils.py
index 9210d39..53d191e 100644
--- a/acts_tests/acts_contrib/test_utils/tel/tel_data_utils.py
+++ b/acts_tests/acts_contrib/test_utils/tel/tel_data_utils.py
@@ -93,8 +93,8 @@
from acts_contrib.test_utils.tel.tel_test_utils import ensure_phones_default_state
from acts_contrib.test_utils.tel.tel_test_utils import WIFI_SSID_KEY
from acts_contrib.test_utils.tel.tel_test_utils import is_phone_in_call_active
+from acts_contrib.test_utils.tel.tel_5g_utils import check_current_network_5g
from acts_contrib.test_utils.tel.tel_5g_utils import is_current_network_5g_nsa
-from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_5g
from acts_contrib.test_utils.tel.tel_5g_utils import provision_device_for_5g
from acts_contrib.test_utils.tel.tel_5g_utils import verify_5g_attach_for_both_devices
from acts_contrib.test_utils.tel.tel_voice_utils import phone_setup_voice_general
@@ -287,7 +287,7 @@
return False
-def wifi_cell_switching(log, ad, nw_gen, wifi_network_ssid=None, wifi_network_pass=None):
+def wifi_cell_switching(log, ad, nw_gen, wifi_network_ssid=None, wifi_network_pass=None, sa_5g=False):
"""Test data connection network switching when phone on <nw_gen>.
Ensure phone is on <nw_gen>
@@ -309,7 +309,7 @@
"""
try:
if nw_gen == GEN_5G:
- if not provision_device_for_5g(log, ad):
+ if not provision_device_for_5g(log, ad, sa_5g):
return False
elif nw_gen:
if not ensure_network_generation_for_subscription(
@@ -443,7 +443,7 @@
toggle_airplane_mode(log, ad, False)
-def data_connectivity_single_bearer(log, ad, nw_gen=None):
+def data_connectivity_single_bearer(log, ad, nw_gen=None, sa_5g=False):
"""Test data connection: single-bearer (no voice).
Turn off airplane mode, enable Cellular Data.
@@ -467,7 +467,7 @@
wait_time = 2 * wait_time
if nw_gen == GEN_5G:
- if not provision_device_for_5g(log, ad):
+ if not provision_device_for_5g(log, ad, sa_5g):
return False
elif nw_gen:
if not ensure_network_generation_for_subscription(
@@ -512,7 +512,7 @@
return False
if nw_gen == GEN_5G:
- if not is_current_network_5g_nsa(ad):
+ if not check_current_network_5g(ad, sa_5g):
return False
else:
if not is_droid_in_network_generation_for_subscription(
@@ -834,7 +834,8 @@
android_devices,
nw_gen=None,
simultaneous_voice_data=True,
- call_direction=DIRECTION_MOBILE_ORIGINATED):
+ call_direction=DIRECTION_MOBILE_ORIGINATED,
+ sa_5g=False):
"""Test data connection before call and in call.
Turn off airplane mode, disable WiFi, enable Cellular Data.
@@ -860,7 +861,7 @@
ensure_phones_idle(log, ad_list)
if nw_gen == GEN_5G:
- if not provision_both_devices_for_5g(log, android_devices):
+ if not provision_device_for_5g(log, android_devices, sa_5g):
return False
elif nw_gen:
if not ensure_network_generation_for_subscription(
@@ -994,7 +995,7 @@
return True
-def test_setup_tethering(log, provider, clients, network_generation=None):
+def test_setup_tethering(log, provider, clients, network_generation=None, sa_5g=False):
"""Pre setup steps for WiFi tethering test.
Ensure all ads are idle.
@@ -1011,7 +1012,7 @@
ensure_phones_idle(log, clients)
wifi_toggle_state(log, provider, False)
if network_generation == RAT_5G:
- if not provision_device_for_5g(log, provider):
+ if not provision_device_for_5g(log, provider, sa_5g):
return False
elif network_generation:
if not ensure_network_generation(
@@ -1225,7 +1226,8 @@
def test_tethering_wifi_and_voice_call(log, provider, clients,
provider_data_rat,
provider_setup_func,
- provider_in_call_check_func):
+ provider_in_call_check_func,
+ sa_5g=False):
if not test_setup_tethering(log, provider, clients, provider_data_rat):
log.error("Verify 4G Internet access failed.")
@@ -1238,7 +1240,7 @@
return False
if provider_setup_func == RAT_5G:
- if not provision_device_for_5g(log, provider):
+ if not provision_device_for_5g(log, provider, sa_5g):
return False
try:
log.info("1. Setup WiFi Tethering.")
@@ -1349,7 +1351,8 @@
ads,
nw_gen=None,
call_direction=DIRECTION_MOBILE_ORIGINATED,
- allow_data_transfer_interruption=False):
+ allow_data_transfer_interruption=False,
+ sa_5g=False):
"""Test call can be established during active data connection.
Turn off airplane mode, disable WiFi, enable Cellular Data.
@@ -1382,10 +1385,8 @@
wait_time_in_call)
if nw_gen == GEN_5G:
- if not provision_device_for_5g(log, ads[0]):
- ads[0].log.error("Phone not attached on 5G NSA before call.")
+ if not provision_device_for_5g(log, ads[0], sa_5g):
return False
-
elif nw_gen:
if not ensure_network_generation(log, ads[0], nw_gen,
MAX_WAIT_TIME_NW_SELECTION,
@@ -1439,8 +1440,8 @@
return False
# Disable airplane mode if test under apm on.
toggle_airplane_mode(log, ads[0], False)
- if nw_gen == GEN_5G and not is_current_network_5g_nsa(ads[0]):
- ads[0].log.error("Phone not attached on 5G NSA after call.")
+ if nw_gen == GEN_5G and not check_current_network_5g(ads[0], sa_5g):
+ ads[0].log.error("Phone not attached on 5G after call.")
return False
return True
@@ -1450,7 +1451,8 @@
ads,
nw_gen=None,
call_direction=DIRECTION_MOBILE_ORIGINATED,
- allow_data_transfer_interruption=False):
+ allow_data_transfer_interruption=False,
+ sa_5g=False):
"""Test call can be established during active data connection.
Turn off airplane mode, disable WiFi, enable Cellular Data.
@@ -1469,10 +1471,8 @@
False if failed.
"""
if nw_gen == GEN_5G:
- if not provision_device_for_5g(log, ads[0]):
- ads[0].log.error("Phone not attached on 5G NSA before call.")
+ if not provision_device_for_5g(log, ads[0], sa_5g):
return False
-
elif nw_gen:
if not ensure_network_generation(log, ads[0], nw_gen,
MAX_WAIT_TIME_NW_SELECTION,
@@ -1518,8 +1518,8 @@
ad_download.force_stop_apk("com.google.android.youtube")
# Disable airplane mode if test under apm on.
toggle_airplane_mode(log, ads[0], False)
- if nw_gen == GEN_5G and not is_current_network_5g_nsa(ads[0]):
- ads[0].log.error("Phone not attached on 5G NSA after call.")
+ if nw_gen == GEN_5G and not check_current_network_5g(ads[0], sa_5g):
+ ads[0].log.error("Phone not attached on 5G after call.")
result = False
return result
@@ -1530,7 +1530,8 @@
wfc_mode,
wifi_ssid,
wifi_pwd,
- nw_gen=None):
+ nw_gen=None,
+ sa_5g=False):
""" Test epdg<->epdg call functionality.
Make Sure PhoneA is set to make epdg call.
@@ -1564,8 +1565,7 @@
if not multithread_func(log, tasks):
log.error("Failed to turn off airplane mode")
return False
- if not provision_both_devices_for_5g(log, ads):
- log.error("Phone not attached on 5G NSA before epdg call.")
+ if not provision_device_for_5g(log, ad, sa_5g):
return False
tasks = [(phone_setup_iwlan, (log, ads[0], apm_mode, wfc_mode,
@@ -1588,8 +1588,8 @@
time.sleep(WAIT_TIME_ANDROID_STATE_SETTLING)
- if nw_gen == GEN_5G and not verify_5g_attach_for_both_devices(log, ads):
- log.error("Phone not attached on 5G NSA after epdg call.")
+ if nw_gen == GEN_5G and not verify_5g_attach_for_both_devices(log, ads, sa_5g):
+ log.error("Phone not attached on 5G after epdg call.")
return False
if not results[1]:
diff --git a/acts_tests/tests/google/nr/nsa5g/Nsa5gImsSettingsTest.py b/acts_tests/tests/google/nr/nsa5g/Nsa5gImsSettingsTest.py
index 6b38879..33d0c76 100644
--- a/acts_tests/tests/google/nr/nsa5g/Nsa5gImsSettingsTest.py
+++ b/acts_tests/tests/google/nr/nsa5g/Nsa5gImsSettingsTest.py
@@ -34,7 +34,6 @@
from acts_contrib.test_utils.tel.tel_voice_utils import phone_setup_csfb
from acts_contrib.test_utils.tel.tel_voice_utils import phone_setup_volte
from acts_contrib.test_utils.tel.tel_5g_utils import is_current_network_5g_nsa
-from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_5g
from acts_contrib.test_utils.tel.tel_5g_utils import provision_device_for_5g
from acts_contrib.test_utils.tel.tel_5g_utils import set_preferred_mode_for_5g
from acts_contrib.test_utils.tel.tel_ims_utils import change_ims_setting
@@ -223,7 +222,7 @@
return False
ads = self.android_devices
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not change_ims_setting(log=self.log,
diff --git a/acts_tests/tests/google/nr/nsa5g/Nsa5gMmsTest.py b/acts_tests/tests/google/nr/nsa5g/Nsa5gMmsTest.py
index 2d812e3..4eded92 100755
--- a/acts_tests/tests/google/nr/nsa5g/Nsa5gMmsTest.py
+++ b/acts_tests/tests/google/nr/nsa5g/Nsa5gMmsTest.py
@@ -31,7 +31,7 @@
from acts_contrib.test_utils.tel.tel_voice_utils import is_phone_in_call_csfb
from acts_contrib.test_utils.tel.tel_5g_utils import connect_both_devices_to_wifi
from acts_contrib.test_utils.tel.tel_5g_utils import disable_apm_mode_both_devices
-from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_5g
+from acts_contrib.test_utils.tel.tel_5g_utils import provision_device_for_5g
from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_volte
from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_wfc_cell_pref
from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_wfc_wifi_pref
@@ -42,6 +42,7 @@
from acts_contrib.test_utils.tel.tel_mms_utils import _long_mms_test_mo
from acts_contrib.test_utils.tel.tel_mms_utils import test_mms_mo_in_call
+
class Nsa5gMmsTest(TelephonyBaseTest):
def setup_class(self):
super().setup_class()
@@ -85,7 +86,7 @@
False if failed.
"""
ads = self.android_devices
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not _mms_test_mo(self.log, ads):
@@ -117,7 +118,7 @@
if not provision_both_devices_for_volte(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not _mms_test_mo(self.log, ads):
@@ -148,7 +149,7 @@
if not provision_both_devices_for_volte(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
self.log.info("Begin Incall mms test.")
@@ -189,7 +190,7 @@
if not disable_apm_mode_both_devices(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not provision_both_devices_for_wfc_cell_pref(self.log,
@@ -226,7 +227,7 @@
if not disable_apm_mode_both_devices(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not provision_both_devices_for_wfc_wifi_pref(self.log,
@@ -267,7 +268,7 @@
if not disable_apm_mode_both_devices(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not provision_both_devices_for_wfc_wifi_pref(self.log,
@@ -309,7 +310,7 @@
if not provision_both_devices_for_volte(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not connect_both_devices_to_wifi(self.log,
@@ -355,7 +356,7 @@
if not disable_apm_mode_both_devices(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
return _long_mms_test_mo(self.log, ads)
@@ -381,7 +382,7 @@
if not disable_apm_mode_both_devices(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
ensure_wifi_connected(self.log, ads[0], self.wifi_network_ssid,
@@ -410,7 +411,7 @@
if not disable_apm_mode_both_devices(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
ensure_wifi_connected(self.log, ads[0], self.wifi_network_ssid,
@@ -419,6 +420,7 @@
return _mms_test_mt(self.log, ads)
+ @test_tracker_info(uuid="156bf832-acc2-4729-a69d-b471cd5cfbde")
@TelephonyBaseTest.tel_test_wrap
def test_5g_nsa_mms_mo_mt_in_call_csfb_wifi(self):
""" Test MO/MT MMS during a MO csfb call and devices connect to Wifi.
diff --git a/acts_tests/tests/google/nr/nsa5g/Nsa5gSmsTest.py b/acts_tests/tests/google/nr/nsa5g/Nsa5gSmsTest.py
index 3620c96..ffa4c6e 100755
--- a/acts_tests/tests/google/nr/nsa5g/Nsa5gSmsTest.py
+++ b/acts_tests/tests/google/nr/nsa5g/Nsa5gSmsTest.py
@@ -28,7 +28,7 @@
from acts_contrib.test_utils.tel.tel_voice_utils import is_phone_in_call_volte
from acts_contrib.test_utils.tel.tel_voice_utils import is_phone_in_call_csfb
from acts_contrib.test_utils.tel.tel_5g_utils import disable_apm_mode_both_devices
-from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_5g
+from acts_contrib.test_utils.tel.tel_5g_utils import provision_device_for_5g
from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_volte
from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_wfc_cell_pref
from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_wfc_wifi_pref
@@ -67,7 +67,7 @@
False if failed.
"""
ads = self.android_devices
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not _sms_test_mo(self.log, ads):
@@ -99,7 +99,7 @@
if not provision_both_devices_for_volte(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not _sms_test_mo(self.log, ads):
@@ -135,7 +135,7 @@
return False
time.sleep(WAIT_TIME_ANDROID_STATE_SETTLING)
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not test_sms_mo_in_call(self.log,
@@ -167,7 +167,7 @@
if not disable_apm_mode_both_devices(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not provision_both_devices_for_wfc_cell_pref(self.log,
@@ -204,7 +204,7 @@
if not disable_apm_mode_both_devices(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not provision_both_devices_for_wfc_wifi_pref(self.log,
@@ -245,7 +245,7 @@
if not disable_apm_mode_both_devices(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not provision_both_devices_for_wfc_wifi_pref(self.log,
@@ -280,12 +280,13 @@
if not disable_apm_mode_both_devices(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
return _long_sms_test_mo(self.log, ads)
+ @test_tracker_info(uuid="45dbd61a-6a90-473e-9cfa-03e2408d5f15")
@TelephonyBaseTest.tel_test_wrap
def test_5g_nsa_sms_mo_mt_in_call_csfb(self):
""" Test MO/MT SMS during a MO csfb call over 5G NSA.
diff --git a/acts_tests/tests/google/nr/nsa5g/Nsa5gVoiceTest.py b/acts_tests/tests/google/nr/nsa5g/Nsa5gVoiceTest.py
index 4b924a8..df07120 100755
--- a/acts_tests/tests/google/nr/nsa5g/Nsa5gVoiceTest.py
+++ b/acts_tests/tests/google/nr/nsa5g/Nsa5gVoiceTest.py
@@ -64,7 +64,6 @@
from acts_contrib.test_utils.tel.tel_voice_utils import two_phone_call_long_seq
from acts_contrib.test_utils.tel.tel_voice_utils import two_phone_call_short_seq
from acts_contrib.test_utils.tel.tel_5g_utils import is_current_network_5g_nsa
-from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_5g
from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_volte
from acts_contrib.test_utils.tel.tel_5g_utils import provision_device_for_5g
from acts_contrib.test_utils.tel.tel_5g_utils import set_preferred_mode_for_5g
@@ -115,7 +114,7 @@
if not provision_both_devices_for_volte(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
# VoLTE calls
@@ -196,7 +195,7 @@
if not provision_both_devices_for_volte(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not phone_setup_call_hold_unhold_test(self.log,
@@ -228,7 +227,7 @@
if not provision_both_devices_for_volte(self.log, ads):
return False
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not phone_setup_call_hold_unhold_test(self.log,
@@ -322,7 +321,7 @@
time.sleep(WAIT_TIME_ANDROID_STATE_SETTLING)
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
if not verify_5g_attach_for_both_devices(self.log, ads):
@@ -923,7 +922,7 @@
data_usage = get_mobile_data_usage(ads[0], subscriber_id)
set_mobile_data_usage_limit(ads[0], data_usage, subscriber_id)
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
self.log.error("Phone Failed to Set Up Properly.")
self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
raise signals.TestFailure("Failed",
@@ -960,7 +959,7 @@
ads = self.android_devices
result = True
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
self.log.error("Phone Failed to Set Up Properly.")
self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
raise signals.TestFailure("Failed",
@@ -1175,7 +1174,7 @@
ads = self.android_devices
- if not provision_both_devices_for_5g(self.log, ads):
+ if not provision_device_for_5g(self.log, ads):
return False
tasks = [(phone_setup_iwlan,
(self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
diff --git a/acts_tests/tests/google/nr/sa5g/Sa5gDataTest.py b/acts_tests/tests/google/nr/sa5g/Sa5gDataTest.py
new file mode 100755
index 0000000..825fdd1
--- /dev/null
+++ b/acts_tests/tests/google/nr/sa5g/Sa5gDataTest.py
@@ -0,0 +1,238 @@
+#!/usr/bin/env python3.4
+#
+# Copyright 2021 - Google
+#
+# 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 Script for 5G SA Data scenarios
+"""
+
+import time
+
+from acts.test_decorators import test_tracker_info
+from acts_contrib.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
+from acts_contrib.test_utils.tel.tel_defines import GEN_5G
+from acts_contrib.test_utils.tel.tel_defines import MAX_WAIT_TIME_USER_PLANE_DATA
+from acts_contrib.test_utils.tel.tel_defines import NETWORK_MODE_NR_ONLY
+from acts_contrib.test_utils.tel.tel_defines import WAIT_TIME_ANDROID_STATE_SETTLING
+from acts_contrib.test_utils.tel.tel_test_utils import break_internet_except_sl4a_port
+from acts_contrib.test_utils.tel.tel_test_utils import check_data_stall_detection
+from acts_contrib.test_utils.tel.tel_test_utils import check_data_stall_recovery
+from acts_contrib.test_utils.tel.tel_test_utils import check_network_validation_fail
+from acts_contrib.test_utils.tel.tel_test_utils import get_current_override_network_type
+from acts_contrib.test_utils.tel.tel_test_utils import get_device_epoch_time
+from acts_contrib.test_utils.tel.tel_test_utils import resume_internet_with_sl4a_port
+from acts_contrib.test_utils.tel.tel_test_utils import set_preferred_network_mode_pref
+from acts_contrib.test_utils.tel.tel_test_utils import test_data_browsing_failure_using_sl4a
+from acts_contrib.test_utils.tel.tel_test_utils import test_data_browsing_success_using_sl4a
+from acts_contrib.test_utils.tel.tel_test_utils import toggle_airplane_mode
+from acts_contrib.test_utils.tel.tel_test_utils import verify_internet_connection
+from acts_contrib.test_utils.tel.tel_test_utils import wifi_reset
+from acts_contrib.test_utils.tel.tel_test_utils import wifi_toggle_state
+from acts_contrib.test_utils.tel.tel_data_utils import browsing_test
+from acts_contrib.test_utils.tel.tel_data_utils import data_connectivity_single_bearer
+from acts_contrib.test_utils.tel.tel_data_utils import test_wifi_connect_disconnect
+from acts_contrib.test_utils.tel.tel_data_utils import wifi_cell_switching
+from acts_contrib.test_utils.tel.tel_5g_utils import is_current_network_5g_sa
+from acts_contrib.test_utils.tel.tel_5g_utils import provision_device_for_5g
+
+
+class Sa5gDataTest(TelephonyBaseTest):
+ def setup_class(self):
+ super().setup_class()
+
+ def setup_test(self):
+ TelephonyBaseTest.setup_test(self)
+ self.provider = self.android_devices[0]
+ self.clients = self.android_devices[1:]
+
+ def teardown_class(self):
+ TelephonyBaseTest.teardown_class(self)
+
+
+ """ Tests Begin """
+
+ @test_tracker_info(uuid="2bb5fa22-d931-426f-a11d-22f514d867d0")
+ @TelephonyBaseTest.tel_test_wrap
+ def test_5g_sa_data_browsing(self):
+ """ Verifying connectivity of internet and browsing websites on 5G SA network.
+
+ Ensure
+ 1. ping to IP of websites is successful.
+ 2. http ping to IP of websites is successful.
+ 3. browsing websites is successful.
+ Returns:
+ True if pass; False if fail.
+ """
+ ad = self.android_devices[0]
+ wifi_toggle_state(ad.log, ad, False)
+ sub_id = ad.droid.subscriptionGetDefaultSubId()
+ if not set_preferred_network_mode_pref(ad.log, ad, sub_id,
+ NETWORK_MODE_NR_ONLY):
+ ad.log.error("Failed to set network mode to SA")
+ return False
+ ad.log.info("Set network mode to SA successfully")
+ ad.log.info("Waiting for 5g SA attach for 60 secs")
+ if is_current_network_5g_sa(ad):
+ ad.log.info("Success! attached on 5g SA")
+ else:
+ ad.log.error("Failure - expected NR, current %s",
+ get_current_override_network_type(ad))
+ return False
+ for iteration in range(3):
+ connectivity = False
+ browsing = False
+ ad.log.info("Attempt %d", iteration + 1)
+ if not verify_internet_connection(self.log, ad):
+ ad.log.error("Failed to connect to internet!")
+ else:
+ ad.log.info("Connect to internet successfully!")
+ connectivity = True
+ if not browsing_test(ad.log, ad):
+ ad.log.error("Failed to browse websites!")
+ else:
+ ad.log.info("Successful to browse websites!")
+ browsing = True
+ if connectivity and browsing:
+ return True
+ time.sleep(WAIT_TIME_ANDROID_STATE_SETTLING)
+ ad.log.error("5G SA Connectivity and Data Browsing test FAIL for all 3 iterations")
+ return False
+
+
+ @test_tracker_info(uuid="785b0ef8-b326-42f8-a399-51ebc1f9e93e")
+ @TelephonyBaseTest.tel_test_wrap
+ def test_5g_sa_data_stall_recovery(self):
+ """ Verifies 5G SA data stall
+
+ Set Mode to 5G
+ Wait for 5G attached on SA
+ Browse websites for success
+ Trigger data stall and verify browsing fails
+ Resume data and verify browsing success
+
+ Returns:
+ True if pass; False if fail.
+ """
+ ad = self.android_devices[0]
+ result = True
+ wifi_toggle_state(ad.log, ad, False)
+ toggle_airplane_mode(ad.log, ad, False)
+
+ if not provision_device_for_5g(ad.log, ad, sa_5g=True):
+ return False
+
+ cmd = ('ss -l -p -n | grep "tcp.*droid_script" | tr -s " " '
+ '| cut -d " " -f 5 | sed s/.*://g')
+ sl4a_port = ad.adb.shell(cmd)
+
+ if not test_data_browsing_success_using_sl4a(ad.log, ad):
+ ad.log.error("Browsing failed before the test, aborting!")
+ return False
+
+ begin_time = get_device_epoch_time(ad)
+ break_internet_except_sl4a_port(ad, sl4a_port)
+
+ if not test_data_browsing_failure_using_sl4a(ad.log, ad):
+ ad.log.error("Browsing after breaking the internet, aborting!")
+ result = False
+
+ if not check_data_stall_detection(ad):
+ ad.log.warning("NetworkMonitor unable to detect Data Stall")
+
+ if not check_network_validation_fail(ad, begin_time):
+ ad.log.warning("Unable to detect NW validation fail")
+
+ if not check_data_stall_recovery(ad, begin_time):
+ ad.log.error("Recovery was not triggered")
+ result = False
+
+ resume_internet_with_sl4a_port(ad, sl4a_port)
+ time.sleep(MAX_WAIT_TIME_USER_PLANE_DATA)
+ if not test_data_browsing_success_using_sl4a(ad.log, ad):
+ ad.log.error("Browsing failed after resuming internet")
+ result = False
+ if result:
+ ad.log.info("PASS - data stall over 5G SA")
+ else:
+ ad.log.error("FAIL - data stall over 5G SA")
+ return result
+
+
+ @test_tracker_info(uuid="6c0ef257-6381-4c1d-8b8e-0371db7e08ac")
+ @TelephonyBaseTest.tel_test_wrap
+ def test_5g_sa_wifi_connect_disconnect(self):
+ """Perform multiple connects and disconnects from WiFi and verify that
+ data switches between WiFi and Cell.
+
+ Steps:
+ 1. DUT Cellular Data is on sa 5G. Reset Wifi on DUT
+ 2. Connect DUT to a WiFi AP
+ 3. Repeat steps 1-2, alternately disconnecting and disabling wifi
+
+ Expected Results:
+ 1. Verify Data on Cell
+ 2. Verify Data on Wifi
+
+ Returns:
+ True if success.
+ False if failed.
+ """
+ if not provision_device_for_5g(self.log, self.provider, sa_5g=True):
+ return False
+
+ return test_wifi_connect_disconnect(self.log, self.provider, self.wifi_network_ssid, self.wifi_network_pass)
+
+
+ @test_tracker_info(uuid="f70ad253-4b77-4d9b-b7dc-d7cd3e945e5f")
+ @TelephonyBaseTest.tel_test_wrap
+ def test_5g_sa_wifi_switching(self):
+ """Test data connection network switching when phone camped on sa 5G.
+
+ Ensure phone is camped on sa 5G
+ Ensure WiFi can connect to live network,
+ Airplane mode is off, data connection is on, WiFi is on.
+ Turn off WiFi, verify data is on cell and browse to google.com is OK.
+ Turn on WiFi, verify data is on WiFi and browse to google.com is OK.
+ Turn off WiFi, verify data is on cell and browse to google.com is OK.
+
+ Returns:
+ True if pass.
+ """
+ ad = self.android_devices[0]
+ return wifi_cell_switching(ad.log, ad, GEN_5G, self.wifi_network_ssid,
+ self.wifi_network_pass, sa_5g=True)
+
+
+ @test_tracker_info(uuid="8df1b65c-197e-40b3-83a4-6da1f0a51b97")
+ @TelephonyBaseTest.tel_test_wrap
+ def test_5g_sa_wifi_not_associated(self):
+ """Test data connection in sa 5g.
+
+ Turn off airplane mode, enable WiFi (but not connected), enable Cellular Data.
+ Ensure phone data generation is sa 5g.
+ Verify Internet.
+ Disable Cellular Data, verify Internet is inaccessible.
+ Enable Cellular Data, verify Internet.
+
+ Returns:
+ True if success.
+ False if failed.
+ """
+ ad = self.android_devices[0]
+ wifi_reset(ad.log, ad)
+ wifi_toggle_state(ad.log, ad, False)
+ wifi_toggle_state(ad.log, ad, True)
+ return data_connectivity_single_bearer(ad.log, ad, GEN_5G, sa_5g=True)
+
+ """ Tests End """
diff --git a/acts_tests/tests/google/nr/sa5g/Sa5gMmsTest.py b/acts_tests/tests/google/nr/sa5g/Sa5gMmsTest.py
new file mode 100755
index 0000000..cf4e14a
--- /dev/null
+++ b/acts_tests/tests/google/nr/sa5g/Sa5gMmsTest.py
@@ -0,0 +1,129 @@
+#!/usr/bin/env python3.4
+#
+# Copyright 2021 - Google
+#
+# 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 Script for 5G SA MMS scenarios
+"""
+
+import time
+
+from acts.test_decorators import test_tracker_info
+from acts_contrib.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
+from acts_contrib.test_utils.tel.tel_test_utils import ensure_phones_idle
+from acts_contrib.test_utils.tel.tel_test_utils import ensure_wifi_connected
+from acts_contrib.test_utils.tel.tel_5g_utils import disable_apm_mode_both_devices
+from acts_contrib.test_utils.tel.tel_5g_utils import provision_device_for_5g
+from acts_contrib.test_utils.tel.tel_5g_utils import verify_5g_attach_for_both_devices
+from acts_contrib.test_utils.tel.tel_mms_utils import _mms_test_mo
+from acts_contrib.test_utils.tel.tel_mms_utils import _long_mms_test_mo
+
+
+class Sa5gMmsTest(TelephonyBaseTest):
+ def setup_class(self):
+ super().setup_class()
+ self.number_of_devices = 2
+
+ def setup_test(self):
+ TelephonyBaseTest.setup_test(self)
+
+ def teardown_test(self):
+ ensure_phones_idle(self.log, self.android_devices)
+
+
+ """ Tests Begin """
+
+
+ @test_tracker_info(uuid="74e2ae79-aee4-46e0-9326-fcd3b7f19128")
+ @TelephonyBaseTest.tel_test_wrap
+ def test_5g_sa_mms_mo_mt(self):
+ """Test MMS between two phones in 5g SA
+
+ Provision devices in 5g SA
+ Send and Verify MMS from PhoneA to PhoneB
+ Verify both devices are still on 5g SA
+
+ Returns:
+ True if success.
+ False if failed.
+ """
+ ads = self.android_devices
+ if not provision_device_for_5g(self.log, ads, sa_5g=True):
+ return False
+
+ if not _mms_test_mo(self.log, ads):
+ return False
+
+ if not verify_5g_attach_for_both_devices(self.log, ads, True):
+ return False
+
+ self.log.info("PASS - mms test over 5g sa validated")
+ return True
+
+
+ @test_tracker_info(uuid="6cd173f5-bd1d-44bb-aac2-ac63f37b9a62")
+ @TelephonyBaseTest.tel_test_wrap
+ def test_5g_sa_mms_long_message_mo_mt(self):
+ """Test MMS basic function between two phone. Phones in sa 5G network.
+
+ Airplane mode is off. Phone in 5G SA.
+ Send MMS from PhoneA to PhoneB.
+ Verify received message on PhoneB is correct.
+
+ Returns:
+ True if success.
+ False if failed.
+ """
+
+ ads = self.android_devices
+
+ if not disable_apm_mode_both_devices(self.log, ads):
+ return False
+
+ if not provision_device_for_5g(self.log, ads, sa_5g=True):
+ return False
+
+ return _long_mms_test_mo(self.log, ads)
+
+
+ @test_tracker_info(uuid="83d24fb5-1ebd-42e0-a3d1-b85b607234e2")
+ @TelephonyBaseTest.tel_test_wrap
+ def test_5g_sa_mms_mo_mt_wifi(self):
+ """Test MMS basic function between two phone. Phones in sa 5g network.
+
+ Airplane mode is off. Phone in sa 5G.
+ Connect to Wifi.
+ Send MMS from PhoneA to PhoneB.
+ Verify received message on PhoneB is correct.
+
+ Returns:
+ True if success.
+ False if failed.
+ """
+
+ ads = self.android_devices
+
+ if not disable_apm_mode_both_devices(self.log, ads):
+ return False
+
+ if not provision_device_for_5g(self.log, ads, sa_5g=True):
+ return False
+
+ ensure_wifi_connected(self.log, ads[0], self.wifi_network_ssid,
+ self.wifi_network_pass)
+
+ return _mms_test_mo(self.log, ads)
+
+
+ """ Tests End """
diff --git a/acts_tests/tests/google/nr/sa5g/Sa5gSmsTest.py b/acts_tests/tests/google/nr/sa5g/Sa5gSmsTest.py
new file mode 100755
index 0000000..61d427a
--- /dev/null
+++ b/acts_tests/tests/google/nr/sa5g/Sa5gSmsTest.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python3.4
+#
+# Copyright 2021 - Google
+#
+# 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 Script for 5G SA SMS scenarios
+"""
+
+import time
+from acts.test_decorators import test_tracker_info
+from acts_contrib.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
+from acts_contrib.test_utils.tel.tel_test_utils import ensure_phones_idle
+from acts_contrib.test_utils.tel.tel_5g_utils import disable_apm_mode_both_devices
+from acts_contrib.test_utils.tel.tel_5g_utils import provision_device_for_5g
+from acts_contrib.test_utils.tel.tel_5g_utils import provision_both_devices_for_volte
+from acts_contrib.test_utils.tel.tel_5g_utils import verify_5g_attach_for_both_devices
+from acts_contrib.test_utils.tel.tel_sms_utils import _sms_test_mo
+from acts_contrib.test_utils.tel.tel_sms_utils import _long_sms_test_mo
+
+
+class Sa5gSmsTest(TelephonyBaseTest):
+ def setup_class(self):
+ super().setup_class()
+
+ def setup_test(self):
+ TelephonyBaseTest.setup_test(self)
+
+ def teardown_test(self):
+ ensure_phones_idle(self.log, self.android_devices)
+
+
+ """ Tests Begin """
+
+
+ @test_tracker_info(uuid="8949d1c7-1719-4960-b79c-041b467fb5ef")
+ @TelephonyBaseTest.tel_test_wrap
+ def test_5g_sa_sms_mo_mt(self):
+ """Test SMS between two phones in 5g SA
+
+ Provision devices in 5g SA
+ Send and Verify SMS from PhoneA to PhoneB
+ Verify both devices are still on 5g SA
+
+ Returns:
+ True if success.
+ False if failed.
+ """
+ ads = self.android_devices
+ if not provision_device_for_5g(self.log, ads, sa_5g=True):
+ return False
+
+ if not _sms_test_mo(self.log, ads):
+ return False
+
+ if not verify_5g_attach_for_both_devices(self.log, ads, True):
+ return False
+
+ self.log.info("PASS - SMS test over 5G SA validated")
+ return True
+
+
+ @test_tracker_info(uuid="5c7a717b-1f98-44b7-95e7-0e83afb82a84")
+ @TelephonyBaseTest.tel_test_wrap
+ def test_5g_sa_sms_long_message_mo_mt(self):
+ """Test SMS basic function between two phone.
+
+ Phones in sa 5G network.
+ Airplane mode is off.
+ Send SMS from PhoneA to PhoneB.
+ Verify received message on PhoneB is correct.
+
+ Returns:
+ True if success.
+ False if failed.
+ """
+
+ ads = self.android_devices
+
+ if not disable_apm_mode_both_devices(self.log, ads):
+ return False
+
+ if not provision_device_for_5g(self.log, ads, sa_5g=True):
+ return False
+
+ return _long_sms_test_mo(self.log, ads)
+
+ """ Tests End """