Merge "Create a TetherInterfaceStateMachine when told the interface name." into oc-dev

This commit is contained in:
TreeHugger Robot
2017-06-22 11:27:28 +00:00
committed by Android (Google) Code Review
2 changed files with 43 additions and 7 deletions

View File

@@ -846,6 +846,7 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
}
if (!TextUtils.isEmpty(ifname)) {
maybeTrackNewInterfaceLocked(ifname, ConnectivityManager.TETHERING_WIFI);
changeInterfaceState(ifname, ipServingMode);
} else {
mLog.e(String.format(
@@ -1876,7 +1877,10 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
mLog.log(iface + " is not a tetherable iface, ignoring");
return;
}
maybeTrackNewInterfaceLocked(iface, interfaceType);
}
private void maybeTrackNewInterfaceLocked(final String iface, int interfaceType) {
// If we have already started a TISM for this interface, skip.
if (mTetherStates.containsKey(iface)) {
mLog.log("active iface (" + iface + ") reported as added, ignoring");

View File

@@ -235,32 +235,51 @@ public class TetheringTest {
mIntents.remove(bcast);
}
@Test
public void failingLocalOnlyHotspotLegacyApBroadcast() throws Exception {
public void failingLocalOnlyHotspotLegacyApBroadcast(
boolean emulateInterfaceStatusChanged) throws Exception {
when(mConnectivityManager.isTetheringSupported()).thenReturn(true);
// Emulate externally-visible WifiManager effects, causing the
// per-interface state machine to start up, and telling us that
// hotspot mode is to be started.
mTethering.interfaceStatusChanged(mTestIfname, true);
if (emulateInterfaceStatusChanged) {
mTethering.interfaceStatusChanged(mTestIfname, true);
}
sendWifiApStateChanged(WIFI_AP_STATE_ENABLED);
mLooper.dispatchAll();
verify(mConnectivityManager, atLeastOnce()).isTetheringSupported();
verifyTetheringBroadcast(mTestIfname, ConnectivityManager.EXTRA_AVAILABLE_TETHER);
// If, and only if, Tethering received an interface status changed
// then it creates a TetherInterfaceStateMachine and sends out a
// broadcast indicating that the interface is "available".
if (emulateInterfaceStatusChanged) {
verify(mConnectivityManager, atLeastOnce()).isTetheringSupported();
verifyTetheringBroadcast(mTestIfname, ConnectivityManager.EXTRA_AVAILABLE_TETHER);
}
verifyNoMoreInteractions(mConnectivityManager);
verifyNoMoreInteractions(mNMService);
verifyNoMoreInteractions(mWifiManager);
}
@Test
public void workingLocalOnlyHotspotEnrichedApBroadcast() throws Exception {
public void failingLocalOnlyHotspotLegacyApBroadcastWithIfaceStatusChanged() throws Exception {
failingLocalOnlyHotspotLegacyApBroadcast(true);
}
@Test
public void failingLocalOnlyHotspotLegacyApBroadcastSansIfaceStatusChanged() throws Exception {
failingLocalOnlyHotspotLegacyApBroadcast(false);
}
public void workingLocalOnlyHotspotEnrichedApBroadcast(
boolean emulateInterfaceStatusChanged) throws Exception {
when(mConnectivityManager.isTetheringSupported()).thenReturn(true);
// Emulate externally-visible WifiManager effects, causing the
// per-interface state machine to start up, and telling us that
// hotspot mode is to be started.
mTethering.interfaceStatusChanged(mTestIfname, true);
if (emulateInterfaceStatusChanged) {
mTethering.interfaceStatusChanged(mTestIfname, true);
}
sendWifiApStateChanged(WIFI_AP_STATE_ENABLED, mTestIfname, IFACE_IP_MODE_LOCAL_ONLY);
mLooper.dispatchAll();
@@ -304,6 +323,17 @@ public class TetheringTest {
mTethering.getLastTetherError(mTestIfname));
}
@Test
public void workingLocalOnlyHotspotEnrichedApBroadcastWithIfaceChanged() throws Exception {
workingLocalOnlyHotspotEnrichedApBroadcast(true);
}
@Test
public void workingLocalOnlyHotspotEnrichedApBroadcastSansIfaceChanged() throws Exception {
workingLocalOnlyHotspotEnrichedApBroadcast(false);
}
// TODO: Test with and without interfaceStatusChanged().
@Test
public void failingWifiTetheringLegacyApBroadcast() throws Exception {
when(mConnectivityManager.isTetheringSupported()).thenReturn(true);
@@ -331,6 +361,7 @@ public class TetheringTest {
verifyNoMoreInteractions(mWifiManager);
}
// TODO: Test with and without interfaceStatusChanged().
@Test
public void workingWifiTetheringEnrichedApBroadcast() throws Exception {
when(mConnectivityManager.isTetheringSupported()).thenReturn(true);
@@ -412,6 +443,7 @@ public class TetheringTest {
mTethering.getLastTetherError(mTestIfname));
}
// TODO: Test with and without interfaceStatusChanged().
@Test
public void failureEnablingIpForwarding() throws Exception {
when(mConnectivityManager.isTetheringSupported()).thenReturn(true);