Sort administrator UIDs for NetworkCapabilities.

Administrator UIDs stored in NetworkCapabilities should be sorted. This
allows for easier equals checks and hashCode computation. Additionally,
duplicate UIDs should be prevented.

Bug: 147903575
Test: atest FrameworksNetTests
Change-Id: Ia5387ca2ce7c3fcbd04dc7fbff5266f7bcc71694
This commit is contained in:
Cody Kesting
2020-03-24 11:53:30 -07:00
parent 20e92eca29
commit ec5a0cb0ff
2 changed files with 24 additions and 0 deletions

View File

@@ -909,6 +909,7 @@ public final class NetworkCapabilities implements Parcelable {
* <p>The administrator UIDs are set by network agents.
*
* @param administratorUids the UIDs to be set as administrators of this Network.
* @throws IllegalArgumentException if duplicate UIDs are contained in administratorUids
* @see #mAdministratorUids
* @hide
*/
@@ -916,6 +917,12 @@ public final class NetworkCapabilities implements Parcelable {
@SystemApi
public NetworkCapabilities setAdministratorUids(@NonNull final int[] administratorUids) {
mAdministratorUids = Arrays.copyOf(administratorUids, administratorUids.length);
Arrays.sort(mAdministratorUids);
for (int i = 0; i < mAdministratorUids.length - 1; i++) {
if (mAdministratorUids[i] >= mAdministratorUids[i + 1]) {
throw new IllegalArgumentException("All administrator UIDs must be unique");
}
}
return this;
}

View File

@@ -441,6 +441,23 @@ public class NetworkCapabilitiesTest {
return range;
}
@Test
public void testSetAdministratorUids() {
NetworkCapabilities nc =
new NetworkCapabilities().setAdministratorUids(new int[] {2, 1, 3});
assertArrayEquals(new int[] {1, 2, 3}, nc.getAdministratorUids());
}
@Test
public void testSetAdministratorUidsWithDuplicates() {
try {
new NetworkCapabilities().setAdministratorUids(new int[] {1, 1});
fail("Expected IllegalArgumentException for duplicate uids");
} catch (IllegalArgumentException expected) {
}
}
@Test
public void testCombineCapabilities() {
NetworkCapabilities nc1 = new NetworkCapabilities();