Merge "Disable tryCell when UpstreamMonitor stop"

This commit is contained in:
Mark Chien
2021-05-24 02:27:13 +00:00
committed by Gerrit Code Review
2 changed files with 25 additions and 7 deletions

View File

@@ -191,7 +191,7 @@ public class UpstreamNetworkMonitor {
* check even tethering is not active yet. * check even tethering is not active yet.
*/ */
public void stop() { public void stop() {
releaseMobileNetworkRequest(); setTryCell(false);
releaseCallback(mListenAllCallback); releaseCallback(mListenAllCallback);
mListenAllCallback = null; mListenAllCallback = null;

View File

@@ -398,11 +398,6 @@ public class TetheringTest {
StateMachine mUpstreamNetworkMonitorSM; StateMachine mUpstreamNetworkMonitorSM;
ArrayList<IpServer> mIpv6CoordinatorNotifyList; ArrayList<IpServer> mIpv6CoordinatorNotifyList;
public void reset() {
mUpstreamNetworkMonitorSM = null;
mIpv6CoordinatorNotifyList = null;
}
@Override @Override
public BpfCoordinator getBpfCoordinator( public BpfCoordinator getBpfCoordinator(
BpfCoordinator.Dependencies deps) { BpfCoordinator.Dependencies deps) {
@@ -685,7 +680,6 @@ public class TetheringTest {
} }
private Tethering makeTethering() { private Tethering makeTethering() {
mTetheringDependencies.reset();
return new Tethering(mTetheringDependencies); return new Tethering(mTetheringDependencies);
} }
@@ -1084,6 +1078,11 @@ public class TetheringTest {
verify(mUpstreamNetworkMonitor, times(1)).setCurrentUpstream(upstreamState.network); 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, private void upstreamSelectionTestCommon(final boolean automatic, InOrder inOrder,
TestNetworkAgent mobile, TestNetworkAgent wifi) throws Exception { TestNetworkAgent mobile, TestNetworkAgent wifi) throws Exception {
// Enable automatic upstream selection. // Enable automatic upstream selection.
@@ -1107,6 +1106,7 @@ public class TetheringTest {
wifi.fakeConnect(); wifi.fakeConnect();
mCm.makeDefaultNetwork(wifi, BROADCAST_FIRST); mCm.makeDefaultNetwork(wifi, BROADCAST_FIRST);
mLooper.dispatchAll(); mLooper.dispatchAll();
inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false);
inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId);
} }
@@ -1129,6 +1129,7 @@ public class TetheringTest {
mCm.makeDefaultNetwork(wifi, BROADCAST_FIRST, doDispatchAll); mCm.makeDefaultNetwork(wifi, BROADCAST_FIRST, doDispatchAll);
mLooper.dispatchAll(); mLooper.dispatchAll();
inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false);
inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId);
mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST); mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST);
@@ -1137,6 +1138,7 @@ public class TetheringTest {
mCm.makeDefaultNetwork(wifi, CALLBACKS_FIRST); mCm.makeDefaultNetwork(wifi, CALLBACKS_FIRST);
mLooper.dispatchAll(); mLooper.dispatchAll();
inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false);
inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId);
mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST, doDispatchAll); mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST, doDispatchAll);
@@ -1155,6 +1157,7 @@ public class TetheringTest {
mLooper.dispatchAll(); mLooper.dispatchAll();
mobile.fakeDisconnect(); mobile.fakeDisconnect();
mLooper.dispatchAll(); mLooper.dispatchAll();
inOrder.verify(mUpstreamNetworkMonitor).setTryCell(true);
inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null);
mobile = new TestNetworkAgent(mCm, buildMobile464xlatUpstreamState()); mobile = new TestNetworkAgent(mCm, buildMobile464xlatUpstreamState());
@@ -1172,6 +1175,7 @@ public class TetheringTest {
mCm.makeDefaultNetwork(null, CALLBACKS_FIRST, doDispatchAll); mCm.makeDefaultNetwork(null, CALLBACKS_FIRST, doDispatchAll);
mobile.fakeDisconnect(); mobile.fakeDisconnect();
mLooper.dispatchAll(); mLooper.dispatchAll();
inOrder.verify(mUpstreamNetworkMonitor).setTryCell(true);
inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null);
mobile = new TestNetworkAgent(mCm, buildMobileDualStackUpstreamState()); mobile = new TestNetworkAgent(mCm, buildMobileDualStackUpstreamState());
@@ -1187,6 +1191,8 @@ public class TetheringTest {
mobile.fakeDisconnect(); mobile.fakeDisconnect();
mobile.sendLinkProperties(); mobile.sendLinkProperties();
mLooper.dispatchAll(); mLooper.dispatchAll();
verifyDisableTryCellWhenTetheringStop(inOrder);
} }
@Test @Test
@@ -1209,6 +1215,10 @@ public class TetheringTest {
mLooper.dispatchAll(); mLooper.dispatchAll();
mCm.makeDefaultNetwork(wifi, CALLBACKS_FIRST, null); mCm.makeDefaultNetwork(wifi, CALLBACKS_FIRST, null);
mLooper.dispatchAll(); mLooper.dispatchAll();
inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false);
inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(wifi.networkId);
verifyDisableTryCellWhenTetheringStop(inOrder);
} }
@Test @Test
@@ -1224,6 +1234,7 @@ public class TetheringTest {
// automatic mode would request dun again and choose it as upstream. // automatic mode would request dun again and choose it as upstream.
mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST); mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST);
mLooper.dispatchAll(); mLooper.dispatchAll();
inOrder.verify(mUpstreamNetworkMonitor).setTryCell(true);
ArgumentCaptor<NetworkCallback> captor = ArgumentCaptor.forClass(NetworkCallback.class); ArgumentCaptor<NetworkCallback> captor = ArgumentCaptor.forClass(NetworkCallback.class);
inOrder.verify(mCm).requestNetwork(any(), eq(0), eq(TYPE_MOBILE_DUN), any(), any()); inOrder.verify(mCm).requestNetwork(any(), eq(0), eq(TYPE_MOBILE_DUN), any(), any());
inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null);
@@ -1235,11 +1246,14 @@ public class TetheringTest {
// Lose and regain upstream again. // Lose and regain upstream again.
dun.fakeDisconnect(CALLBACKS_FIRST, doDispatchAll); dun.fakeDisconnect(CALLBACKS_FIRST, doDispatchAll);
mLooper.dispatchAll(); mLooper.dispatchAll();
inOrder.verify(mUpstreamNetworkMonitor).setTryCell(true);
inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(null);
inOrder.verify(mCm, never()).unregisterNetworkCallback(any(NetworkCallback.class)); inOrder.verify(mCm, never()).unregisterNetworkCallback(any(NetworkCallback.class));
dun.fakeConnect(CALLBACKS_FIRST, doDispatchAll); dun.fakeConnect(CALLBACKS_FIRST, doDispatchAll);
mLooper.dispatchAll(); mLooper.dispatchAll();
inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(dun.networkId); inOrder.verify(mUpstreamNetworkMonitor).setCurrentUpstream(dun.networkId);
verifyDisableTryCellWhenTetheringStop(inOrder);
} }
@Test @Test
@@ -1255,6 +1269,7 @@ public class TetheringTest {
// list). // list).
mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST); mCm.makeDefaultNetwork(mobile, CALLBACKS_FIRST);
mLooper.dispatchAll(); mLooper.dispatchAll();
inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false);
inOrder.verify(mUpstreamNetworkMonitor, never()).setCurrentUpstream(any()); inOrder.verify(mUpstreamNetworkMonitor, never()).setCurrentUpstream(any());
// BUG: when wifi disconnect, the dun request would not be filed again because wifi is // 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. // no longer be default network which do not have CONNECTIVIY_ACTION broadcast.
@@ -1276,8 +1291,11 @@ public class TetheringTest {
mLooper.dispatchAll(); mLooper.dispatchAll();
// BUG: dun has higher priority than wifi but tethering don't file dun request because // BUG: dun has higher priority than wifi but tethering don't file dun request because
// current upstream is wifi. // current upstream is wifi.
inOrder.verify(mUpstreamNetworkMonitor).setTryCell(false);
inOrder.verify(mCm, never()).requestNetwork(any(), eq(0), eq(TYPE_MOBILE_DUN), any(), inOrder.verify(mCm, never()).requestNetwork(any(), eq(0), eq(TYPE_MOBILE_DUN), any(),
any()); any());
verifyDisableTryCellWhenTetheringStop(inOrder);
} }
private void chooseDunUpstreamTestCommon(final boolean automatic, InOrder inOrder, private void chooseDunUpstreamTestCommon(final boolean automatic, InOrder inOrder,