Migrate NetworkAgentWrapper to the new NA API

Test: FrameworksNetTests NetworkStackTests
Bug: 167544279
Change-Id: I5d53a938572682dea827ea681596226b1e271aa6
This commit is contained in:
Chalard Jean
2020-10-09 18:05:06 +09:00
parent 28668319fa
commit 0d3680c12c
2 changed files with 28 additions and 20 deletions

View File

@@ -29,7 +29,7 @@ import static com.android.server.ConnectivityServiceTestUtils.transportToLegacyT
import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.fail;
import android.content.Context; import android.content.Context;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
@@ -38,7 +38,6 @@ import android.net.Network;
import android.net.NetworkAgent; import android.net.NetworkAgent;
import android.net.NetworkAgentConfig; import android.net.NetworkAgentConfig;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkProvider; import android.net.NetworkProvider;
import android.net.NetworkSpecifier; import android.net.NetworkSpecifier;
import android.net.SocketKeepalive; import android.net.SocketKeepalive;
@@ -53,9 +52,9 @@ import com.android.testutils.HandlerUtils;
import com.android.testutils.TestableNetworkCallback; import com.android.testutils.TestableNetworkCallback;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork { public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
private final NetworkInfo mNetworkInfo;
private final NetworkCapabilities mNetworkCapabilities; private final NetworkCapabilities mNetworkCapabilities;
private final HandlerThread mHandlerThread; private final HandlerThread mHandlerThread;
private final Context mContext; private final Context mContext;
@@ -63,6 +62,7 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
private final ConditionVariable mDisconnected = new ConditionVariable(); private final ConditionVariable mDisconnected = new ConditionVariable();
private final ConditionVariable mPreventReconnectReceived = new ConditionVariable(); private final ConditionVariable mPreventReconnectReceived = new ConditionVariable();
private final AtomicBoolean mConnected = new AtomicBoolean(false);
private int mScore; private int mScore;
private NetworkAgent mNetworkAgent; private NetworkAgent mNetworkAgent;
private int mStartKeepaliveError = SocketKeepalive.ERROR_UNSUPPORTED; private int mStartKeepaliveError = SocketKeepalive.ERROR_UNSUPPORTED;
@@ -76,7 +76,6 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
NetworkCapabilities ncTemplate, Context context) throws Exception { NetworkCapabilities ncTemplate, Context context) throws Exception {
final int type = transportToLegacyType(transport); final int type = transportToLegacyType(transport);
final String typeName = ConnectivityManager.getNetworkTypeName(type); final String typeName = ConnectivityManager.getNetworkTypeName(type);
mNetworkInfo = new NetworkInfo(type, 0, typeName, "Mock");
mNetworkCapabilities = (ncTemplate != null) ? ncTemplate : new NetworkCapabilities(); mNetworkCapabilities = (ncTemplate != null) ? ncTemplate : new NetworkCapabilities();
mNetworkCapabilities.addCapability(NET_CAPABILITY_NOT_SUSPENDED); mNetworkCapabilities.addCapability(NET_CAPABILITY_NOT_SUSPENDED);
mNetworkCapabilities.addTransportType(transport); mNetworkCapabilities.addTransportType(transport);
@@ -108,22 +107,29 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
mHandlerThread = new HandlerThread(mLogTag); mHandlerThread = new HandlerThread(mLogTag);
mHandlerThread.start(); 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 { throws Exception {
return new InstrumentedNetworkAgent(this, linkProperties); return new InstrumentedNetworkAgent(this, linkProperties, type, typeName);
} }
public static class InstrumentedNetworkAgent extends NetworkAgent { public static class InstrumentedNetworkAgent extends NetworkAgent {
private final NetworkAgentWrapper mWrapper; private final NetworkAgentWrapper mWrapper;
private static final String PROVIDER_NAME = "InstrumentedNetworkAgentProvider";
public InstrumentedNetworkAgent(NetworkAgentWrapper wrapper, LinkProperties lp) { public InstrumentedNetworkAgent(NetworkAgentWrapper wrapper, LinkProperties lp,
super(wrapper.mHandlerThread.getLooper(), wrapper.mContext, wrapper.mLogTag, final int type, final String typeName) {
wrapper.mNetworkInfo, wrapper.mNetworkCapabilities, lp, wrapper.mScore, super(wrapper.mContext, wrapper.mHandlerThread.getLooper(), wrapper.mLogTag,
new NetworkAgentConfig(), NetworkProvider.ID_NONE); wrapper.mNetworkCapabilities, lp, wrapper.mScore,
new NetworkAgentConfig.Builder()
.setLegacyType(type).setLegacyTypeName(typeName).build(),
new NetworkProvider(wrapper.mContext, wrapper.mHandlerThread.getLooper(),
PROVIDER_NAME));
mWrapper = wrapper; mWrapper = wrapper;
register();
} }
@Override @Override
@@ -212,10 +218,12 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
} }
public void connect() { public void connect() {
assertNotEquals("MockNetworkAgents can only be connected once", if (!mConnected.compareAndSet(false /* expect */, true /* update */)) {
mNetworkInfo.getDetailedState(), NetworkInfo.DetailedState.CONNECTED); // compareAndSet returns false when the value couldn't be updated because it did not
mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, null, null); // match the expected value.
mNetworkAgent.sendNetworkInfo(mNetworkInfo); fail("Test NetworkAgents can only be connected once");
}
mNetworkAgent.markConnected();
} }
public void suspend() { public void suspend() {
@@ -227,8 +235,7 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
} }
public void disconnect() { public void disconnect() {
mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.DISCONNECTED, null, null); mNetworkAgent.unregister();
mNetworkAgent.sendNetworkInfo(mNetworkInfo);
} }
@Override @Override

View File

@@ -646,8 +646,8 @@ public class ConnectivityServiceTest {
} }
@Override @Override
protected InstrumentedNetworkAgent makeNetworkAgent(LinkProperties linkProperties) protected InstrumentedNetworkAgent makeNetworkAgent(LinkProperties linkProperties,
throws Exception { final int type, final String typeName) throws Exception {
mNetworkMonitor = mock(INetworkMonitor.class); mNetworkMonitor = mock(INetworkMonitor.class);
final Answer validateAnswer = inv -> { final Answer validateAnswer = inv -> {
@@ -666,7 +666,8 @@ public class ConnectivityServiceTest {
any() /* name */, any() /* name */,
nmCbCaptor.capture()); nmCbCaptor.capture());
final InstrumentedNetworkAgent na = new InstrumentedNetworkAgent(this, linkProperties) { final InstrumentedNetworkAgent na = new InstrumentedNetworkAgent(this, linkProperties,
type, typeName) {
@Override @Override
public void networkStatus(int status, String redirectUrl) { public void networkStatus(int status, String redirectUrl) {
mRedirectUrl = redirectUrl; mRedirectUrl = redirectUrl;