Loading src/java/com/android/internal/telephony/data/DataNetwork.java +3 −1 Original line number Diff line number Diff line Loading @@ -3146,8 +3146,10 @@ public class DataNetwork extends StateMachine { // Handover failed. long retry = response != null ? response.getRetryDurationMillis() : DataCallResponse.RETRY_DURATION_UNDEFINED; // If the handover mode is unspecified, default to HANDOVER_FAILURE_MODE_UNKNOWN, // which will retry handover if retry rules are defined. int handoverFailureMode = response != null ? response.getHandoverFailureMode() : DataCallResponse.HANDOVER_FAILURE_MODE_LEGACY; : DataCallResponse.HANDOVER_FAILURE_MODE_UNKNOWN; if (retryEntry != null) retryEntry.setState(DataRetryEntry.RETRY_STATE_FAILED); mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onHandoverFailed(DataNetwork.this, Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +38 −0 Original line number Diff line number Diff line Loading @@ -2068,6 +2068,44 @@ public class DataNetworkControllerTest extends TelephonyTest { verifyConnectedNetworkHasDataProfile(mImsIwlanDataProfile); } @Test public void testHandoverDataNetworkFailedNullResponse() throws Exception { testSetupImsDataNetwork(); DataNetwork dataNetwork = getDataNetworks().get(0); // Set failed null response doAnswer(invocation -> { final Message msg = (Message) invocation.getArguments()[10]; msg.getData().putParcelable("data_call_response", null); msg.arg1 = DataServiceCallback.RESULT_ERROR_TEMPORARILY_UNAVAILABLE; msg.getTarget().sendMessageDelayed(msg, 0); return null; }).when(mMockedWlanDataServiceManager).setupDataCall(anyInt(), any(DataProfile.class), anyBoolean(), anyBoolean(), eq(DataService.REQUEST_REASON_HANDOVER), any(), anyInt(), any(), any(), anyBoolean(), any(Message.class)); // Attempt handover updateTransport(NetworkCapabilities.NET_CAPABILITY_IMS, AccessNetworkConstants.TRANSPORT_TYPE_WLAN); processAllMessages(); // Verify that data network is still on cellular and data network was not torn down assertThat(dataNetwork.getTransport()).isEqualTo( AccessNetworkConstants.TRANSPORT_TYPE_WWAN); assertThat(dataNetwork.isConnected()).isTrue(); // Process all handover retries and failures processAllFutureMessages(); // Verify that original data network was torn down and new connection set up on cellular assertThat(dataNetwork.getTransport()).isEqualTo( AccessNetworkConstants.TRANSPORT_TYPE_WWAN); assertThat(dataNetwork.isConnected()).isFalse(); dataNetwork = getDataNetworks().get(0); assertThat(dataNetwork.getTransport()).isEqualTo( AccessNetworkConstants.TRANSPORT_TYPE_WLAN); assertThat(dataNetwork.isConnected()).isTrue(); } @Test public void testSetupDataNetworkRetrySuggestedByNetwork() { Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -921,7 +921,7 @@ public class DataNetworkTest extends TelephonyTest { verify(mDataNetworkCallback).onHandoverFailed(eq(mDataNetworkUT), eq(DataFailCause.SERVICE_TEMPORARILY_UNAVAILABLE), eq(-1L), eq(DataCallResponse.HANDOVER_FAILURE_MODE_LEGACY)); eq(DataCallResponse.HANDOVER_FAILURE_MODE_UNKNOWN)); verify(mLinkBandwidthEstimator, never()).unregisterForBandwidthChanged( eq(mDataNetworkUT.getHandler())); assertThat(mDataNetworkUT.getTransport()) Loading Loading
src/java/com/android/internal/telephony/data/DataNetwork.java +3 −1 Original line number Diff line number Diff line Loading @@ -3146,8 +3146,10 @@ public class DataNetwork extends StateMachine { // Handover failed. long retry = response != null ? response.getRetryDurationMillis() : DataCallResponse.RETRY_DURATION_UNDEFINED; // If the handover mode is unspecified, default to HANDOVER_FAILURE_MODE_UNKNOWN, // which will retry handover if retry rules are defined. int handoverFailureMode = response != null ? response.getHandoverFailureMode() : DataCallResponse.HANDOVER_FAILURE_MODE_LEGACY; : DataCallResponse.HANDOVER_FAILURE_MODE_UNKNOWN; if (retryEntry != null) retryEntry.setState(DataRetryEntry.RETRY_STATE_FAILED); mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onHandoverFailed(DataNetwork.this, Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +38 −0 Original line number Diff line number Diff line Loading @@ -2068,6 +2068,44 @@ public class DataNetworkControllerTest extends TelephonyTest { verifyConnectedNetworkHasDataProfile(mImsIwlanDataProfile); } @Test public void testHandoverDataNetworkFailedNullResponse() throws Exception { testSetupImsDataNetwork(); DataNetwork dataNetwork = getDataNetworks().get(0); // Set failed null response doAnswer(invocation -> { final Message msg = (Message) invocation.getArguments()[10]; msg.getData().putParcelable("data_call_response", null); msg.arg1 = DataServiceCallback.RESULT_ERROR_TEMPORARILY_UNAVAILABLE; msg.getTarget().sendMessageDelayed(msg, 0); return null; }).when(mMockedWlanDataServiceManager).setupDataCall(anyInt(), any(DataProfile.class), anyBoolean(), anyBoolean(), eq(DataService.REQUEST_REASON_HANDOVER), any(), anyInt(), any(), any(), anyBoolean(), any(Message.class)); // Attempt handover updateTransport(NetworkCapabilities.NET_CAPABILITY_IMS, AccessNetworkConstants.TRANSPORT_TYPE_WLAN); processAllMessages(); // Verify that data network is still on cellular and data network was not torn down assertThat(dataNetwork.getTransport()).isEqualTo( AccessNetworkConstants.TRANSPORT_TYPE_WWAN); assertThat(dataNetwork.isConnected()).isTrue(); // Process all handover retries and failures processAllFutureMessages(); // Verify that original data network was torn down and new connection set up on cellular assertThat(dataNetwork.getTransport()).isEqualTo( AccessNetworkConstants.TRANSPORT_TYPE_WWAN); assertThat(dataNetwork.isConnected()).isFalse(); dataNetwork = getDataNetworks().get(0); assertThat(dataNetwork.getTransport()).isEqualTo( AccessNetworkConstants.TRANSPORT_TYPE_WLAN); assertThat(dataNetwork.isConnected()).isTrue(); } @Test public void testSetupDataNetworkRetrySuggestedByNetwork() { Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -921,7 +921,7 @@ public class DataNetworkTest extends TelephonyTest { verify(mDataNetworkCallback).onHandoverFailed(eq(mDataNetworkUT), eq(DataFailCause.SERVICE_TEMPORARILY_UNAVAILABLE), eq(-1L), eq(DataCallResponse.HANDOVER_FAILURE_MODE_LEGACY)); eq(DataCallResponse.HANDOVER_FAILURE_MODE_UNKNOWN)); verify(mLinkBandwidthEstimator, never()).unregisterForBandwidthChanged( eq(mDataNetworkUT.getHandler())); assertThat(mDataNetworkUT.getTransport()) Loading