Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5bce5a16 authored by Lorenzo Colitti's avatar Lorenzo Colitti
Browse files

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 commit 7e0eeca8)

Change-Id: I8a3cf466871c026f4ae0f5cfa73071338cdf5b7e
parent 7ceef950
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -71,6 +71,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.net.BaseNetworkObserver;

@@ -1939,7 +1940,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();
    }
+2 −2
Original line number Diff line number Diff line
@@ -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;
    }
+2 −2
Original line number Diff line number Diff line
@@ -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();
+5 −3
Original line number Diff line number Diff line
@@ -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(