DO NOT MERGE: Unbreak TetherInterfaceStateMachineTest.
This was broken by the implementation of IPv6 tethering, which relies on various private classes which end up calling unmockable final classes like NetworkInterface. Making everything public like this is almost certainly not the best way of fixing this test, but on the other hand there is value to the test continuing to pass. Test: runtest frameworks-net # Everything passes. Test: IPv6 tethering continues to work. (cherry picked from commit7e0eeca8ba) (cherry picked from commit5bce5a16b1) Change-Id: I3f399188f77fe3e5249443dcb61018a22c29d857
This commit is contained in:
@@ -70,6 +70,7 @@ import com.android.internal.util.State;
|
||||
import com.android.internal.util.StateMachine;
|
||||
import com.android.server.connectivity.tethering.IControlsTethering;
|
||||
import com.android.server.connectivity.tethering.IPv6TetheringCoordinator;
|
||||
import com.android.server.connectivity.tethering.IPv6TetheringInterfaceServices;
|
||||
import com.android.server.connectivity.tethering.TetherInterfaceStateMachine;
|
||||
import com.android.server.connectivity.tethering.UpstreamNetworkMonitor;
|
||||
import com.android.server.net.BaseNetworkObserver;
|
||||
@@ -1748,7 +1749,8 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
|
||||
private void trackNewTetherableInterface(String iface, int interfaceType) {
|
||||
TetherState tetherState;
|
||||
tetherState = new TetherState(new TetherInterfaceStateMachine(iface, mLooper,
|
||||
interfaceType, mNMService, mStatsService, this));
|
||||
interfaceType, mNMService, mStatsService, this,
|
||||
new IPv6TetheringInterfaceServices(iface, mNMService)));
|
||||
mTetherStates.put(iface, tetherState);
|
||||
tetherState.mStateMachine.start();
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ import java.util.Objects;
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
class IPv6TetheringInterfaceServices {
|
||||
public class IPv6TetheringInterfaceServices {
|
||||
private static final String TAG = IPv6TetheringInterfaceServices.class.getSimpleName();
|
||||
private static final IpPrefix LINK_LOCAL_PREFIX = new IpPrefix("fe80::/64");
|
||||
private static final int RFC7421_IP_PREFIX_LENGTH = 64;
|
||||
@@ -59,7 +59,7 @@ class IPv6TetheringInterfaceServices {
|
||||
private RouterAdvertisementDaemon mRaDaemon;
|
||||
private RaParams mLastRaParams;
|
||||
|
||||
IPv6TetheringInterfaceServices(String ifname, INetworkManagementService nms) {
|
||||
public IPv6TetheringInterfaceServices(String ifname, INetworkManagementService nms) {
|
||||
mIfName = ifname;
|
||||
mNMService = nms;
|
||||
}
|
||||
|
||||
@@ -94,14 +94,14 @@ public class TetherInterfaceStateMachine extends StateMachine {
|
||||
|
||||
public TetherInterfaceStateMachine(String ifaceName, Looper looper, int interfaceType,
|
||||
INetworkManagementService nMService, INetworkStatsService statsService,
|
||||
IControlsTethering tetherController) {
|
||||
IControlsTethering tetherController, IPv6TetheringInterfaceServices ipv6Svc) {
|
||||
super(ifaceName, looper);
|
||||
mNMService = nMService;
|
||||
mStatsService = statsService;
|
||||
mTetherController = tetherController;
|
||||
mIfaceName = ifaceName;
|
||||
mInterfaceType = interfaceType;
|
||||
mIPv6TetherSvc = new IPv6TetheringInterfaceServices(mIfaceName, mNMService);
|
||||
mIPv6TetherSvc = ipv6Svc;
|
||||
mLastError = ConnectivityManager.TETHER_ERROR_NO_ERROR;
|
||||
|
||||
mInitialState = new InitialState();
|
||||
|
||||
@@ -59,13 +59,14 @@ public class TetherInterfaceStateMachineTest {
|
||||
@Mock private INetworkStatsService mStatsService;
|
||||
@Mock private IControlsTethering mTetherHelper;
|
||||
@Mock private InterfaceConfiguration mInterfaceConfiguration;
|
||||
@Mock private IPv6TetheringInterfaceServices mIPv6TetheringInterfaceServices;
|
||||
|
||||
private final TestLooper mLooper = new TestLooper();
|
||||
private TetherInterfaceStateMachine mTestedSm;
|
||||
|
||||
private void initStateMachine(int interfaceType) throws Exception {
|
||||
mTestedSm = new TetherInterfaceStateMachine(IFACE_NAME, mLooper.getLooper(), interfaceType,
|
||||
mNMService, mStatsService, mTetherHelper);
|
||||
mNMService, mStatsService, mTetherHelper, mIPv6TetheringInterfaceServices);
|
||||
mTestedSm.start();
|
||||
// Starting the state machine always puts us in a consistent state and notifies
|
||||
// the test of the world that we've changed from an unknown to available state.
|
||||
@@ -91,7 +92,8 @@ public class TetherInterfaceStateMachineTest {
|
||||
@Test
|
||||
public void startsOutAvailable() {
|
||||
mTestedSm = new TetherInterfaceStateMachine(IFACE_NAME, mLooper.getLooper(),
|
||||
ConnectivityManager.TETHERING_BLUETOOTH, mNMService, mStatsService, mTetherHelper);
|
||||
ConnectivityManager.TETHERING_BLUETOOTH, mNMService, mStatsService, mTetherHelper,
|
||||
mIPv6TetheringInterfaceServices);
|
||||
mTestedSm.start();
|
||||
mLooper.dispatchAll();
|
||||
verify(mTetherHelper).notifyInterfaceStateChange(
|
||||
@@ -274,4 +276,4 @@ public class TetherInterfaceStateMachineTest {
|
||||
upstreamIface);
|
||||
mLooper.dispatchAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user