summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Cody Kesting <ckesting@google.com> 2020-03-24 11:53:30 -0700
committer Cody Kesting <ckesting@google.com> 2020-03-30 17:14:44 -0700
commit93c1e656b5d6ce8474faf42471839c465e5879c3 (patch)
tree6cc6eefffbd8f0100ba2e0289ea1920ecba37fc8
parent981dccab03b7bc73e5508e042fc7c90900e15c56 (diff)
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 Merged-In: Ia5387ca2ce7c3fcbd04dc7fbff5266f7bcc71694 (cherry picked from commit 2091bd9059d1d24f8c6bd1cd345361f185cab1ea)
-rw-r--r--core/java/android/net/NetworkCapabilities.java7
-rw-r--r--tests/net/common/java/android/net/NetworkCapabilitiesTest.java17
2 files changed, 24 insertions, 0 deletions
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index 18bbb07da4ba..9ff7ebee6da4 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -947,12 +947,19 @@ 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
*/
@NonNull
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;
}
diff --git a/tests/net/common/java/android/net/NetworkCapabilitiesTest.java b/tests/net/common/java/android/net/NetworkCapabilitiesTest.java
index db3372de163b..316a83adf45e 100644
--- a/tests/net/common/java/android/net/NetworkCapabilitiesTest.java
+++ b/tests/net/common/java/android/net/NetworkCapabilitiesTest.java
@@ -442,6 +442,23 @@ public class NetworkCapabilitiesTest {
}
@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();
NetworkCapabilities nc2 = new NetworkCapabilities();