blob: ad55e58573b4b9bb937c90372d9170f1b1aa5354 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2016 - 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.
"""
Sanity tests for voice tests in telephony
"""
import time
from acts.controllers.anritsu_lib._anritsu_utils import AnritsuError
from acts.controllers.anritsu_lib.md8475a import CsfbType
from acts.controllers.anritsu_lib.md8475a import MD8475A
from acts.controllers.anritsu_lib.md8475a import VirtualPhoneAutoAnswer
from acts_contrib.test_utils.tel.anritsu_utils import WAIT_TIME_ANRITSU_REG_AND_CALL
from acts_contrib.test_utils.tel.anritsu_utils import call_mo_setup_teardown
from acts_contrib.test_utils.tel.anritsu_utils import ims_call_cs_teardown
from acts_contrib.test_utils.tel.anritsu_utils import call_mt_setup_teardown
from acts_contrib.test_utils.tel.anritsu_utils import set_system_model_1x
from acts_contrib.test_utils.tel.anritsu_utils import set_system_model_1x_evdo
from acts_contrib.test_utils.tel.anritsu_utils import set_system_model_gsm
from acts_contrib.test_utils.tel.anritsu_utils import set_system_model_lte
from acts_contrib.test_utils.tel.anritsu_utils import set_system_model_lte_1x
from acts_contrib.test_utils.tel.anritsu_utils import set_system_model_lte_wcdma
from acts_contrib.test_utils.tel.anritsu_utils import set_system_model_lte_gsm
from acts_contrib.test_utils.tel.anritsu_utils import set_system_model_wcdma
from acts_contrib.test_utils.tel.anritsu_utils import set_usim_parameters
from acts_contrib.test_utils.tel.anritsu_utils import set_post_sim_params
from acts_contrib.test_utils.tel.tel_defines import CALL_TEARDOWN_PHONE
from acts_contrib.test_utils.tel.tel_defines import DEFAULT_EMERGENCY_CALL_NUMBER
from acts_contrib.test_utils.tel.tel_defines import EMERGENCY_CALL_NUMBERS
from acts_contrib.test_utils.tel.tel_defines import RAT_FAMILY_CDMA2000
from acts_contrib.test_utils.tel.tel_defines import RAT_FAMILY_GSM
from acts_contrib.test_utils.tel.tel_defines import RAT_FAMILY_LTE
from acts_contrib.test_utils.tel.tel_defines import RAT_FAMILY_UMTS
from acts_contrib.test_utils.tel.tel_defines import RAT_1XRTT
from acts_contrib.test_utils.tel.tel_defines import NETWORK_MODE_CDMA
from acts_contrib.test_utils.tel.tel_defines import NETWORK_MODE_GSM_ONLY
from acts_contrib.test_utils.tel.tel_defines import NETWORK_MODE_GSM_UMTS
from acts_contrib.test_utils.tel.tel_defines import NETWORK_MODE_LTE_CDMA_EVDO
from acts_contrib.test_utils.tel.tel_defines import NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA
from acts_contrib.test_utils.tel.tel_defines import NETWORK_MODE_LTE_GSM_WCDMA
from acts_contrib.test_utils.tel.tel_defines import WAIT_TIME_IN_CALL
from acts_contrib.test_utils.tel.tel_defines import WAIT_TIME_IN_CALL_FOR_IMS
from acts_contrib.test_utils.tel.tel_logging_utils import start_qxdm_loggers
from acts_contrib.test_utils.tel.tel_test_utils import ensure_network_rat
from acts_contrib.test_utils.tel.tel_test_utils import ensure_phone_default_state
from acts_contrib.test_utils.tel.tel_test_utils import toggle_airplane_mode_by_adb
from acts_contrib.test_utils.tel.tel_test_utils import toggle_volte
from acts_contrib.test_utils.tel.tel_test_utils import check_apm_mode_on_by_serial
from acts_contrib.test_utils.tel.tel_test_utils import set_apm_mode_on_by_serial
from acts_contrib.test_utils.tel.tel_test_utils import set_preferred_apn_by_adb
from acts_contrib.test_utils.tel.tel_voice_utils import phone_idle_volte
from acts_contrib.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
from acts.test_decorators import test_tracker_info
from acts.utils import exe_cmd
class TelLabEmergencyCallTest(TelephonyBaseTest):
def setup_class(self):
super().setup_class()
try:
self.stress_test_number = int(
self.user_params["stress_test_number"])
self.log.info("Executing {} calls per test in stress test mode".
format(self.stress_test_number))
except KeyError:
self.stress_test_number = 0
self.log.info(
"No 'stress_test_number' defined: running single iteration tests"
)
self.ad = self.android_devices[0]
self.ad.sim_card = getattr(self.ad, "sim_card", None)
self.md8475a_ip_address = self.user_params[
"anritsu_md8475a_ip_address"]
self.wlan_option = self.user_params.get("anritsu_wlan_option", False)
self.md8475_version = self.user_params.get("md8475", "A")
setattr(self, 'emergency_call_number', DEFAULT_EMERGENCY_CALL_NUMBER)
if 'emergency_call_number' in self.user_params:
self.emergency_call_number = self.user_params[
'emergency_call_number']
self.log.info("Using provided emergency call number: {}".format(
self.emergency_call_number))
if not self.emergency_call_number in EMERGENCY_CALL_NUMBERS:
self.log.warning("Unknown Emergency Number {}".format(
self.emergency_call_number))
# Check for all adb devices on the linux machine, and set APM ON
cmd = "|".join(("adb devices", "grep -i device$", "cut -f1"))
output = exe_cmd(cmd)
list_of_devices = output.decode("utf-8").split("\n")
if len(list_of_devices) > 1:
for i in range(len(list_of_devices) - 1):
self.log.info("Serial %s", list_of_devices[i])
if check_apm_mode_on_by_serial(self.ad, list_of_devices[i]):
self.log.info("Device is already in APM ON")
else:
self.log.info("Device is not in APM, turning it ON")
set_apm_mode_on_by_serial(self.ad, list_of_devices[i])
if check_apm_mode_on_by_serial(self.ad,
list_of_devices[i]):
self.log.info("Device is now in APM ON")
if self.ad.sim_card == "VzW12349":
set_preferred_apn_by_adb(self.ad, "VZWINTERNET")
try:
self.anritsu = MD8475A(self.md8475a_ip_address, self.wlan_option,
self.md8475_version)
except AnritsuError:
self.log.error("Error in connecting to Anritsu Simulator")
return False
return True
def setup_test(self):
if getattr(self, "qxdm_log", True):
start_qxdm_loggers(self.log, self.android_devices)
ensure_phone_default_state(self.log, self.ad, check_subscription=False)
toggle_airplane_mode_by_adb(self.log, self.ad, True)
try:
if self.ad.sim_card == "VzW12349":
self.ad.droid.imsSetVolteProvisioning(True)
except Exception as e:
self.ad.log.error(e)
# get a handle to virtual phone
self.virtualPhoneHandle = self.anritsu.get_VirtualPhone()
return True
def teardown_test(self):
self.log.info("Stopping Simulation")
self.anritsu.stop_simulation()
toggle_airplane_mode_by_adb(self.log, self.ad, True)
return True
def teardown_class(self):
self.anritsu.disconnect()
return True
def _setup_emergency_call(self,
set_simulation_func,
phone_setup_func,
phone_idle_func_after_registration=None,
is_ims_call=False,
is_wait_for_registration=True,
csfb_type=None,
srlte_csfb=None,
srvcc=None,
emergency_number=DEFAULT_EMERGENCY_CALL_NUMBER,
teardown_side=CALL_TEARDOWN_PHONE,
wait_time_in_call=WAIT_TIME_IN_CALL):
try:
set_simulation_func(self.anritsu, self.user_params,
self.ad.sim_card)
set_usim_parameters(self.anritsu, self.ad.sim_card)
if is_ims_call or srvcc or csfb_type:
set_post_sim_params(self.anritsu, self.user_params,
self.ad.sim_card)
self.virtualPhoneHandle.auto_answer = (VirtualPhoneAutoAnswer.ON,
2)
if csfb_type:
self.anritsu.csfb_type = csfb_type
if srlte_csfb == "lte_call_failure":
self.anritsu.send_command("IMSPSAPAUTOANSWER 1,DISABLE")
self.anritsu.start_simulation()
self.anritsu.send_command("IMSSTARTVN 1")
check_ims_reg = True
check_ims_calling = True
elif srlte_csfb == "ims_unregistered":
self.anritsu.start_simulation()
self.anritsu.send_command("IMSSTARTVN 1")
self.anritsu.send_command(
"IMSCSCFBEHAVIOR 1,SENDERRORRESPONSE603")
check_ims_reg = False
check_ims_calling = False
elif srlte_csfb == "ps911_unsupported":
self.anritsu.send_command("EMCBS NOTSUPPORT,BTS1")
self.anritsu.start_simulation()
self.anritsu.send_command("IMSSTARTVN 1")
check_ims_reg = True
check_ims_calling = False
elif srlte_csfb == "emc_barred":
self.anritsu.send_command("ACBARRED USERSPECIFIC,BTS1")
self.anritsu.send_command("LTEEMERGENCYACBARRED BARRED,BTS1")
self.anritsu.start_simulation()
self.anritsu.send_command("IMSSTARTVN 1")
check_ims_reg = True
check_ims_calling = False
elif srvcc == "InCall":
self.anritsu.start_simulation()
self.anritsu.send_command("IMSSTARTVN 1")
self.anritsu.send_command("IMSSTARTVN 2")
self.anritsu.send_command("IMSSTARTVN 3")
check_ims_reg = True
check_ims_calling = True
else:
self.anritsu.start_simulation()
if is_ims_call or csfb_type:
self.anritsu.send_command("IMSSTARTVN 1")
self.anritsu.send_command("IMSSTARTVN 2")
self.anritsu.send_command("IMSSTARTVN 3")
iterations = 1
if self.stress_test_number > 0:
iterations = self.stress_test_number
successes = 0
for i in range(1, iterations + 1):
if self.stress_test_number:
self.log.info(
"Running iteration {} of {}".format(i, iterations))
# FIXME: There's no good reason why this must be true;
# I can only assume this was done to work around a problem
self.ad.droid.telephonyToggleDataConnection(False)
# turn off all other BTS to ensure UE registers on BTS1
sim_model = (self.anritsu.get_simulation_model()).split(",")
no_of_bts = len(sim_model)
for i in range(2, no_of_bts + 1):
self.anritsu.send_command(
"OUTOFSERVICE OUT,BTS{}".format(i))
if phone_setup_func is not None:
if not phone_setup_func(self.ad):
self.log.warning(
"phone_setup_func failed. Rebooting UE")
self.ad.reboot()
time.sleep(30)
if self.ad.sim_card == "VzW12349":
set_preferred_apn_by_adb(self.ad, "VZWINTERNET")
if not phone_setup_func(self.ad):
self.log.error("phone_setup_func failed.")
continue
if is_wait_for_registration:
self.anritsu.wait_for_registration_state()
if phone_idle_func_after_registration:
if not phone_idle_func_after_registration(self.log,
self.ad):
continue
for i in range(2, no_of_bts + 1):
self.anritsu.send_command(
"OUTOFSERVICE IN,BTS{}".format(i))
time.sleep(WAIT_TIME_ANRITSU_REG_AND_CALL)
if srlte_csfb or srvcc:
if not ims_call_cs_teardown(
self.log, self.ad, self.anritsu, emergency_number,
CALL_TEARDOWN_PHONE, True, check_ims_reg,
check_ims_calling, srvcc,
WAIT_TIME_IN_CALL_FOR_IMS, WAIT_TIME_IN_CALL):
self.log.error(
"Phone {} Failed to make emergency call to {}"
.format(self.ad.serial, emergency_number))
continue
else:
if not call_mo_setup_teardown(
self.log, self.ad, self.anritsu, emergency_number,
CALL_TEARDOWN_PHONE, True, WAIT_TIME_IN_CALL,
is_ims_call):
self.log.error(
"Phone {} Failed to make emergency call to {}"
.format(self.ad.serial, emergency_number))
continue
successes += 1
if self.stress_test_number:
self.log.info("Passed iteration {}".format(i))
if self.stress_test_number:
self.log.info("Total of {} successes out of {} attempts".
format(successes, iterations))
return True if successes == iterations else False
except AnritsuError as e:
self.log.error("Error in connection with Anritsu Simulator: " +
str(e))
return False
except Exception as e:
self.log.error("Exception during emergency call procedure: " + str(
e))
return False
return True
def _phone_setup_lte_wcdma(self, ad):
toggle_volte(self.log, ad, False)
return ensure_network_rat(
self.log,
ad,
NETWORK_MODE_LTE_GSM_WCDMA,
RAT_FAMILY_LTE,
toggle_apm_after_setting=True)
def _phone_setup_lte_1x(self, ad):
return ensure_network_rat(
self.log,
ad,
NETWORK_MODE_LTE_CDMA_EVDO,
RAT_FAMILY_LTE,
toggle_apm_after_setting=True)
def _phone_setup_wcdma(self, ad):
return ensure_network_rat(
self.log,
ad,
NETWORK_MODE_GSM_UMTS,
RAT_FAMILY_UMTS,
toggle_apm_after_setting=True)
def _phone_setup_gsm(self, ad):
return ensure_network_rat(
self.log,
ad,
NETWORK_MODE_GSM_ONLY,
RAT_FAMILY_GSM,
toggle_apm_after_setting=True)
def _phone_setup_1x(self, ad):
return ensure_network_rat(
self.log,
ad,
NETWORK_MODE_CDMA,
RAT_FAMILY_CDMA2000,
toggle_apm_after_setting=True)
def _phone_setup_airplane_mode(self, ad):
return toggle_airplane_mode_by_adb(self.log, ad, True)
def _phone_disable_airplane_mode(self, ad):
return toggle_airplane_mode_by_adb(self.log, ad, False)
def _phone_setup_volte_airplane_mode(self, ad):
toggle_volte(self.log, ad, True)
return toggle_airplane_mode_by_adb(self.log, ad, True)
def _phone_setup_volte(self, ad):
ad.droid.telephonyToggleDataConnection(True)
toggle_volte(self.log, ad, True)
return ensure_network_rat(
self.log,
ad,
NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA,
RAT_FAMILY_LTE,
toggle_apm_after_setting=True)
""" Tests Begin """
@test_tracker_info(uuid="f5c93228-3b43-48a3-b509-796d41625171")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_lte_wcdma_csfb_redirection(self):
""" Test Emergency call functionality on LTE.
CSFB type is REDIRECTION
Steps:
1. Setup CallBox on LTE and WCDMA network, make sure DUT register on LTE network.
2. Make an emergency call to 911. Make sure DUT does not CSFB to WCDMA.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed. DUT does not CSFB to WCDMA.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte_wcdma,
self._phone_setup_lte_wcdma,
emergency_number=self.emergency_call_number,
csfb_type=CsfbType.CSFB_TYPE_REDIRECTION,
is_ims_call=True)
@test_tracker_info(uuid="8deb6b21-2cb0-4241-bcad-6cd62a340b07")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_lte_wcdma_csfb_handover(self):
""" Test Emergency call functionality on LTE.
CSFB type is HANDOVER
Steps:
1. Setup CallBox on LTE and WCDMA network, make sure DUT register on LTE network.
2. Make an emergency call to 911. Make sure DUT does not CSFB to WCDMA.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed. DUT does not CSFB to WCDMA.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte_wcdma,
self._phone_setup_lte_wcdma,
emergency_number=self.emergency_call_number,
csfb_type=CsfbType.CSFB_TYPE_HANDOVER,
is_ims_call=True)
@test_tracker_info(uuid="52b6b783-de77-497d-87e0-63c930e6c9bb")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_lte_1x_csfb(self):
""" Test Emergency call functionality on LTE (CSFB to 1x).
Steps:
1. Setup CallBox on LTE and CDMA 1X network, make sure DUT register on LTE network.
2. Make an emergency call to 911. Make sure DUT CSFB to 1x.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed. DUT CSFB to 1x.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte_1x,
self._phone_setup_lte_1x,
emergency_number=self.emergency_call_number)
@test_tracker_info(uuid="fcdd5a4f-fdf2-44dc-b1b2-44ab175791ce")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_wcdma(self):
""" Test Emergency call functionality on WCDMA
Steps:
1. Setup CallBox on WCDMA network, make sure DUT register on WCDMA network.
2. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_wcdma,
self._phone_setup_wcdma,
emergency_number=self.emergency_call_number)
@test_tracker_info(uuid="295c3188-24e2-4c53-80c6-3d3001e2ff16")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_gsm(self):
""" Test Emergency call functionality on GSM
Steps:
1. Setup CallBox on GSM network, make sure DUT register on GSM network.
2. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_gsm,
self._phone_setup_gsm,
emergency_number=self.emergency_call_number)
@test_tracker_info(uuid="4f21bfc0-a0a9-43b8-9285-dcfb131a3a04")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_1x(self):
""" Test Emergency call functionality on CDMA 1X
Steps:
1. Setup CallBox on 1x network, make sure DUT register on 1x network.
2. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_1x,
self._phone_setup_1x,
emergency_number=self.emergency_call_number)
@test_tracker_info(uuid="6dfd3e1d-7faa-426f-811a-ebd5e54f9c9a")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_1x_evdo(self):
""" Test Emergency call functionality on CDMA 1X with EVDO
Steps:
1. Setup CallBox on 1x and EVDO network, make sure DUT register on 1x network.
2. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_1x_evdo,
self._phone_setup_1x,
emergency_number=self.emergency_call_number)
@test_tracker_info(uuid="40f9897e-4924-4896-9f2c-0b4f45331251")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_1x_apm(self):
""" Test Emergency call functionality on Airplane mode
Steps:
1. Setup CallBox on 1x network.
2. Turn on Airplane mode on DUT. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_1x,
self._phone_setup_airplane_mode,
is_wait_for_registration=False,
emergency_number=self.emergency_call_number)
@test_tracker_info(uuid="5997c004-449b-4a5e-816e-2ff0c0eb928d")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_wcdma_apm(self):
""" Test Emergency call functionality on Airplane mode
Steps:
1. Setup CallBox on WCDMA network.
2. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_wcdma,
self._phone_setup_airplane_mode,
is_wait_for_registration=False,
emergency_number=self.emergency_call_number)
@test_tracker_info(uuid="9afde8d3-bdf0-41d9-af8c-2a8f36aae169")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_volte_wcdma_srvcc(self):
""" Test Emergency call functionality,
VoLTE to WCDMA SRVCC
Steps:
1. Setup CallBox on VoLTE network with WCDMA.
2. Turn on DUT and enable VoLTE. Make an emergency call to 911.
3. Check if VoLTE emergency call connected successfully.
4. Handover the call to WCDMA and check if the call is still up.
5. Tear down the call.
Expected Results:
1. VoLTE Emergency call is made successfully.
2. After SRVCC, the 911 call is not dropped.
3. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte_wcdma,
self._phone_setup_volte,
phone_idle_volte,
srvcc="InCall",
emergency_number=self.emergency_call_number,
wait_time_in_call=WAIT_TIME_IN_CALL_FOR_IMS)
@test_tracker_info(uuid="2e454f11-e77d-452a-bcac-7271378953ed")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_volte_gsm_srvcc(self):
""" Test Emergency call functionality,
VoLTE to GSM SRVCC
Steps:
1. Setup CallBox on VoLTE network with GSM.
2. Turn on DUT and enable VoLTE. Make an emergency call to 911.
3. Check if VoLTE emergency call connected successfully.
4. Handover the call to GSM and check if the call is still up.
5. Tear down the call.
Expected Results:
1. VoLTE Emergency call is made successfully.
2. After SRVCC, the 911 call is not dropped.
3. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte_gsm,
self._phone_setup_volte,
phone_idle_volte,
srvcc="InCall",
emergency_number=self.emergency_call_number,
wait_time_in_call=WAIT_TIME_IN_CALL_FOR_IMS)
@test_tracker_info(uuid="4dae7e62-b73e-4ba1-92ee-ecc121b898b3")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_csfb_1x_lte_call_failure(self):
""" Test Emergency call functionality,
CSFB to CDMA1x after VoLTE call failure
Ref: VzW LTE E911 test plan, 2.23, VZ_TC_LTEE911_7481
Steps:
1. Setup CallBox on VoLTE network with CDMA1x.
2. Turn on DUT and enable VoLTE. Make an emergency call to 911.
3. Make sure Anritsu IMS server does not answer the call
4. The DUT requests CSFB to 1XCDMA and Anritsu accepts the call.
5. Tear down the call.
Expected Results:
1. VoLTE Emergency call is made.
2. Anritsu receive the call but does not answer.
3. The 911 call CSFB to CDMA1x and answered successfully.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte_1x,
self._phone_setup_volte,
phone_idle_volte,
srlte_csfb="lte_call_failure",
emergency_number=self.emergency_call_number,
wait_time_in_call=WAIT_TIME_IN_CALL_FOR_IMS)
@test_tracker_info(uuid="e98c9101-1ab6-497e-9d67-a4ff62d28fea")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_csfb_1x_ims_unregistered(self):
""" Test Emergency call functionality,
CSFB to CDMA1x because ims registration delcined
Ref: VzW LTE E911 test plan, 2.25, VZ_TC_LTEE911_7483
Steps:
1. Setup CallBox on VoLTE network with CDMA1x.
2. Setup Anritsu IMS server to decline IMS registration
3. Turn on DUT and enable VoLTE. Make an emergency call to 911.
4. The DUT requests CSFB to 1XCDMA and Anritsu accepts the call.
5. Tear down the call.
Expected Results:
1. Phone registers on LTE network with VoLTE enabled.
2. When Emergency call is made, phone request CSFB to CDMA1x.
3. The 911 call on CDMA1x is answered successfully.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte_1x,
self._phone_setup_volte,
None,
srlte_csfb="ims_unregistered",
emergency_number=self.emergency_call_number,
wait_time_in_call=WAIT_TIME_IN_CALL_FOR_IMS)
@test_tracker_info(uuid="d96e1b9b-2f6d-49f3-a203-f4277056869e")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_csfb_1x_ps911_unsupported(self):
""" Test Emergency call functionality,
CSFB to CDMA1x because MME does not support PS911, by setting
Emergency Bearer Service not supported in EPS network feature
Ref: VzW LTE E911 test plan, 2.26, VZ_TC_LTEE911_8357
Steps:
1. Setup CallBox on VoLTE network with CDMA1x.
2. Setup Emergency Bearer Service not supported in EPS network feature
3. Turn on DUT and enable VoLTE. Make an emergency call to 911.
4. The DUT requests CSFB to 1XCDMA and Anritsu accepts the call.
5. Tear down the call.
Expected Results:
1. Phone registers on LTE network with VoLTE enabled.
2. When Emergency call is made, phone request CSFB to CDMA1x.
3. The 911 call on CDMA1x is answered successfully.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte_1x,
self._phone_setup_volte,
phone_idle_volte,
srlte_csfb="ps911_unsupported",
emergency_number=self.emergency_call_number,
wait_time_in_call=WAIT_TIME_IN_CALL_FOR_IMS)
@test_tracker_info(uuid="f7d48841-b8ef-4031-99de-28534aaf4c44")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_csfb_1x_emc_barred(self):
""" Test Emergency call functionality,
CSFB to CDMA1x because SIB2 Emergency Barred,
by setting Access Class Barred for Emergency
Ref: VzW LTE E911 test plan, 2.27, VZ_TC_LTEE911_8358
Steps:
1. Setup CallBox on VoLTE network with CDMA1x.
2. Set Access Class Barred for Emergency in SIB2
3. Turn on DUT and enable VoLTE. Make an emergency call to 911.
4. The DUT requests CSFB to 1XCDMA and Anritsu accepts the call.
5. Tear down the call.
Expected Results:
1. Phone registers on LTE network with VoLTE enabled.
2. When Emergency call is made, phone request CSFB to CDMA1x.
3. The 911 call on CDMA1x is answered successfully.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte_1x,
self._phone_setup_volte,
phone_idle_volte,
srlte_csfb="emc_barred",
emergency_number=self.emergency_call_number,
wait_time_in_call=WAIT_TIME_IN_CALL_FOR_IMS)
@test_tracker_info(uuid="5bbbecec-0fef-430b-acbd-01ef7c7055c0")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_volte_1x(self):
""" Test Emergency call functionality on VoLTE with CDMA1x
Ref: VzW LTE E911 test plan, 2.24, VZ_TC_LTEE911_7482
Steps:
1. Setup CallBox on VoLTE network with CDMA1x.
2. Turn on DUT and enable VoLTE. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte_1x,
self._phone_setup_volte,
phone_idle_volte,
is_ims_call=True,
emergency_number=self.emergency_call_number,
wait_time_in_call=WAIT_TIME_IN_CALL_FOR_IMS)
@test_tracker_info(uuid="e32862e0-ec11-4de8-8b9a-851bab9feb29")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_volte(self):
""" Test Emergency call functionality on VoLTE
Steps:
1. Setup CallBox on VoLTE network.
2. Turn on DUT and enable VoLTE. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte,
self._phone_setup_volte,
phone_idle_volte,
is_ims_call=True,
emergency_number=self.emergency_call_number,
wait_time_in_call=WAIT_TIME_IN_CALL_FOR_IMS)
@test_tracker_info(uuid="fa5b4e52-c249-42ec-a9d3-9523336f88f7")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_volte_apm(self):
""" Test Emergency call functionality on VoLTE
Steps:
1. Setup CallBox on VoLTE network.
2. Turn on Airplane mode on DUT. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte,
self._phone_setup_volte_airplane_mode,
is_ims_call=True,
is_wait_for_registration=False,
emergency_number=self.emergency_call_number,
wait_time_in_call=WAIT_TIME_IN_CALL_FOR_IMS)
@test_tracker_info(uuid="260e4892-fdae-4d49-bfc6-04fe72a5a715")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_no_sim_wcdma(self):
""" Test Emergency call functionality with no SIM.
Steps:
1. Setup CallBox on WCDMA network.
2. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_wcdma,
self._phone_disable_airplane_mode,
emergency_number=self.emergency_call_number,
is_wait_for_registration=False)
@test_tracker_info(uuid="2dbbbde5-c298-4a2d-ae65-b739d1dd1445")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_no_sim_1x(self):
""" Test Emergency call functionality with no SIM.
Steps:
1. Setup CallBox on 1x network.
2. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_1x,
self._phone_disable_airplane_mode,
emergency_number=self.emergency_call_number,
is_wait_for_registration=False)
@test_tracker_info(uuid="fa77dee2-3235-42e0-b24d-c8fdb3fbef2f")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_no_sim_gsm(self):
""" Test Emergency call functionality with no SIM.
Steps:
1. Setup CallBox on GSM network.
2. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_gsm,
self._phone_disable_airplane_mode,
emergency_number=self.emergency_call_number,
is_wait_for_registration=False)
@test_tracker_info(uuid="9ead5c6a-b4cb-40d5-80b0-54d3c7ad31ff")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_no_sim_volte(self):
""" Test Emergency call functionality with no SIM.
Steps:
1. Setup CallBox on VoLTE network.
2. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
Returns:
True if pass; False if fail
"""
return self._setup_emergency_call(
set_system_model_lte,
self._phone_disable_airplane_mode,
is_wait_for_registration=False,
is_ims_call=True,
emergency_number=self.emergency_call_number,
wait_time_in_call=WAIT_TIME_IN_CALL_FOR_IMS)
@test_tracker_info(uuid="d6bdc1d7-0a08-4e6e-9de8-4084abb48bad")
@TelephonyBaseTest.tel_test_wrap
def test_emergency_call_no_sim_1x_ecbm(self):
""" Test Emergency call functionality with no SIM.
Steps:
1. Setup CallBox on 1x network.
2. Make an emergency call to 911.
3. Make sure Anritsu receives the call and accept.
4. Tear down the call.
5. Make a call from Callbox to DUT.
6. Verify DUT receive the incoming call.
7. Answer on DUT, verify DUT can answer the call correctly.
8. Hangup the call on DUT.
Expected Results:
2. Emergency call succeed.
3. Anritsu can accept the call.
4. Tear down call succeed.
6. DUT receive incoming call.
7. DUT answer the call correctly.
8. Tear down call succeed.
Returns:
True if pass; False if fail
"""
if not self._setup_emergency_call(
set_system_model_1x,
self._phone_disable_airplane_mode,
emergency_number=self.emergency_call_number,
is_wait_for_registration=False):
self.log.error("Failed to make 911 call.")
return False
return call_mt_setup_teardown(self.log, self.ad,
self.anritsu.get_VirtualPhone(), None,
CALL_TEARDOWN_PHONE, RAT_1XRTT)
""" Tests End """