Merge "Add test to make sure that unwanted local nets disconnect correctly" into main

This commit is contained in:
Jean Chalard 2023-11-09 02:08:36 +00:00 • committed by Gerrit Code Review
commit 7cf6e5a3b0
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>()
}
}