blob: 02697a61516550ba319eb2cf3bc1431bdf94e352 [file] [log] [blame]
#!/usr/bin/env python3.4
#
# Copyright 2016 - 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 Telephony Pre Check In Sanity
"""
import time
from acts.utils import load_config
from acts.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
from acts.test_utils.tel.tel_data_utils import wifi_tethering_setup_teardown
from acts.test_utils.tel.tel_defines import AOSP_PREFIX
from acts.test_utils.tel.tel_defines import CAPABILITY_VOLTE
from acts.test_utils.tel.tel_defines import CAPABILITY_WFC
from acts.test_utils.tel.tel_defines import CAPABILITY_OMADM
from acts.test_utils.tel.tel_defines import MAX_WAIT_TIME_PROVISIONING
from acts.test_utils.tel.tel_defines import MAX_WAIT_TIME_TETHERING_ENTITLEMENT_CHECK
from acts.test_utils.tel.tel_defines import TETHERING_MODE_WIFI
from acts.test_utils.tel.tel_defines import WAIT_TIME_AFTER_REBOOT
from acts.test_utils.tel.tel_defines import WAIT_TIME_ANDROID_STATE_SETTLING
from acts.test_utils.tel.tel_defines import WAIT_TIME_IN_CALL
from acts.test_utils.tel.tel_defines import WAIT_TIME_IN_CALL_FOR_IMS
from acts.test_utils.tel.tel_defines import WFC_MODE_CELLULAR_PREFERRED
from acts.test_utils.tel.tel_defines import WFC_MODE_DISABLED
from acts.test_utils.tel.tel_defines import WFC_MODE_WIFI_ONLY
from acts.test_utils.tel.tel_defines import WFC_MODE_WIFI_PREFERRED
from acts.test_utils.tel.tel_lookup_tables import device_capabilities
from acts.test_utils.tel.tel_lookup_tables import operator_capabilities
from acts.test_utils.tel.tel_test_utils import call_setup_teardown
from acts.test_utils.tel.tel_test_utils import ensure_wifi_connected
from acts.test_utils.tel.tel_test_utils import get_model_name
from acts.test_utils.tel.tel_test_utils import get_operator_name
from acts.test_utils.tel.tel_test_utils import multithread_func
from acts.test_utils.tel.tel_test_utils import sms_send_receive_verify
from acts.test_utils.tel.tel_test_utils import toggle_airplane_mode
from acts.test_utils.tel.tel_test_utils import verify_http_connection
from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_3g
from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_csfb
from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_iwlan
from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_volte
from acts.test_utils.tel.tel_voice_utils import phone_setup_3g
from acts.test_utils.tel.tel_voice_utils import phone_setup_csfb
from acts.test_utils.tel.tel_voice_utils import phone_setup_iwlan
from acts.test_utils.tel.tel_voice_utils import \
phone_setup_iwlan_cellular_preferred
from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_general
from acts.test_utils.tel.tel_voice_utils import phone_setup_volte
from acts.test_utils.tel.tel_voice_utils import phone_idle_3g
from acts.test_utils.tel.tel_voice_utils import phone_idle_csfb
from acts.test_utils.tel.tel_voice_utils import phone_idle_iwlan
from acts.test_utils.tel.tel_voice_utils import phone_idle_volte
from acts.utils import rand_ascii_str
class TelLiveRebootStressTest(TelephonyBaseTest):
def __init__(self, controllers):
TelephonyBaseTest.__init__(self, controllers)
self.simconf = load_config(self.user_params["sim_conf_file"])
self.stress_test_number = int(self.user_params["stress_test_number"])
self.wifi_network_ssid = self.user_params["wifi_network_ssid"]
try:
self.wifi_network_pass = self.user_params["wifi_network_pass"]
except KeyError:
self.wifi_network_pass = None
self.dut = self.android_devices[0]
self.ad_reference = self.android_devices[1]
self.dut_model = get_model_name(self.dut)
self.dut_operator = get_operator_name(self.log, self.dut)
def _check_provisioning(self, ad):
if (CAPABILITY_OMADM in device_capabilities[self.dut_model] and
CAPABILITY_OMADM in operator_capabilities[self.dut_operator]):
self.log.info("Check Provisioning bit")
if not ad.droid.imsIsVolteProvisionedOnDevice():
self.log.error("{}: VoLTE Not Provisioned on the Platform".format(
ad.serial))
return False
return True
def _clear_provisioning(self, ad):
if (CAPABILITY_OMADM in device_capabilities[self.dut_model] and
CAPABILITY_OMADM in operator_capabilities[self.dut_operator]):
self.log.info("Clear Provisioning bit")
ad.droid.imsSetVolteProvisioning(False)
return True
def _check_lte_data(self, ad):
self.log.info("Check LTE data.")
if not phone_setup_csfb(self.log, ad):
self.log.error("Failed to setup LTE data.")
return False
if not verify_http_connection(self.log, ad):
self.log.error("Data not available on cell.")
return False
return True
def _check_volte(self, ad, ad_reference):
if (CAPABILITY_VOLTE in device_capabilities[self.dut_model] and
CAPABILITY_VOLTE in operator_capabilities[self.dut_operator]):
self.log.info("Check VoLTE")
if not phone_setup_volte(self.log, ad):
self.log.error("Failed to setup VoLTE.")
return False
if not call_setup_teardown(self.log, ad, ad_reference, ad,
is_phone_in_call_volte):
self.log.error("VoLTE Call Failed.")
return False
if not sms_send_receive_verify(self.log, ad, ad_reference,
[rand_ascii_str(50)]):
self.log.error("SMS failed")
return False
return True
def _check_wfc(self, ad, ad_reference):
if (CAPABILITY_WFC in device_capabilities[self.dut_model] and
CAPABILITY_WFC in operator_capabilities[self.dut_operator]):
self.log.info("Check WFC")
if not phone_setup_iwlan(self.log, ad, True, WFC_MODE_WIFI_PREFERRED,
self.wifi_network_ssid, self.wifi_network_pass):
self.log.error("Failed to setup WFC.")
return False
if not call_setup_teardown(self.log, ad, ad_reference, ad,
is_phone_in_call_iwlan):
self.log.error("WFC Call Failed.")
return False
if not sms_send_receive_verify(self.log, ad, ad_reference,
[rand_ascii_str(50)]):
self.log.error("SMS failed")
return False
return True
def _check_3g(self, ad, ad_reference):
self.log.info("Check 3G data and CS call")
if not phone_setup_3g(self.log, ad):
self.log.error("Failed to setup 3G")
return False
if not verify_http_connection(self.log, ad):
self.log.error("Data not available on cell.")
return False
if not call_setup_teardown(self.log, ad, ad_reference, ad,
is_phone_in_call_3g):
self.log.error("WFC Call Failed.")
return False
if not sms_send_receive_verify(self.log, ad, ad_reference,
[rand_ascii_str(50)]):
self.log.error("SMS failed")
return False
return True
def _check_tethering(self, ad, ad_reference):
self.log.info("Check tethering")
if not ad.droid.carrierConfigIsTetheringModeAllowed(
TETHERING_MODE_WIFI, MAX_WAIT_TIME_TETHERING_ENTITLEMENT_CHECK):
self.log.error("Tethering Entitlement check failed.")
return False
if not wifi_tethering_setup_teardown(self.log, ad, [ad_reference],
check_interval = 5, check_iteration = 1):
self.log.error("Tethering Failed.")
return False
return True
""" Tests Begin """
@TelephonyBaseTest.tel_test_wrap
def test_reboot_stress(self):
"""Reboot Reliability Test
Steps:
1. Reboot DUT.
2. Check Provisioning bit (if support provisioning)
3. Wait for DUT to camp on LTE, Verify Data.
4. Enable VoLTE, check IMS registration. Wait for DUT report VoLTE
enabled, make VoLTE call. And verify VoLTE SMS.
(if support VoLTE)
5. Connect WiFi, enable WiFi Calling, wait for DUT report WiFi
Calling enabled and make a WFC call and verify SMS.
Disconnect WiFi. (if support WFC)
6. Wait for DUT to camp on 3G, Verify Data.
7. Make CS call and verify SMS.
8. Verify Tethering Entitlement Check and Verify WiFi Tethering.
9. Check crashes.
10. Repeat Step 1~9 for N times. (before reboot, clear Provisioning
bit if provisioning is supported)
Expected Results:
No crash happens in stress test.
Returns:
True is pass, False if fail.
"""
CHECK_INTERVAL = 10
toggle_airplane_mode(self.log, self.dut, False)
phone_setup_voice_general(self.log, self.ad_reference)
for i in range(1, self.stress_test_number + 1):
self.log.info("Reboot Stress Test Iteration: <{}> / <{}>".
format(i, self.stress_test_number))
self.log.info("{} reboot!".format(self.dut.serial))
self.dut.reboot()
self.log.info("{} wait {}s for radio up.".format(
self.dut.serial, WAIT_TIME_AFTER_REBOOT))
time.sleep(WAIT_TIME_AFTER_REBOOT)
elapsed_time = 0
provisioned = False
while(elapsed_time < MAX_WAIT_TIME_PROVISIONING):
if self._check_provisioning(self.dut):
provisioned = True
break
else:
time.sleep(CHECK_INTERVAL)
elapsed_time += CHECK_INTERVAL
if not provisioned:
self.log.error("Provisioning fail.")
return False
if not self._check_lte_data(self.dut):
self.log.error("LTE Data fail.")
return False
if not self._check_volte(self.dut, self.ad_reference):
self.log.error("VoLTE fail.")
return False
if not self._check_wfc(self.dut, self.ad_reference):
self.log.error("WFC fail.")
return False
if not self._check_3g(self.dut, self.ad_reference):
self.log.error("3G fail.")
return False
if not self._check_tethering(self.dut, self.ad_reference):
self.log.error("Tethering fail.")
return False
self._clear_provisioning(self.dut)
# TODO: Check if crash happens.
self.log.info("Iteration: <{}> / <{}> Pass".
format(i, self.stress_test_number))
return True
@TelephonyBaseTest.tel_test_wrap
def test_reboot_stress_without_clear_provisioning(self):
"""Reboot Reliability Test without Clear Provisioning
Steps:
1. Reboot DUT.
2. Check Provisioning bit (if support provisioning)
3. Wait for DUT to camp on LTE, Verify Data.
4. Enable VoLTE, check IMS registration. Wait for DUT report VoLTE
enabled, make VoLTE call. And verify VoLTE SMS.
(if support VoLTE)
5. Connect WiFi, enable WiFi Calling, wait for DUT report WiFi
Calling enabled and make a WFC call and verify SMS.
Disconnect WiFi. (if support WFC)
6. Wait for DUT to camp on 3G, Verify Data.
7. Make CS call and verify SMS.
8. Verify Tethering Entitlement Check and Verify WiFi Tethering.
9. Check crashes.
10. Repeat Step 1~9 for N times.
Expected Results:
No crash happens in stress test.
Returns:
True is pass, False if fail.
"""
toggle_airplane_mode(self.log, self.dut, False)
phone_setup_voice_general(self.log, self.ad_reference)
for i in range(1, self.stress_test_number + 1):
self.log.info("Reboot Stress Test Iteration: <{}> / <{}>".
format(i, self.stress_test_number))
self.log.info("{} reboot!".format(self.dut.serial))
self.dut.reboot()
self.log.info("{} wait {}s for radio up.".format(
self.dut.serial, WAIT_TIME_AFTER_REBOOT))
time.sleep(WAIT_TIME_AFTER_REBOOT)
if not self._check_provisioning(self.dut):
self.log.error("Provisioning fail.")
return False
if not self._check_lte_data(self.dut):
self.log.error("LTE Data fail.")
return False
if not self._check_volte(self.dut, self.ad_reference):
self.log.error("VoLTE fail.")
return False
if not self._check_wfc(self.dut, self.ad_reference):
self.log.error("WFC fail.")
return False
if not self._check_3g(self.dut, self.ad_reference):
self.log.error("3G fail.")
return False
if not self._check_tethering(self.dut, self.ad_reference):
self.log.error("Tethering fail.")
return False
# TODO: Check if crash happens.
self.log.info("Iteration: <{}> / <{}> Pass".
format(i, self.stress_test_number))
return True
""" Tests End """