diff --git a/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java b/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java index e615334bbb..cd27318567 100644 --- a/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java +++ b/Tethering/src/com/android/networkstack/tethering/UpstreamNetworkMonitor.java @@ -191,7 +191,7 @@ public class UpstreamNetworkMonitor { * check even tethering is not active yet. */ public void stop() { - releaseMobileNetworkRequest(); + setTryCell(false); releaseCallback(mListenAllCallback); mListenAllCallback = null; diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java index f1d8c0f6ea..19a89365bd 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java @@ -401,11 +401,6 @@ public class TetheringTest { StateMachine mUpstreamNetworkMonitorSM; ArrayList mIpv6CoordinatorNotifyList; - public void reset() { - mUpstreamNetworkMonitorSM = null; - mIpv6CoordinatorNotifyList = null; - } - @Override public BpfCoordinator getBpfCoordinator( BpfCoordinator.Dependencies deps) { @@ -688,7 +683,6 @@ public class TetheringTest { } private Tethering makeTethering() { - mTetheringDependencies.reset(); return new Tethering(mTetheringDependencies); } @@ -1087,6 +1081,11 @@ public class TetheringTest { verify(mUpstreamNetworkMonitor, times(1)).setCurrentUpstream(upstreamState.network); } + private void verifyDisableTryCellWhenTetheringStop(InOrder inOrder) { + runStopUSBTethering(); + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false); + } + private void upstreamSelectionTestCommon(final boolean automatic, InOrder inOrder, TestNetworkAgent mobile, TestNetworkAgent wifi) throws Exception { // Enable automatic upstream selection. @@ -1110,6 +1109,7 @@ public class TetheringTest { wifi.fakeConnect(); mCm.makeDefaultNetwork(wifi, BROADCAST_FIRST); mLooper.dispatchAll(); + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId); } @@ -1132,6 +1132,7 @@ public class TetheringTest { mCm.makeDefaultNetwork(wifi, BROADCAST_FIRST, doDispatchAll); mLooper.dispatchAll(); + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId); mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST); @@ -1140,6 +1141,7 @@ public class TetheringTest { mCm.makeDefaultNetwork(wifi, CALLBACKS_FIRST); mLooper.dispatchAll(); + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId); mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST, doDispatchAll); @@ -1158,6 +1160,7 @@ public class TetheringTest { mLooper.dispatchAll(); mobile.fakeDisconnect(); mLooper.dispatchAll(); + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(true); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null); mobile = new TestNetworkAgent(mCm, buildMobile464xlatUpstreamState()); @@ -1175,6 +1178,7 @@ public class TetheringTest { mCm.makeDefaultNetwork(null, CALLBACKS_FIRST, doDispatchAll); mobile.fakeDisconnect(); mLooper.dispatchAll(); + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(true); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null); mobile = new TestNetworkAgent(mCm, buildMobileDualStackUpstreamState()); @@ -1190,6 +1194,8 @@ public class TetheringTest { mobile.fakeDisconnect(); mobile.sendLinkProperties(); mLooper.dispatchAll(); + + verifyDisableTryCellWhenTetheringStop(inOrder); } @Test @@ -1212,6 +1218,10 @@ public class TetheringTest { mLooper.dispatchAll(); mCm.makeDefaultNetwork(wifi, CALLBACKS_FIRST, null); mLooper.dispatchAll(); + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false); + inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId); + + verifyDisableTryCellWhenTetheringStop(inOrder); } @Test @@ -1227,6 +1237,7 @@ public class TetheringTest { // automatic mode would request dun again and choose it as upstream. mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST); mLooper.dispatchAll(); + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(true); ArgumentCaptor captor = ArgumentCaptor.forClass(NetworkCallback.class); inOrder.verify(mCm).requestNetwork(any(), eq(0), eq(TYPE_MOBILE_DUN), any(), any()); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null); @@ -1238,11 +1249,14 @@ public class TetheringTest { // Lose and regain upstream again. dun.fakeDisconnect(CALLBACKS_FIRST, doDispatchAll); mLooper.dispatchAll(); + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(true); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null); inOrder.verify(mCm, never()).unregisterNetworkCallback(any(NetworkCallback.class)); dun.fakeConnect(CALLBACKS_FIRST, doDispatchAll); mLooper.dispatchAll(); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(dun.networkId); + + verifyDisableTryCellWhenTetheringStop(inOrder); } @Test @@ -1258,6 +1272,7 @@ public class TetheringTest { // list). mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST); mLooper.dispatchAll(); + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false); inOrder.verify(mUpstreamNetworkMonitor, never()).setCurrentUpstream(any()); // BUG: when wifi disconnect, the dun request would not be filed again because wifi is // no longer be default network which do not have CONNECTIVIY_ACTION broadcast. @@ -1279,8 +1294,11 @@ public class TetheringTest { mLooper.dispatchAll(); // BUG: dun has higher priority than wifi but tethering don't file dun request because // current upstream is wifi. + inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false); inOrder.verify(mCm, never()).requestNetwork(any(), eq(0), eq(TYPE_MOBILE_DUN), any(), any()); + + verifyDisableTryCellWhenTetheringStop(inOrder); } private void chooseDunUpstreamTestCommon(final boolean automatic, InOrder inOrder,