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

Commit 47bd31b7 authored by Chalard Jean's avatar Chalard Jean
Browse files

Migrate NetworkAgentWrapper to the new NA API

Test: FrameworksNetTests NetworkStackTests
Bug: 167544279
Change-Id: I5d53a938572682dea827ea681596226b1e271aa6
parent 06ae59be
Loading
Loading
Loading
Loading
+25 −18
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ import static com.android.server.ConnectivityServiceTestUtils.transportToLegacyT
import static junit.framework.Assert.assertTrue;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.fail;

import android.content.Context;
import android.net.ConnectivityManager;
@@ -38,7 +38,6 @@ import android.net.Network;
import android.net.NetworkAgent;
import android.net.NetworkAgentConfig;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkProvider;
import android.net.NetworkSpecifier;
import android.net.SocketKeepalive;
@@ -53,9 +52,9 @@ import com.android.testutils.HandlerUtils;
import com.android.testutils.TestableNetworkCallback;

import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;

public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
    private final NetworkInfo mNetworkInfo;
    private final NetworkCapabilities mNetworkCapabilities;
    private final HandlerThread mHandlerThread;
    private final Context mContext;
@@ -63,6 +62,7 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {

    private final ConditionVariable mDisconnected = new ConditionVariable();
    private final ConditionVariable mPreventReconnectReceived = new ConditionVariable();
    private final AtomicBoolean mConnected = new AtomicBoolean(false);
    private int mScore;
    private NetworkAgent mNetworkAgent;
    private int mStartKeepaliveError = SocketKeepalive.ERROR_UNSUPPORTED;
@@ -76,7 +76,6 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
            NetworkCapabilities ncTemplate, Context context) throws Exception {
        final int type = transportToLegacyType(transport);
        final String typeName = ConnectivityManager.getNetworkTypeName(type);
        mNetworkInfo = new NetworkInfo(type, 0, typeName, "Mock");
        mNetworkCapabilities = (ncTemplate != null) ? ncTemplate : new NetworkCapabilities();
        mNetworkCapabilities.addCapability(NET_CAPABILITY_NOT_SUSPENDED);
        mNetworkCapabilities.addTransportType(transport);
@@ -108,22 +107,29 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
        mHandlerThread = new HandlerThread(mLogTag);
        mHandlerThread.start();

        mNetworkAgent = makeNetworkAgent(linkProperties);
        mNetworkAgent = makeNetworkAgent(linkProperties, type, typeName);
    }

    protected InstrumentedNetworkAgent makeNetworkAgent(LinkProperties linkProperties)
    protected InstrumentedNetworkAgent makeNetworkAgent(LinkProperties linkProperties,
            final int type, final String typeName)
            throws Exception {
        return new InstrumentedNetworkAgent(this, linkProperties);
        return new InstrumentedNetworkAgent(this, linkProperties, type, typeName);
    }

    public static class InstrumentedNetworkAgent extends NetworkAgent {
        private final NetworkAgentWrapper mWrapper;

        public InstrumentedNetworkAgent(NetworkAgentWrapper wrapper, LinkProperties lp) {
            super(wrapper.mHandlerThread.getLooper(), wrapper.mContext, wrapper.mLogTag,
                    wrapper.mNetworkInfo, wrapper.mNetworkCapabilities, lp, wrapper.mScore,
                    new NetworkAgentConfig(), NetworkProvider.ID_NONE);
        private static final String PROVIDER_NAME = "InstrumentedNetworkAgentProvider";

        public InstrumentedNetworkAgent(NetworkAgentWrapper wrapper, LinkProperties lp,
                final int type, final String typeName) {
            super(wrapper.mContext, wrapper.mHandlerThread.getLooper(), wrapper.mLogTag,
                    wrapper.mNetworkCapabilities, lp, wrapper.mScore,
                    new NetworkAgentConfig.Builder()
                            .setLegacyType(type).setLegacyTypeName(typeName).build(),
                    new NetworkProvider(wrapper.mContext, wrapper.mHandlerThread.getLooper(),
                            PROVIDER_NAME));
            mWrapper = wrapper;
            register();
        }

        @Override
@@ -212,10 +218,12 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
    }

    public void connect() {
        assertNotEquals("MockNetworkAgents can only be connected once",
                mNetworkInfo.getDetailedState(), NetworkInfo.DetailedState.CONNECTED);
        mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, null, null);
        mNetworkAgent.sendNetworkInfo(mNetworkInfo);
        if (!mConnected.compareAndSet(false /* expect */, true /* update */)) {
            // compareAndSet returns false when the value couldn't be updated because it did not
            // match the expected value.
            fail("Test NetworkAgents can only be connected once");
        }
        mNetworkAgent.markConnected();
    }

    public void suspend() {
@@ -227,8 +235,7 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
    }

    public void disconnect() {
        mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.DISCONNECTED, null, null);
        mNetworkAgent.sendNetworkInfo(mNetworkInfo);
        mNetworkAgent.unregister();
    }

    @Override
+4 −3
Original line number Diff line number Diff line
@@ -646,8 +646,8 @@ public class ConnectivityServiceTest {
        }

        @Override
        protected InstrumentedNetworkAgent makeNetworkAgent(LinkProperties linkProperties)
                throws Exception {
        protected InstrumentedNetworkAgent makeNetworkAgent(LinkProperties linkProperties,
                final int type, final String typeName) throws Exception {
            mNetworkMonitor = mock(INetworkMonitor.class);

            final Answer validateAnswer = inv -> {
@@ -666,7 +666,8 @@ public class ConnectivityServiceTest {
                    any() /* name */,
                    nmCbCaptor.capture());

            final InstrumentedNetworkAgent na = new InstrumentedNetworkAgent(this, linkProperties) {
            final InstrumentedNetworkAgent na = new InstrumentedNetworkAgent(this, linkProperties,
                    type, typeName) {
                @Override
                public void networkStatus(int status, String redirectUrl) {
                    mRedirectUrl = redirectUrl;