Merge "Fix setCapabilities." into pi-dev

am: cb42feb502

Change-Id: I13d7782a6c0c7b1f94137995bbb0d257a58d89c1
This commit is contained in:
Chalard Jean
2018-05-22 01:01:39 -07:00
committed by android-build-merger
3 changed files with 78 additions and 14 deletions

View File

@@ -63,16 +63,7 @@ public final class NetworkCapabilities implements Parcelable {
public NetworkCapabilities(NetworkCapabilities nc) { public NetworkCapabilities(NetworkCapabilities nc) {
if (nc != null) { if (nc != null) {
mNetworkCapabilities = nc.mNetworkCapabilities; set(nc);
mTransportTypes = nc.mTransportTypes;
mLinkUpBandwidthKbps = nc.mLinkUpBandwidthKbps;
mLinkDownBandwidthKbps = nc.mLinkDownBandwidthKbps;
mNetworkSpecifier = nc.mNetworkSpecifier;
mSignalStrength = nc.mSignalStrength;
mUids = nc.mUids;
mEstablishingVpnAppUid = nc.mEstablishingVpnAppUid;
mUnwantedNetworkCapabilities = nc.mUnwantedNetworkCapabilities;
mSSID = nc.mSSID;
} }
} }
@@ -91,6 +82,23 @@ public final class NetworkCapabilities implements Parcelable {
mSSID = null; mSSID = null;
} }
/**
* Set all contents of this object to the contents of a NetworkCapabilities.
* @hide
*/
public void set(NetworkCapabilities nc) {
mNetworkCapabilities = nc.mNetworkCapabilities;
mTransportTypes = nc.mTransportTypes;
mLinkUpBandwidthKbps = nc.mLinkUpBandwidthKbps;
mLinkDownBandwidthKbps = nc.mLinkDownBandwidthKbps;
mNetworkSpecifier = nc.mNetworkSpecifier;
mSignalStrength = nc.mSignalStrength;
setUids(nc.mUids); // Will make the defensive copy
mEstablishingVpnAppUid = nc.mEstablishingVpnAppUid;
mUnwantedNetworkCapabilities = nc.mUnwantedNetworkCapabilities;
mSSID = nc.mSSID;
}
/** /**
* Represents the network's capabilities. If any are specified they will be satisfied * Represents the network's capabilities. If any are specified they will be satisfied
* by any Network that matches all of them. * by any Network that matches all of them.

View File

@@ -198,8 +198,7 @@ public class NetworkRequest implements Parcelable {
* @hide * @hide
*/ */
public Builder setCapabilities(NetworkCapabilities nc) { public Builder setCapabilities(NetworkCapabilities nc) {
mNetworkCapabilities.clearAll(); mNetworkCapabilities.set(nc);
mNetworkCapabilities.combineCapabilities(nc);
return this; return this;
} }

View File

@@ -56,6 +56,7 @@ import java.util.Set;
@SmallTest @SmallTest
public class NetworkCapabilitiesTest { public class NetworkCapabilitiesTest {
private static final String TEST_SSID = "TEST_SSID"; private static final String TEST_SSID = "TEST_SSID";
private static final String DIFFERENT_TEST_SSID = "DIFFERENT_TEST_SSID";
@Test @Test
public void testMaybeMarkCapabilitiesRestricted() { public void testMaybeMarkCapabilitiesRestricted() {
@@ -373,6 +374,12 @@ public class NetworkCapabilitiesTest {
assertFalse(nc1.satisfiedByNetworkCapabilities(nc2)); assertFalse(nc1.satisfiedByNetworkCapabilities(nc2));
} }
private ArraySet<UidRange> uidRange(int from, int to) {
final ArraySet<UidRange> range = new ArraySet<>(1);
range.add(new UidRange(from, to));
return range;
}
@Test @Test
public void testCombineCapabilities() { public void testCombineCapabilities() {
NetworkCapabilities nc1 = new NetworkCapabilities(); NetworkCapabilities nc1 = new NetworkCapabilities();
@@ -399,14 +406,30 @@ public class NetworkCapabilitiesTest {
nc2.combineCapabilities(nc1); nc2.combineCapabilities(nc1);
assertTrue(TEST_SSID.equals(nc2.getSSID())); assertTrue(TEST_SSID.equals(nc2.getSSID()));
// Because they now have the same SSID, the folllowing call should not throw // Because they now have the same SSID, the following call should not throw
nc2.combineCapabilities(nc1); nc2.combineCapabilities(nc1);
nc1.setSSID("different " + TEST_SSID); nc1.setSSID(DIFFERENT_TEST_SSID);
try { try {
nc2.combineCapabilities(nc1); nc2.combineCapabilities(nc1);
fail("Expected IllegalStateException: can't combine different SSIDs"); fail("Expected IllegalStateException: can't combine different SSIDs");
} catch (IllegalStateException expected) {} } catch (IllegalStateException expected) {}
nc1.setSSID(TEST_SSID);
nc1.setUids(uidRange(10, 13));
assertNotEquals(nc1, nc2);
nc2.combineCapabilities(nc1); // Everything + 10~13 is still everything.
assertNotEquals(nc1, nc2);
nc1.combineCapabilities(nc2); // 10~13 + everything is everything.
assertEquals(nc1, nc2);
nc1.setUids(uidRange(10, 13));
nc2.setUids(uidRange(20, 23));
assertNotEquals(nc1, nc2);
nc1.combineCapabilities(nc2);
assertTrue(nc1.appliesToUid(12));
assertFalse(nc2.appliesToUid(12));
assertTrue(nc1.appliesToUid(22));
assertTrue(nc2.appliesToUid(22));
} }
@Test @Test
@@ -445,4 +468,38 @@ public class NetworkCapabilitiesTest {
p.setDataPosition(0); p.setDataPosition(0);
assertEquals(NetworkCapabilities.CREATOR.createFromParcel(p), netCap); assertEquals(NetworkCapabilities.CREATOR.createFromParcel(p), netCap);
} }
@Test
public void testSet() {
NetworkCapabilities nc1 = new NetworkCapabilities();
NetworkCapabilities nc2 = new NetworkCapabilities();
nc1.addUnwantedCapability(NET_CAPABILITY_CAPTIVE_PORTAL);
nc1.addCapability(NET_CAPABILITY_NOT_ROAMING);
assertNotEquals(nc1, nc2);
nc2.set(nc1);
assertEquals(nc1, nc2);
assertTrue(nc2.hasCapability(NET_CAPABILITY_NOT_ROAMING));
assertTrue(nc2.hasUnwantedCapability(NET_CAPABILITY_CAPTIVE_PORTAL));
// This will effectively move NOT_ROAMING capability from required to unwanted for nc1.
nc1.addUnwantedCapability(NET_CAPABILITY_NOT_ROAMING);
nc1.setSSID(TEST_SSID);
nc2.set(nc1);
assertEquals(nc1, nc2);
// Contrary to combineCapabilities, set() will have removed the NOT_ROAMING capability
// from nc2.
assertFalse(nc2.hasCapability(NET_CAPABILITY_NOT_ROAMING));
assertTrue(nc2.hasUnwantedCapability(NET_CAPABILITY_NOT_ROAMING));
assertTrue(TEST_SSID.equals(nc2.getSSID()));
nc1.setSSID(DIFFERENT_TEST_SSID);
nc2.set(nc1);
assertEquals(nc1, nc2);
assertTrue(DIFFERENT_TEST_SSID.equals(nc2.getSSID()));
nc1.setUids(uidRange(10, 13));
nc2.set(nc1); // Overwrites, as opposed to combineCapabilities
assertEquals(nc1, nc2);
}
} }