Add test to make sure that unwanted local nets disconnect correctly

Also add some toString() methods that were useful in debugging.

Test: new test in CSLocalAgentTests
Change-Id: Ife95815e39d92bbef84b1c5ea75a151882590d09
This commit is contained in:
Chalard Jean
2023-10-17 23:02:27 +09:00
parent 674f34702c
commit 4fe2339f2c
4 changed files with 82 additions and 0 deletions

View File

@@ -82,6 +82,15 @@ public final class LocalNetworkConfig implements Parcelable {
dest.writeParcelable(mDownstreamMulticastRoutingConfig, flags);
}
@Override
public String toString() {
return "LocalNetworkConfig{"
+ "UpstreamSelector=" + mUpstreamSelector
+ ", UpstreamMulticastConfig=" + mUpstreamMulticastRoutingConfig
+ ", DownstreamMulticastConfig=" + mDownstreamMulticastRoutingConfig
+ '}';
}
public static final @NonNull Creator<LocalNetworkConfig> CREATOR = new Creator<>() {
public LocalNetworkConfig createFromParcel(Parcel in) {
final NetworkRequest upstreamSelector = in.readParcelable(null);

View File

@@ -159,6 +159,24 @@ public class MulticastRoutingConfig implements Parcelable {
}
};
@Override
public String toString() {
return "MulticastRoutingConfig{"
+ "ForwardingMode=" + forwardingModeToString(mForwardingMode)
+ ", MinScope=" + mMinScope
+ ", ListeningAddresses=" + mListeningAddresses
+ '}';
}
private static String forwardingModeToString(final int forwardingMode) {
switch (forwardingMode) {
case FORWARD_NONE: return "NONE";
case FORWARD_SELECTED: return "SELECTED";
case FORWARD_WITH_MIN_SCOPE: return "WITH_MIN_SCOPE";
default: return "UNKNOWN";
}
}
public static class Builder {
@MulticastForwardingMode
private final int mForwardingMode;

View File

@@ -9006,6 +9006,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
return;
}
if (VDBG) {
Log.v(TAG, "Update local network config " + nai.network.netId + " : " + newConfig);
}
final LocalNetworkConfig.Builder configBuilder = new LocalNetworkConfig.Builder();
// TODO : apply the diff for multicast routing.
configBuilder.setUpstreamMulticastRoutingConfig(

View File

@@ -29,6 +29,7 @@ import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED
import android.net.NetworkCapabilities.TRANSPORT_CELLULAR
import android.net.NetworkCapabilities.TRANSPORT_THREAD
import android.net.NetworkCapabilities.TRANSPORT_WIFI
import android.net.NetworkRequest
import android.net.NetworkScore
@@ -472,4 +473,55 @@ class CSLocalAgentTests : CSTest() {
cb.expect<Lost>(localAgent.network)
cb.assertNoCallback()
}
@Test
fun testLocalNetworkUnwanted_withUpstream() {
doTestLocalNetworkUnwanted(true)
}
@Test
fun testLocalNetworkUnwanted_withoutUpstream() {
doTestLocalNetworkUnwanted(false)
}
fun doTestLocalNetworkUnwanted(haveUpstream: Boolean) {
deps.setBuildSdk(VERSION_V)
val nr = NetworkRequest.Builder().addCapability(NET_CAPABILITY_LOCAL_NETWORK).build()
val requestCb = TestableNetworkCallback()
cm.requestNetwork(nr, requestCb)
val listenCb = TestableNetworkCallback()
cm.registerNetworkCallback(nr, listenCb)
val upstream = if (haveUpstream) {
Agent(score = keepScore(), lp = lp("wifi0"),
nc = nc(TRANSPORT_WIFI)).also { it.connect() }
} else {
null
}
// Set up a local agent.
val lnc = LocalNetworkConfig.Builder().apply {
if (haveUpstream) {
setUpstreamSelector(NetworkRequest.Builder()
.addTransportType(TRANSPORT_WIFI)
.build())
}
}.build()
val localAgent = Agent(nc = nc(TRANSPORT_THREAD, NET_CAPABILITY_LOCAL_NETWORK),
lp = lp("local0"),
lnc = lnc,
score = FromS(NetworkScore.Builder().build())
)
localAgent.connect()
requestCb.expectAvailableCallbacks(localAgent.network,
validated = false, upstream = upstream?.network)
listenCb.expectAvailableCallbacks(localAgent.network,
validated = false, upstream = upstream?.network)
cm.unregisterNetworkCallback(requestCb)
listenCb.expect<Lost>()
}
}