Loading src/java/com/android/internal/telephony/data/DataNetwork.java +8 −1 Original line number Diff line number Diff line Loading @@ -1109,7 +1109,14 @@ public class DataNetwork extends StateMachine { log("Ignored " + eventToString(msg.what)); break; case EVENT_START_HANDOVER: log("Ignore the handover to " + AccessNetworkConstants // We reach here if network is not in the connected/connecting state. if (msg.obj != null) { // Cancel it because it's either HO in progress or will soon disconnect. // Either case we want to clean up obsolete retry attempts. DataHandoverRetryEntry retryEntry = (DataHandoverRetryEntry) msg.obj; retryEntry.setState(DataRetryEntry.RETRY_STATE_CANCELLED); } log("Ignore retry for the handover to " + AccessNetworkConstants .transportTypeToString(msg.arg1) + " request."); break; case EVENT_RADIO_NOT_AVAILABLE: Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +1 −1 Original line number Diff line number Diff line Loading @@ -2645,7 +2645,7 @@ public class DataNetworkController extends Handler { return; } logl("Start handover " + dataNetwork + " to " logl("onDataNetworkHandoverRetry: Start handover " + dataNetwork + " to " + AccessNetworkConstants.transportTypeToString(preferredTransport) + ", " + dataHandoverRetryEntry); dataNetwork.startHandover(preferredTransport, dataHandoverRetryEntry); Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +49 −0 Original line number Diff line number Diff line Loading @@ -1993,6 +1993,55 @@ public class DataNetworkControllerTest extends TelephonyTest { AccessNetworkConstants.TRANSPORT_TYPE_WLAN); } @Test public void testHandoverDataNetworkDuplicateRetry() throws Exception { testSetupImsDataNetwork(); DataNetwork dataNetwork = getDataNetworks().get(0); doReturn(AccessNetworkConstants.TRANSPORT_TYPE_WLAN) .when(mAccessNetworksManager).getPreferredTransportByNetworkCapability(anyInt()); DataRetryManager.DataHandoverRetryEntry retry1 = new DataRetryManager.DataHandoverRetryEntry.Builder<>() .setDataNetwork(dataNetwork) .build(); DataRetryManager.DataHandoverRetryEntry retry2 = new DataRetryManager.DataHandoverRetryEntry.Builder<>() .setDataNetwork(dataNetwork) .build(); final Message msg1 = new Message(); msg1.what = 4 /*EVENT_DATA_HANDOVER_RETRY*/; msg1.obj = retry1; final Message msg2 = new Message(); msg2.what = 4 /*EVENT_DATA_HANDOVER_RETRY*/; msg2.obj = retry2; Field field = DataRetryManager.class.getDeclaredField("mDataRetryEntries"); field.setAccessible(true); List<DataRetryManager.DataRetryEntry> dataRetryEntries = (List<DataRetryManager.DataRetryEntry>) field.get(mDataNetworkControllerUT.getDataRetryManager()); dataRetryEntries.add(retry1); dataRetryEntries.add(retry2); mDataNetworkControllerUT.getDataRetryManager().sendMessageDelayed(msg1, 0); mDataNetworkControllerUT.getDataRetryManager().sendMessageDelayed(msg2, 0); processAllFutureMessages(); setSuccessfulSetupDataResponse(mMockedWlanDataServiceManager, 1); processAllMessages(); dataNetwork = getDataNetworks().get(0); assertThat(dataNetwork.getTransport()).isEqualTo( AccessNetworkConstants.TRANSPORT_TYPE_WLAN); verify(mMockedWlanDataServiceManager).setupDataCall(anyInt(), any(DataProfile.class), anyBoolean(), anyBoolean(), eq(DataService.REQUEST_REASON_HANDOVER), any(), anyInt(), any(), any(), anyBoolean(), any(Message.class)); assertThat(mDataNetworkControllerUT.getDataRetryManager() .isAnyHandoverRetryScheduled(dataNetwork)).isFalse(); } @Test public void testHandoverDataNetworkRetryReachedMaximum() throws Exception { testSetupImsDataNetwork(); Loading Loading
src/java/com/android/internal/telephony/data/DataNetwork.java +8 −1 Original line number Diff line number Diff line Loading @@ -1109,7 +1109,14 @@ public class DataNetwork extends StateMachine { log("Ignored " + eventToString(msg.what)); break; case EVENT_START_HANDOVER: log("Ignore the handover to " + AccessNetworkConstants // We reach here if network is not in the connected/connecting state. if (msg.obj != null) { // Cancel it because it's either HO in progress or will soon disconnect. // Either case we want to clean up obsolete retry attempts. DataHandoverRetryEntry retryEntry = (DataHandoverRetryEntry) msg.obj; retryEntry.setState(DataRetryEntry.RETRY_STATE_CANCELLED); } log("Ignore retry for the handover to " + AccessNetworkConstants .transportTypeToString(msg.arg1) + " request."); break; case EVENT_RADIO_NOT_AVAILABLE: Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +1 −1 Original line number Diff line number Diff line Loading @@ -2645,7 +2645,7 @@ public class DataNetworkController extends Handler { return; } logl("Start handover " + dataNetwork + " to " logl("onDataNetworkHandoverRetry: Start handover " + dataNetwork + " to " + AccessNetworkConstants.transportTypeToString(preferredTransport) + ", " + dataHandoverRetryEntry); dataNetwork.startHandover(preferredTransport, dataHandoverRetryEntry); Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +49 −0 Original line number Diff line number Diff line Loading @@ -1993,6 +1993,55 @@ public class DataNetworkControllerTest extends TelephonyTest { AccessNetworkConstants.TRANSPORT_TYPE_WLAN); } @Test public void testHandoverDataNetworkDuplicateRetry() throws Exception { testSetupImsDataNetwork(); DataNetwork dataNetwork = getDataNetworks().get(0); doReturn(AccessNetworkConstants.TRANSPORT_TYPE_WLAN) .when(mAccessNetworksManager).getPreferredTransportByNetworkCapability(anyInt()); DataRetryManager.DataHandoverRetryEntry retry1 = new DataRetryManager.DataHandoverRetryEntry.Builder<>() .setDataNetwork(dataNetwork) .build(); DataRetryManager.DataHandoverRetryEntry retry2 = new DataRetryManager.DataHandoverRetryEntry.Builder<>() .setDataNetwork(dataNetwork) .build(); final Message msg1 = new Message(); msg1.what = 4 /*EVENT_DATA_HANDOVER_RETRY*/; msg1.obj = retry1; final Message msg2 = new Message(); msg2.what = 4 /*EVENT_DATA_HANDOVER_RETRY*/; msg2.obj = retry2; Field field = DataRetryManager.class.getDeclaredField("mDataRetryEntries"); field.setAccessible(true); List<DataRetryManager.DataRetryEntry> dataRetryEntries = (List<DataRetryManager.DataRetryEntry>) field.get(mDataNetworkControllerUT.getDataRetryManager()); dataRetryEntries.add(retry1); dataRetryEntries.add(retry2); mDataNetworkControllerUT.getDataRetryManager().sendMessageDelayed(msg1, 0); mDataNetworkControllerUT.getDataRetryManager().sendMessageDelayed(msg2, 0); processAllFutureMessages(); setSuccessfulSetupDataResponse(mMockedWlanDataServiceManager, 1); processAllMessages(); dataNetwork = getDataNetworks().get(0); assertThat(dataNetwork.getTransport()).isEqualTo( AccessNetworkConstants.TRANSPORT_TYPE_WLAN); verify(mMockedWlanDataServiceManager).setupDataCall(anyInt(), any(DataProfile.class), anyBoolean(), anyBoolean(), eq(DataService.REQUEST_REASON_HANDOVER), any(), anyInt(), any(), any(), anyBoolean(), any(Message.class)); assertThat(mDataNetworkControllerUT.getDataRetryManager() .isAnyHandoverRetryScheduled(dataNetwork)).isFalse(); } @Test public void testHandoverDataNetworkRetryReachedMaximum() throws Exception { testSetupImsDataNetwork(); Loading