Merge "Use local defined NetworkSpecifier to verify test" am: c23b2ac096

Change-Id: I49e3a182037652141e673ce54dad2daf7860d240
This commit is contained in:
Chiachang Wang
2020-05-11 14:35:53 +00:00
committed by Automerger Merge Worker

View File

@@ -33,11 +33,12 @@ import android.net.MatchAllNetworkSpecifier;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkRequest; import android.net.NetworkRequest;
import android.net.NetworkSpecifier; import android.net.NetworkSpecifier;
import android.net.TelephonyNetworkSpecifier; import android.net.UidRange;
import android.net.wifi.WifiNetworkSpecifier; import android.net.wifi.WifiNetworkSpecifier;
import android.os.Build; import android.os.Build;
import android.os.Process;
import android.os.PatternMatcher; import android.os.PatternMatcher;
import android.os.Process;
import android.util.ArraySet;
import androidx.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4;
@@ -59,6 +60,20 @@ public class NetworkRequestTest {
private static final String TEST_PACKAGE_NAME = "test.package.name"; private static final String TEST_PACKAGE_NAME = "test.package.name";
private static final MacAddress ARBITRARY_ADDRESS = MacAddress.fromString("3:5:8:12:9:2"); private static final MacAddress ARBITRARY_ADDRESS = MacAddress.fromString("3:5:8:12:9:2");
private class LocalNetworkSpecifier extends NetworkSpecifier {
private final int mId;
LocalNetworkSpecifier(int id) {
mId = id;
}
@Override
public boolean canBeSatisfiedBy(NetworkSpecifier other) {
return other instanceof LocalNetworkSpecifier
&& mId == ((LocalNetworkSpecifier) other).mId;
}
}
@Test @Test
public void testCapabilities() { public void testCapabilities() {
assertTrue(new NetworkRequest.Builder().addCapability(NET_CAPABILITY_MMS).build() assertTrue(new NetworkRequest.Builder().addCapability(NET_CAPABILITY_MMS).build()
@@ -129,54 +144,108 @@ public class NetworkRequestTest {
@Test @Test
@IgnoreUpTo(Build.VERSION_CODES.Q) @IgnoreUpTo(Build.VERSION_CODES.Q)
public void testCanBeSatisfiedBy() { public void testCanBeSatisfiedBy() {
final TelephonyNetworkSpecifier specifier1 = new TelephonyNetworkSpecifier.Builder() final LocalNetworkSpecifier specifier1 = new LocalNetworkSpecifier(1234 /* id */);
.setSubscriptionId(1234 /* subId */) final LocalNetworkSpecifier specifier2 = new LocalNetworkSpecifier(5678 /* id */);
.build();
final TelephonyNetworkSpecifier specifier2 = new TelephonyNetworkSpecifier.Builder() final NetworkCapabilities capCellularMmsInternet = new NetworkCapabilities()
.setSubscriptionId(5678 /* subId */)
.build();
final NetworkCapabilities cap = new NetworkCapabilities()
.addTransportType(TRANSPORT_CELLULAR) .addTransportType(TRANSPORT_CELLULAR)
.addCapability(NET_CAPABILITY_MMS) .addCapability(NET_CAPABILITY_MMS)
.addCapability(NET_CAPABILITY_INTERNET); .addCapability(NET_CAPABILITY_INTERNET);
final NetworkCapabilities capDualTransport = new NetworkCapabilities(cap) final NetworkCapabilities capCellularVpnMmsInternet =
.addTransportType(TRANSPORT_VPN); new NetworkCapabilities(capCellularMmsInternet).addTransportType(TRANSPORT_VPN);
final NetworkCapabilities capWithSpecifier1 = final NetworkCapabilities capCellularMmsInternetSpecifier1 =
new NetworkCapabilities(cap).setNetworkSpecifier(specifier1); new NetworkCapabilities(capCellularMmsInternet).setNetworkSpecifier(specifier1);
final NetworkCapabilities capDiffTransportWithSpecifier1 = new NetworkCapabilities() final NetworkCapabilities capVpnInternetSpecifier1 = new NetworkCapabilities()
.addCapability(NET_CAPABILITY_INTERNET) .addCapability(NET_CAPABILITY_INTERNET)
.addTransportType(TRANSPORT_VPN) .addTransportType(TRANSPORT_VPN)
.setNetworkSpecifier(specifier1); .setNetworkSpecifier(specifier1);
final NetworkCapabilities capCellularMmsInternetMatchallspecifier =
new NetworkCapabilities(capCellularMmsInternet)
.setNetworkSpecifier(new MatchAllNetworkSpecifier());
final NetworkCapabilities capCellularMmsInternetSpecifier2 =
new NetworkCapabilities(capCellularMmsInternet).setNetworkSpecifier(specifier2);
final NetworkRequest requestWithSpecifier1 = new NetworkRequest.Builder() final NetworkRequest requestCellularInternetSpecifier1 = new NetworkRequest.Builder()
.addTransportType(TRANSPORT_CELLULAR) .addTransportType(TRANSPORT_CELLULAR)
.addCapability(NET_CAPABILITY_INTERNET) .addCapability(NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(specifier1) .setNetworkSpecifier(specifier1)
.build(); .build();
assertFalse(requestWithSpecifier1.canBeSatisfiedBy(null)); assertFalse(requestCellularInternetSpecifier1.canBeSatisfiedBy(null));
assertFalse(requestWithSpecifier1.canBeSatisfiedBy(new NetworkCapabilities())); assertFalse(requestCellularInternetSpecifier1.canBeSatisfiedBy(new NetworkCapabilities()));
assertTrue(requestWithSpecifier1.canBeSatisfiedBy(new NetworkCapabilities(cap) assertTrue(requestCellularInternetSpecifier1.canBeSatisfiedBy(
.setNetworkSpecifier(new MatchAllNetworkSpecifier()))); capCellularMmsInternetMatchallspecifier));
assertTrue(requestWithSpecifier1.canBeSatisfiedBy(cap)); assertFalse(requestCellularInternetSpecifier1.canBeSatisfiedBy(capCellularMmsInternet));
assertTrue(requestWithSpecifier1.canBeSatisfiedBy(capWithSpecifier1)); assertTrue(requestCellularInternetSpecifier1.canBeSatisfiedBy(
assertTrue(requestWithSpecifier1.canBeSatisfiedBy(capDualTransport)); capCellularMmsInternetSpecifier1));
assertFalse(requestWithSpecifier1.canBeSatisfiedBy( assertFalse(requestCellularInternetSpecifier1.canBeSatisfiedBy(capCellularVpnMmsInternet));
new NetworkCapabilities(cap).setNetworkSpecifier(specifier2))); assertFalse(requestCellularInternetSpecifier1.canBeSatisfiedBy(
capCellularMmsInternetSpecifier2));
final NetworkRequest request = new NetworkRequest.Builder() final NetworkRequest requestCellularInternet = new NetworkRequest.Builder()
.addTransportType(TRANSPORT_CELLULAR) .addTransportType(TRANSPORT_CELLULAR)
.addCapability(NET_CAPABILITY_INTERNET) .addCapability(NET_CAPABILITY_INTERNET)
.build(); .build();
assertTrue(request.canBeSatisfiedBy(cap)); assertTrue(requestCellularInternet.canBeSatisfiedBy(capCellularMmsInternet));
assertTrue(request.canBeSatisfiedBy(capWithSpecifier1)); assertTrue(requestCellularInternet.canBeSatisfiedBy(capCellularMmsInternetSpecifier1));
assertTrue(request.canBeSatisfiedBy( assertTrue(requestCellularInternet.canBeSatisfiedBy(capCellularMmsInternetSpecifier2));
new NetworkCapabilities(cap).setNetworkSpecifier(specifier2))); assertFalse(requestCellularInternet.canBeSatisfiedBy(capVpnInternetSpecifier1));
assertFalse(request.canBeSatisfiedBy(capDiffTransportWithSpecifier1)); assertTrue(requestCellularInternet.canBeSatisfiedBy(capCellularVpnMmsInternet));
assertTrue(request.canBeSatisfiedBy(capDualTransport));
assertEquals(requestWithSpecifier1.canBeSatisfiedBy(capWithSpecifier1), testInvariantInCanBeSatisfiedBy();
new NetworkCapabilities(capWithSpecifier1) }
.satisfiedByNetworkCapabilities(capWithSpecifier1));
private void testInvariantInCanBeSatisfiedBy() {
// Test invariant that result of NetworkRequest.canBeSatisfiedBy() should be the same with
// NetworkCapabilities.satisfiedByNetworkCapabilities().
final LocalNetworkSpecifier specifier1 = new LocalNetworkSpecifier(1234 /* id */);
final int uid = Process.myUid();
final ArraySet<UidRange> ranges = new ArraySet<>();
ranges.add(new UidRange(uid, uid));
final NetworkRequest requestCombination = new NetworkRequest.Builder()
.addTransportType(TRANSPORT_CELLULAR)
.addCapability(NET_CAPABILITY_INTERNET)
.setLinkUpstreamBandwidthKbps(1000)
.setNetworkSpecifier(specifier1)
.setSignalStrength(-123)
.setUids(ranges).build();
final NetworkCapabilities capCell = new NetworkCapabilities.Builder()
.addTransportType(TRANSPORT_CELLULAR).build();
assertCorrectlySatisfies(false, requestCombination, capCell);
final NetworkCapabilities capCellInternet = new NetworkCapabilities.Builder(capCell)
.addCapability(NET_CAPABILITY_INTERNET).build();
assertCorrectlySatisfies(false, requestCombination, capCellInternet);
final NetworkCapabilities capCellInternetBW =
new NetworkCapabilities.Builder(capCellInternet)
.setLinkUpstreamBandwidthKbps(1024).build();
assertCorrectlySatisfies(false, requestCombination, capCellInternetBW);
final NetworkCapabilities capCellInternetBWSpecifier1 =
new NetworkCapabilities.Builder(capCellInternetBW)
.setNetworkSpecifier(specifier1).build();
assertCorrectlySatisfies(false, requestCombination, capCellInternetBWSpecifier1);
final NetworkCapabilities capCellInternetBWSpecifier1Signal =
new NetworkCapabilities.Builder(capCellInternetBWSpecifier1)
.setSignalStrength(-123).build();
assertCorrectlySatisfies(true, requestCombination,
capCellInternetBWSpecifier1Signal);
final NetworkCapabilities capCellInternetBWSpecifier1SignalUid =
new NetworkCapabilities.Builder(capCellInternetBWSpecifier1Signal)
.setOwnerUid(uid)
.setAdministratorUids(new int [] {uid}).build();
assertCorrectlySatisfies(true, requestCombination,
capCellInternetBWSpecifier1SignalUid);
}
private void assertCorrectlySatisfies(boolean expect, NetworkRequest request,
NetworkCapabilities nc) {
assertEquals(expect, request.canBeSatisfiedBy(nc));
assertEquals(
request.canBeSatisfiedBy(nc),
request.networkCapabilities.satisfiedByNetworkCapabilities(nc));
} }
@Test @IgnoreUpTo(Build.VERSION_CODES.Q) @Test @IgnoreUpTo(Build.VERSION_CODES.Q)