blob: 5db26e264ac88344780a8ab48d4dac3c42557c04 [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 integration with TF
"""
import time
from acts.base_test import BaseTestClass
from acts import asserts
from queue import Empty
from acts.test_utils.tel import tel_defines
from acts.test_utils.tel.tel_test_utils import initiate_call
from acts.test_utils.tel.tel_test_utils import hangup_call
from acts.test_utils.tel.tel_test_utils import ensure_phone_default_state
from acts.test_utils.tel.tel_test_utils import ensure_phone_idle
from acts.test_utils.tel.tel_test_utils import verify_active_call_number
from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_3g
from acts.test_utils.tel.tel_voice_utils import phone_idle_3g
from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_3g
MAX_NUMBER_REDIALS = 20
INCORRECT_STATE_MSG = "Caller not in correct state!"
class TelLiveStressCallTest(BaseTestClass):
def __init__(self, controllers):
BaseTestClass.__init__(self, controllers)
def setup_class(self):
self.ad_caller = self.android_devices[0]
self.stress_test_callee_number = self.user_params["call_server_number"]
self.phone_call_iteration = self.user_params["phone_call_iteration"]
return True
def setup_test(self):
# try removing lock
self.android_devices[0].droid.wakeLockAcquireBright()
self.android_devices[0].droid.wakeUpNow()
asserts.assert_true(
ensure_phone_default_state(self.log, self.ad_caller),
"Make sure phone is in default state")
return True
def teardown_test(self):
self.android_devices[0].droid.wakeLockRelease()
self.android_devices[0].droid.goToSleepNow()
asserts.assert_true(
ensure_phone_default_state(self.log, self.ad_caller),
"Make sure phone returns to default state")
""" Tests Begin """
def test_call_3g_stress(self):
""" 3G to 800 call test
Steps:
1. Make Sure PhoneA is in 3G mode.
2. Call from PhoneA to a 800 number, hang up on PhoneA.
3, Repeat 2 around 100 times based on the config setup
Expected Results:
1, Verify phone is at IDLE state
2, Verify the phone is at ACTIVE, if it is in dialing, then we retry
3, Verify the phone is IDLE after hung up
Returns:
True if pass; False if fail.
"""
ad_caller = self.ad_caller
callee_number = self.stress_test_callee_number
asserts.assert_true(
phone_setup_voice_3g(self.log,
ad_caller), "Phone Failed to Set Up Properly.")
# Make sure phone is idle.
ensure_phone_idle(self.log, ad_caller)
asserts.assert_true(
phone_idle_3g(self.log, ad_caller), "DUT Failed to Reselect")
self.log.info("Call test:{} to {}".format(ad_caller.serial,
callee_number))
subid_caller = ad_caller.droid.subscriptionGetDefaultVoiceSubId()
total_iteration = self.phone_call_iteration
current_iteration = 0
redial_time = 0
while current_iteration < total_iteration:
self.log.info("---> Call test: iteration {} redial {}<---"
.format(current_iteration, redial_time))
self.log.info("Checking Telephony Manager Call State")
asserts.assert_true(
self._check_phone_call_status(
ad_caller, tel_defines.TELEPHONY_STATE_IDLE),
INCORRECT_STATE_MSG)
self.log.info("Making a phone call")
asserts.assert_true(
initiate_call(self.log, ad_caller, callee_number),
"Initiate call failed.")
self.log.info("Ensure that all internal states are updated")
time.sleep(tel_defines.WAIT_TIME_ANDROID_STATE_SETTLING)
asserts.assert_true(
is_phone_in_call_3g(self.log, ad_caller), INCORRECT_STATE_MSG)
asserts.assert_true(
self._check_phone_call_status(
ad_caller, tel_defines.TELEPHONY_STATE_OFFHOOK,
tel_defines.CALL_STATE_DIALING), INCORRECT_STATE_MSG)
time.sleep(tel_defines.WAIT_TIME_IN_CALL)
self.log.info(
"Checking Telephony Manager Call State after waiting for a while")
if (self._check_phone_call_status(
ad_caller, tel_defines.TELEPHONY_STATE_OFFHOOK,
tel_defines.CALL_STATE_ACTIVE)):
current_iteration += 1
redial_time = 0
elif (self._check_phone_call_status(
ad_caller, tel_defines.TELEPHONY_STATE_OFFHOOK,
tel_defines.CALL_STATE_DIALING)):
self.log.info("The line is busy, try again")
redial_time += 1
if redial_time > MAX_NUMBER_REDIALS:
asserts.assert_true(
False, "Re-dial {} times and still having busy signal"
.format(redial_time))
else:
asserts.assert_true(False, INCORRECT_STATE_MSG)
current_iteration += 1
self.log.info("Hang up phone for this iteration")
asserts.assert_true(
hangup_call(self.log, ad_caller), "Error in Hanging-Up Call")
time.sleep(tel_defines.WAIT_TIME_ANDROID_STATE_SETTLING)
self.log.info(
"Checking Telephony Manager Call State after hang up")
asserts.assert_true(
self._check_phone_call_status(
ad_caller, tel_defines.TELEPHONY_STATE_IDLE),
INCORRECT_STATE_MSG)
ensure_phone_idle(self.log, ad_caller)
""" Tests End """
def _check_phone_call_status(self, ad, telecom_status, call_status=None):
"""Check existing event until we get either "ACTIVE" or "DIALING" event
Args:
ad: Android object
telecome_status: expected telecom call state
call_status: expcted telecomcall call state
Return:
True if all the status are matching, False otherwise
"""
# Checking phone call status
if ad.droid.telecomGetCallState() != telecom_status:
return False
if call_status:
call_list = ad.droid.telecomCallGetCallIds()
if not call_list:
return False
if not verify_active_call_number(self.log, ad, 1):
return False
call_id = call_list[0]
self.log.info("TelecomCall Call State {}"
.format(ad.droid.telecomCallGetCallState(call_id)))
if ad.droid.telecomCallGetCallState(call_id) != call_status:
return False
return True
if __name__ == "__main__":
pass