diff options
author | Betty Zhou <bettyzhou@google.com> | 2017-03-03 14:28:36 -0800 |
---|---|---|
committer | Betty Zhou <bettyzhou@google.com> | 2017-03-06 20:13:58 +0000 |
commit | f25ce44ad1d9fe588c5aa913a7fb4697fbe5d363 (patch) | |
tree | db7b5c5b8f44ea7581888981b5ce760fe0bce57c | |
parent | 2bee4f1a23ee97ebd7af844793f9ceb8e85fae4d (diff) | |
download | platform_tools_test_connectivity-o-preview.tar.gz platform_tools_test_connectivity-o-preview.tar.bz2 platform_tools_test_connectivity-o-preview.zip |
Fix call answering flakiness and report crash difference.android-o-preview-1o-preview
Use telephonyFactoryReset to bring phone to default state.
Fix call answering flakiness.
Report crash report file differences.
Test: run test
Bug: 35882608
Change-Id: Icade962de0c6594c15da8d7a198bbb63640da501
4 files changed, 62 insertions, 71 deletions
diff --git a/acts/framework/acts/test_utils/tel/TelephonyBaseTest.py b/acts/framework/acts/test_utils/tel/TelephonyBaseTest.py index e60812ac67..872dba647b 100644 --- a/acts/framework/acts/test_utils/tel/TelephonyBaseTest.py +++ b/acts/framework/acts/test_utils/tel/TelephonyBaseTest.py @@ -117,16 +117,20 @@ class TelephonyBaseTest(BaseTestClass): ad.crash_report = ad.check_crash_report( log_crash_report=False) if ad.crash_report: - ad.log.warn("Crash reports %s before test %s start", + ad.log.info("Crash reports %s before test %s start", ad.crash_report, func_name) # TODO: b/19002120 start QXDM Logging + self.setup_test() result = fn(self, *args, **kwargs) for ad in self.android_devices: ad.droid.logI("Finished %s" % log_string) new_crash = ad.check_crash_report() - if new_crash != ad.crash_report: - ad.log.error("Find new crash reports %s", new_crash) + crash_diff = set(new_crash).difference( + set(ad.crash_report)) + if crash_diff: + ad.log.error("Find new crash reports %s", + list(crash_diff)) if result is not True and "telephony_auto_rerun" in self.user_params: self.teardown_test() # re-run only once, if re-run pass, mark as pass diff --git a/acts/framework/acts/test_utils/tel/tel_defines.py b/acts/framework/acts/test_utils/tel/tel_defines.py index 7886f6ad90..b3097a8618 100644 --- a/acts/framework/acts/test_utils/tel/tel_defines.py +++ b/acts/framework/acts/test_utils/tel/tel_defines.py @@ -26,6 +26,9 @@ MAX_WAIT_TIME_NW_SELECTION = 180 # Max time to wait for call drop MAX_WAIT_TIME_CALL_DROP = 60 +# Wait time between state check retry +WAIT_TIME_BETWEEN_STATE_CHECK = 5 + # Max time to wait after caller make a call and before # callee start ringing MAX_WAIT_TIME_CALLEE_RINGING = 90 @@ -67,7 +70,7 @@ MAX_WAIT_TIME_IMS_REGISTRATION = 120 # be used for wait after IMS registration. # Max time to wait for VoLTE enabled flag to be True -MAX_WAIT_TIME_VOLTE_ENABLED = MAX_WAIT_TIME_IMS_REGISTRATION + 20 +MAX_WAIT_TIME_VOLTE_ENABLED = MAX_WAIT_TIME_IMS_REGISTRATION + 60 # Max time to wait for WFC enabled flag to be True MAX_WAIT_TIME_WFC_ENABLED = MAX_WAIT_TIME_IMS_REGISTRATION + 120 diff --git a/acts/framework/acts/test_utils/tel/tel_test_utils.py b/acts/framework/acts/test_utils/tel/tel_test_utils.py index f7b7d21f27..562730ccf1 100644 --- a/acts/framework/acts/test_utils/tel/tel_test_utils.py +++ b/acts/framework/acts/test_utils/tel/tel_test_utils.py @@ -84,6 +84,7 @@ from acts.test_utils.tel.tel_defines import TELEPHONY_STATE_RINGING from acts.test_utils.tel.tel_defines import VOICEMAIL_DELETE_DIGIT from acts.test_utils.tel.tel_defines import WAIT_TIME_1XRTT_VOICE_ATTACH from acts.test_utils.tel.tel_defines import WAIT_TIME_ANDROID_STATE_SETTLING +from acts.test_utils.tel.tel_defines import WAIT_TIME_BETWEEN_STATE_CHECK from acts.test_utils.tel.tel_defines import WAIT_TIME_CHANGE_DATA_SUB_ID from acts.test_utils.tel.tel_defines import WAIT_TIME_IN_CALL from acts.test_utils.tel.tel_defines import WAIT_TIME_LEAVE_VOICE_MAIL @@ -731,7 +732,6 @@ def wait_and_answer_call_for_subscription( sub_id, incoming_number=None, incall_ui_display=INCALL_UI_DISPLAY_FOREGROUND, - checking_interval=10, timeout=MAX_WAIT_TIME_CALLEE_RINGING): """Wait for an incoming call on specified subscription and accepts the call. @@ -756,25 +756,20 @@ def wait_and_answer_call_for_subscription( ad.droid.telephonyStartTrackingCallStateForSubscription(sub_id) result = False try: - checking_retries = int(timeout / checking_interval) - for i in range(checking_retries): - if wait_for_ringing_call_for_subscription( - log, - ad, - sub_id, - incoming_number=None, - event_tracking_started=True, - timeout=checking_interval): - result = True - break - if not result: + if not _wait_for_droid_in_state( + log, + ad, + timeout, + wait_for_ringing_call_for_subscription, + sub_id, + incoming_number=None, + event_tracking_started=True): ad.log.info("Could not answer a call: phone never rang.") return False + time.sleep(WAIT_TIME_BETWEEN_STATE_CHECK) ad.log.info("Accept the ring call") - #New TelephonyManager.acceptRingCall need ANSWER_PHONE_CALLS permission - #Put it back after sl4a Manifest permission add it - #ad.droid.telecomAcceptRingingCall() - ad.adb.shell("input keyevent KEYCODE_CALL") + ad.droid.telecomAcceptRingingCall() + if wait_for_call_offhook_event( log, ad, sub_id, event_tracking_started=True, timeout=timeout) or ad.droid.telecomIsInCall(): @@ -1801,8 +1796,8 @@ def wait_for_cell_data_connection_for_subscription( field=DataConnectionStateContainer.DATA_CONNECTION_STATE, value=state_str) except Empty: - ad.log.inf("No expected event EventDataConnectionStateChanged %s", - state_str) + ad.log.info("No expected event EventDataConnectionStateChanged %s", + state_str) # TODO: Wait for <MAX_WAIT_TIME_CONNECTION_STATE_UPDATE> seconds for # data connection state. @@ -2152,8 +2147,8 @@ def _wait_for_droid_in_state(log, ad, max_time, state_check_func, *args, if state_check_func(log, ad, *args, **kwargs): return True - time.sleep(1) - max_time -= 1 + time.sleep(WAIT_TIME_BETWEEN_STATE_CHECK) + max_time -= WAIT_TIME_BETWEEN_STATE_CHECK return False @@ -2164,8 +2159,8 @@ def _wait_for_droid_in_state_for_subscription( if state_check_func(log, ad, sub_id, *args, **kwargs): return True - time.sleep(1) - max_time -= 1 + time.sleep(WAIT_TIME_BETWEEN_STATE_CHECK) + max_time -= WAIT_TIME_BETWEEN_STATE_CHECK return False @@ -2181,8 +2176,8 @@ def _wait_for_droids_in_state(log, ads, max_time, state_check_func, *args, if success: return True - time.sleep(1) - max_time -= 1 + time.sleep(WAIT_TIME_BETWEEN_STATE_CHECK) + max_time -= WAIT_TIME_BETWEEN_STATE_CHECK return False @@ -2261,11 +2256,10 @@ def _is_attached(log, ad, voice_or_data): def _is_attached_for_subscription(log, ad, sub_id, voice_or_data): - if get_network_rat_for_subscription(log, ad, sub_id, - voice_or_data) != RAT_UNKNOWN: - return True - else: - return False + rat = get_network_rat_for_subscription(log, ad, sub_id, voice_or_data) + ad.log.info("Sub_id %s network rate is %s for %s", sub_id, rat, + voice_or_data) + return rat != RAT_UNKNOWN def wait_for_voice_attach(log, ad, max_time): @@ -3423,33 +3417,30 @@ def ensure_phone_default_state(log, ad): Phone not in airplane mode. """ result = True - reset_preferred_network_type_to_allowable_range(log, ad) - #Toggle airplane mode to bring preferred network to default. - #It will also end active phone calls. - if not toggle_airplane_mode_by_adb(log, ad, True): - ad.log.error("ensure_phones_default_state:turn on airplane mode fail.") - result = False - if not toggle_airplane_mode_by_adb(log, ad, False): - ad.log.error( - "ensure_phones_default_state:turn off airplane mode fail.") - result = False + try: + ad.droid.telephonyFactoryReset() + if ad.droid.telecomIsInCall(): + ad.droid.telecomEndCall() + if not wait_for_droid_not_in_call(log, ad): + ad.log.error("Failed to end call on %s") + except Exception as e: + ad.log.error("Failure %s, toggle APM instead", e) + toggle_airplane_mode(log, ad, True, False) + ad.droid.telephonyToggleDataConnection(True) + if not toggle_airplane_mode(log, ad, False, False): + ad.log.error("Fail to turn off airplane mode") + result = False set_wfc_mode(log, ad, WFC_MODE_DISABLED) - toggle_video_calling(log, ad, False) - - if (set_wifi_to_default(log, ad)): - ad.log.error("Fail to set WIFI to default state") + set_wifi_to_default(log, ad) if not wait_for_not_network_rat( log, ad, RAT_FAMILY_WLAN, voice_or_data=NETWORK_SERVICE_DATA): ad.log.error("%s still in %s", NETWORK_SERVICE_DATA, RAT_FAMILY_WLAN) result = False - # make sure phone data is on - ad.droid.telephonyToggleDataConnection(True) - # Leave the delay time to make sure droid can recover to idle from ongoing call. time.sleep(WAIT_TIME_ANDROID_STATE_SETTLING) return result @@ -3511,22 +3502,17 @@ def ensure_wifi_connected(log, ad, wifi_ssid, wifi_pwd=None, retries=3): True if wifi is connected to wifi_ssid False if wifi is not connected to wifi_ssid """ - if not ad.droid.wifiCheckState(): - ad.log.info("Wifi state is down. Turn on Wifi") - #try to use wifi_test_utils after bug fix - #if not wifi_toggle_state(ad, new_state=True, assert_on_fail=False): - # ad.log.error("Fail to turn on WIFI") - # return False - ad.droid.wifiToggleState(True) - time.sleep(20) - if check_is_wifi_connected(log, ad, wifi_ssid): - ad.log.info("Wifi is connected to %s", wifi_ssid) - return True - else: - network = {WifiEnums.SSID_KEY: wifi_ssid} - if wifi_pwd: - network[WifiEnums.PWD_KEY] = wifi_pwd - for i in range(retries): + network = {WifiEnums.SSID_KEY: wifi_ssid} + if wifi_pwd: + network[WifiEnums.PWD_KEY] = wifi_pwd + for i in range(retries): + if not ad.droid.wifiCheckState(): + ad.log.info("Wifi state is down. Turn on Wifi") + ad.droid.wifiToggleState(True) + if check_is_wifi_connected(log, ad, wifi_ssid): + ad.log.info("Wifi is connected to %s", wifi_ssid) + return True + else: ad.log.info("Connecting to wifi %s", wifi_ssid) if ad.build_info["build_id"].startswith("O"): ad.droid.wifiConnectByConfig(network) @@ -3571,9 +3557,7 @@ def set_wifi_to_default(log, ad): Returns: boolean success (True) or failure (False) """ - if (not forget_all_wifi_networks(log, ad)): - ad.log.error("Fail to forget all wifi network") - return False + ad.droid.wifiFactoryReset() ad.droid.wifiToggleState(False) #try to use wifi_test_utils after bug fix #if not wifi_toggle_state(ad, new_state=False, assert_on_fail=False): diff --git a/acts/framework/acts/test_utils/tel/tel_voice_utils.py b/acts/framework/acts/test_utils/tel/tel_voice_utils.py index 7df72bf98a..eeabb94827 100644 --- a/acts/framework/acts/test_utils/tel/tel_voice_utils.py +++ b/acts/framework/acts/test_utils/tel/tel_voice_utils.py @@ -840,7 +840,7 @@ def phone_idle_volte_for_subscription(log, ad, sub_id): if not wait_for_volte_enabled(log, ad, MAX_WAIT_TIME_VOLTE_ENABLED): ad.log.error( "Failed to <report volte enabled true> within %s seconds.", - ad.serial, MAX_WAIT_TIME_VOLTE_ENABLED) + MAX_WAIT_TIME_VOLTE_ENABLED) return False return True |