diff options
| author | Sooraj Sasindran <sasindran@google.com> | 2021-11-29 12:40:09 -0800 |
|---|---|---|
| committer | Sooraj Sasindran <sasindran@google.com> | 2022-01-21 01:05:12 -0800 |
| commit | 499117f2790c4eb2a1decb0ae12fd82a805ca9a0 (patch) | |
| tree | f27dd1d28eecf046fe0f1fd2a30678da66dffc8e /tests/unit/java/com/android/server/ConnectivityServiceTest.java | |
| parent | 38276f1b9ce9d02ea71aac5f9c423dc5ac2dfc80 (diff) | |
Ability to specify which all applications fall under enterprise slice.
Bug: 194332512
Test: unit test
Change-Id: I94549a41aaa717add22b0a3e5035beacf6f1b8f2
Diffstat (limited to 'tests/unit/java/com/android/server/ConnectivityServiceTest.java')
| -rw-r--r-- | tests/unit/java/com/android/server/ConnectivityServiceTest.java | 291 |
1 files changed, 263 insertions, 28 deletions
diff --git a/tests/unit/java/com/android/server/ConnectivityServiceTest.java b/tests/unit/java/com/android/server/ConnectivityServiceTest.java index abb34dcce7..14ff981b4f 100644 --- a/tests/unit/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/unit/java/com/android/server/ConnectivityServiceTest.java @@ -338,6 +338,7 @@ import com.android.server.connectivity.NetworkAgentInfo; import com.android.server.connectivity.NetworkNotificationManager.NotificationType; import com.android.server.connectivity.ProxyTracker; import com.android.server.connectivity.QosCallbackTracker; +import com.android.server.connectivity.UidRangeUtils; import com.android.server.connectivity.Vpn; import com.android.server.connectivity.VpnProfileStore; import com.android.server.net.NetworkPinner; @@ -350,6 +351,7 @@ import com.android.testutils.TestableNetworkCallback; import com.android.testutils.TestableNetworkOfferCallback; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -443,6 +445,10 @@ public class ConnectivityServiceTest { private static final int TEST_WORK_PROFILE_USER_ID = 2; private static final int TEST_WORK_PROFILE_APP_UID = UserHandle.getUid(TEST_WORK_PROFILE_USER_ID, TEST_APP_ID); + private static final int TEST_APP_ID_2 = 104; + private static final int TEST_WORK_PROFILE_APP_UID_2 = + UserHandle.getUid(TEST_WORK_PROFILE_USER_ID, TEST_APP_ID_2); + private static final String CLAT_PREFIX = "v4-"; private static final String MOBILE_IFNAME = "test_rmnet_data0"; private static final String CLAT_MOBILE_IFNAME = CLAT_PREFIX + MOBILE_IFNAME; @@ -492,6 +498,8 @@ public class ConnectivityServiceTest { private TestNetworkCallback mSystemDefaultNetworkCallback; private TestNetworkCallback mProfileDefaultNetworkCallback; private TestNetworkCallback mTestPackageDefaultNetworkCallback; + private TestNetworkCallback mProfileDefaultNetworkCallbackAsAppUid2; + private TestNetworkCallback mTestPackageDefaultNetworkCallback2; // State variables required to emulate NetworkPolicyManagerService behaviour. private int mBlockedReasons = BLOCKED_REASON_NONE; @@ -12247,6 +12255,8 @@ public class ConnectivityServiceTest { private void registerDefaultNetworkCallbacks() { if (mSystemDefaultNetworkCallback != null || mDefaultNetworkCallback != null || mProfileDefaultNetworkCallback != null + || mProfileDefaultNetworkCallbackAsAppUid2 != null + || mTestPackageDefaultNetworkCallback2 != null || mTestPackageDefaultNetworkCallback != null) { throw new IllegalStateException("Default network callbacks already registered"); } @@ -12257,12 +12267,18 @@ public class ConnectivityServiceTest { mDefaultNetworkCallback = new TestNetworkCallback(); mProfileDefaultNetworkCallback = new TestNetworkCallback(); mTestPackageDefaultNetworkCallback = new TestNetworkCallback(); + mProfileDefaultNetworkCallbackAsAppUid2 = new TestNetworkCallback(); + mTestPackageDefaultNetworkCallback2 = new TestNetworkCallback(); mCm.registerSystemDefaultNetworkCallback(mSystemDefaultNetworkCallback, new Handler(ConnectivityThread.getInstanceLooper())); mCm.registerDefaultNetworkCallback(mDefaultNetworkCallback); registerDefaultNetworkCallbackAsUid(mProfileDefaultNetworkCallback, TEST_WORK_PROFILE_APP_UID); registerDefaultNetworkCallbackAsUid(mTestPackageDefaultNetworkCallback, TEST_PACKAGE_UID); + registerDefaultNetworkCallbackAsUid(mProfileDefaultNetworkCallbackAsAppUid2, + TEST_WORK_PROFILE_APP_UID_2); + registerDefaultNetworkCallbackAsUid(mTestPackageDefaultNetworkCallback2, + TEST_PACKAGE_UID2); // TODO: test using ConnectivityManager#registerDefaultNetworkCallbackAsUid as well. mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_DENIED); } @@ -12280,6 +12296,12 @@ public class ConnectivityServiceTest { if (null != mTestPackageDefaultNetworkCallback) { mCm.unregisterNetworkCallback(mTestPackageDefaultNetworkCallback); } + if (null != mProfileDefaultNetworkCallbackAsAppUid2) { + mCm.unregisterNetworkCallback(mProfileDefaultNetworkCallbackAsAppUid2); + } + if (null != mTestPackageDefaultNetworkCallback2) { + mCm.unregisterNetworkCallback(mTestPackageDefaultNetworkCallback2); + } } private void setupMultipleDefaultNetworksForOemNetworkPreferenceNotCurrentUidTest( @@ -13708,10 +13730,34 @@ public class ConnectivityServiceTest { } private UidRangeParcel[] uidRangeFor(final UserHandle handle) { - UidRange range = UidRange.createForUser(handle); + final UidRange range = UidRange.createForUser(handle); return new UidRangeParcel[] { new UidRangeParcel(range.start, range.stop) }; } + private UidRangeParcel[] uidRangeFor(final UserHandle handle, + ProfileNetworkPreference profileNetworkPreference) { + final Set<UidRange> uidRangeSet; + UidRange range = UidRange.createForUser(handle); + if (profileNetworkPreference.getIncludedUids().size() != 0) { + uidRangeSet = UidRangeUtils.convertListToUidRange( + profileNetworkPreference.getIncludedUids()); + } else if (profileNetworkPreference.getExcludedUids().size() != 0) { + uidRangeSet = UidRangeUtils.removeRangeSetFromUidRange( + range, UidRangeUtils.convertListToUidRange( + profileNetworkPreference.getExcludedUids())); + } else { + uidRangeSet = new ArraySet<>(); + uidRangeSet.add(range); + } + UidRangeParcel[] uidRangeParcels = new UidRangeParcel[uidRangeSet.size()]; + int i = 0; + for (UidRange range1 : uidRangeSet) { + uidRangeParcels[i] = new UidRangeParcel(range1.start, range1.stop); + i++; + } + return uidRangeParcels; + } + private static class TestOnCompleteListener implements Runnable { final class OnComplete {} final ArrayTrackRecord<OnComplete>.ReadHead mHistory = @@ -13762,17 +13808,22 @@ public class ConnectivityServiceTest { */ public void testPreferenceForUserNetworkUpDownForGivenPreference( ProfileNetworkPreference profileNetworkPreference, - boolean connectWorkProfileAgentAhead) throws Exception { + boolean connectWorkProfileAgentAhead, + UserHandle testHandle, + TestNetworkCallback profileDefaultNetworkCallback, + TestNetworkCallback disAllowProfileDefaultNetworkCallback) throws Exception { final InOrder inOrder = inOrder(mMockNetd); - final UserHandle testHandle = setupEnterpriseNetwork(); - registerDefaultNetworkCallbacks(); mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); mCellNetworkAgent.connect(true); mSystemDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); - mProfileDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); + profileDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); + if (disAllowProfileDefaultNetworkCallback != null) { + disAllowProfileDefaultNetworkCallback.expectAvailableThenValidatedCallbacks( + mCellNetworkAgent); + } inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical( mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE)); @@ -13800,33 +13851,43 @@ public class ConnectivityServiceTest { // system default is not handled specially, the rules are always active as long as // a preference is set. inOrder.verify(mMockNetd).networkAddUidRangesParcel(new NativeUidRangeConfig( - mCellNetworkAgent.getNetwork().netId, uidRangeFor(testHandle), + mCellNetworkAgent.getNetwork().netId, + uidRangeFor(testHandle, profileNetworkPreference), PREFERENCE_ORDER_PROFILE)); } // The enterprise network is not ready yet. assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback); if (allowFallback) { - assertNoCallbacks(mProfileDefaultNetworkCallback); + assertNoCallbacks(profileDefaultNetworkCallback); } else if (!connectWorkProfileAgentAhead) { - mProfileDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); + profileDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); + if (disAllowProfileDefaultNetworkCallback != null) { + assertNoCallbacks(disAllowProfileDefaultNetworkCallback); + } } if (!connectWorkProfileAgentAhead) { workAgent.connect(false); } - mProfileDefaultNetworkCallback.expectAvailableCallbacksUnvalidated(workAgent); + profileDefaultNetworkCallback.expectAvailableCallbacksUnvalidated(workAgent); + if (disAllowProfileDefaultNetworkCallback != null) { + disAllowProfileDefaultNetworkCallback.assertNoCallback(); + } mSystemDefaultNetworkCallback.assertNoCallback(); mDefaultNetworkCallback.assertNoCallback(); inOrder.verify(mMockNetd).networkCreate( nativeNetworkConfigPhysical(workAgent.getNetwork().netId, INetd.PERMISSION_SYSTEM)); inOrder.verify(mMockNetd).networkAddUidRangesParcel(new NativeUidRangeConfig( - workAgent.getNetwork().netId, uidRangeFor(testHandle), PREFERENCE_ORDER_PROFILE)); + workAgent.getNetwork().netId, + uidRangeFor(testHandle, profileNetworkPreference), + PREFERENCE_ORDER_PROFILE)); if (allowFallback) { inOrder.verify(mMockNetd).networkRemoveUidRangesParcel(new NativeUidRangeConfig( - mCellNetworkAgent.getNetwork().netId, uidRangeFor(testHandle), + mCellNetworkAgent.getNetwork().netId, + uidRangeFor(testHandle, profileNetworkPreference), PREFERENCE_ORDER_PROFILE)); } @@ -13834,14 +13895,20 @@ public class ConnectivityServiceTest { // not to the other apps. workAgent.setNetworkValid(true /* isStrictMode */); workAgent.mNetworkMonitor.forceReevaluation(Process.myUid()); - mProfileDefaultNetworkCallback.expectCapabilitiesThat(workAgent, + profileDefaultNetworkCallback.expectCapabilitiesThat(workAgent, nc -> nc.hasCapability(NET_CAPABILITY_VALIDATED) && nc.hasCapability(NET_CAPABILITY_ENTERPRISE)); + if (disAllowProfileDefaultNetworkCallback != null) { + assertNoCallbacks(disAllowProfileDefaultNetworkCallback); + } assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback); workAgent.addCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED); - mProfileDefaultNetworkCallback.expectCapabilitiesThat(workAgent, nc -> + profileDefaultNetworkCallback.expectCapabilitiesThat(workAgent, nc -> nc.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); + if (disAllowProfileDefaultNetworkCallback != null) { + assertNoCallbacks(disAllowProfileDefaultNetworkCallback); + } assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback); // Conversely, change a capability on the system-wide default network and make sure @@ -13851,7 +13918,11 @@ public class ConnectivityServiceTest { nc.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); mDefaultNetworkCallback.expectCapabilitiesThat(mCellNetworkAgent, nc -> nc.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); - mProfileDefaultNetworkCallback.assertNoCallback(); + if (disAllowProfileDefaultNetworkCallback != null) { + disAllowProfileDefaultNetworkCallback.expectCapabilitiesThat(mCellNetworkAgent, nc -> + nc.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); + } + profileDefaultNetworkCallback.assertNoCallback(); // Disconnect and reconnect the system-wide default network and make sure that the // apps on this network see the appropriate callbacks, and the app on the work profile @@ -13859,28 +13930,41 @@ public class ConnectivityServiceTest { mCellNetworkAgent.disconnect(); mSystemDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); mDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); - mProfileDefaultNetworkCallback.assertNoCallback(); + if (disAllowProfileDefaultNetworkCallback != null) { + disAllowProfileDefaultNetworkCallback.expectCallback( + CallbackEntry.LOST, mCellNetworkAgent); + } + profileDefaultNetworkCallback.assertNoCallback(); inOrder.verify(mMockNetd).networkDestroy(mCellNetworkAgent.getNetwork().netId); mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); mCellNetworkAgent.connect(true); mSystemDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); - mProfileDefaultNetworkCallback.assertNoCallback(); + if (disAllowProfileDefaultNetworkCallback != null) { + disAllowProfileDefaultNetworkCallback.expectAvailableThenValidatedCallbacks( + mCellNetworkAgent); + + } + profileDefaultNetworkCallback.assertNoCallback(); inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical( mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE)); // When the agent disconnects, test that the app on the work profile falls back to the // default network. workAgent.disconnect(); - mProfileDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, workAgent); + profileDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, workAgent); if (allowFallback) { - mProfileDefaultNetworkCallback.expectAvailableCallbacksValidated(mCellNetworkAgent); + profileDefaultNetworkCallback.expectAvailableCallbacksValidated(mCellNetworkAgent); + if (disAllowProfileDefaultNetworkCallback != null) { + assertNoCallbacks(disAllowProfileDefaultNetworkCallback); + } } assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback); if (allowFallback) { inOrder.verify(mMockNetd).networkAddUidRangesParcel(new NativeUidRangeConfig( - mCellNetworkAgent.getNetwork().netId, uidRangeFor(testHandle), + mCellNetworkAgent.getNetwork().netId, + uidRangeFor(testHandle, profileNetworkPreference), PREFERENCE_ORDER_PROFILE)); } inOrder.verify(mMockNetd).networkDestroy(workAgent.getNetwork().netId); @@ -13888,8 +13972,12 @@ public class ConnectivityServiceTest { mCellNetworkAgent.disconnect(); mSystemDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); mDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); + if (disAllowProfileDefaultNetworkCallback != null) { + disAllowProfileDefaultNetworkCallback.expectCallback( + CallbackEntry.LOST, mCellNetworkAgent); + } if (allowFallback) { - mProfileDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); + profileDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); } // Waiting for the handler to be idle before checking for networkDestroy is necessary @@ -13903,30 +13991,40 @@ public class ConnectivityServiceTest { final TestNetworkAgentWrapper workAgent2 = makeEnterpriseNetworkAgent(); workAgent2.connect(false); - mProfileDefaultNetworkCallback.expectAvailableCallbacksUnvalidated(workAgent2); + profileDefaultNetworkCallback.expectAvailableCallbacksUnvalidated(workAgent2); + if (disAllowProfileDefaultNetworkCallback != null) { + assertNoCallbacks(disAllowProfileDefaultNetworkCallback); + } assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback); inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical( workAgent2.getNetwork().netId, INetd.PERMISSION_SYSTEM)); inOrder.verify(mMockNetd).networkAddUidRangesParcel(new NativeUidRangeConfig( - workAgent2.getNetwork().netId, uidRangeFor(testHandle), PREFERENCE_ORDER_PROFILE)); + workAgent2.getNetwork().netId, + uidRangeFor(testHandle, profileNetworkPreference), PREFERENCE_ORDER_PROFILE)); workAgent2.setNetworkValid(true /* isStrictMode */); workAgent2.mNetworkMonitor.forceReevaluation(Process.myUid()); - mProfileDefaultNetworkCallback.expectCapabilitiesThat(workAgent2, + profileDefaultNetworkCallback.expectCapabilitiesThat(workAgent2, nc -> nc.hasCapability(NET_CAPABILITY_ENTERPRISE) && !nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); + if (disAllowProfileDefaultNetworkCallback != null) { + assertNoCallbacks(disAllowProfileDefaultNetworkCallback); + } assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback); inOrder.verify(mMockNetd, never()).networkAddUidRangesParcel(any()); // When the agent disconnects, test that the app on the work profile fall back to the // default network. workAgent2.disconnect(); - mProfileDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, workAgent2); + profileDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, workAgent2); + if (disAllowProfileDefaultNetworkCallback != null) { + assertNoCallbacks(disAllowProfileDefaultNetworkCallback); + } assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback); inOrder.verify(mMockNetd).networkDestroy(workAgent2.getNetwork().netId); assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback, - mProfileDefaultNetworkCallback); + profileDefaultNetworkCallback); // Callbacks will be unregistered by tearDown() } @@ -13938,11 +14036,14 @@ public class ConnectivityServiceTest { */ @Test public void testPreferenceForUserNetworkUpDown() throws Exception { + final UserHandle testHandle = setupEnterpriseNetwork(); ProfileNetworkPreference.Builder profileNetworkPreferenceBuilder = new ProfileNetworkPreference.Builder(); profileNetworkPreferenceBuilder.setPreference(PROFILE_NETWORK_PREFERENCE_ENTERPRISE); + registerDefaultNetworkCallbacks(); testPreferenceForUserNetworkUpDownForGivenPreference( - profileNetworkPreferenceBuilder.build(), false); + profileNetworkPreferenceBuilder.build(), false, + testHandle, mProfileDefaultNetworkCallback, null); } /** @@ -13952,12 +14053,15 @@ public class ConnectivityServiceTest { */ @Test public void testPreferenceForUserNetworkUpDownWithNoFallback() throws Exception { + final UserHandle testHandle = setupEnterpriseNetwork(); ProfileNetworkPreference.Builder profileNetworkPreferenceBuilder = new ProfileNetworkPreference.Builder(); profileNetworkPreferenceBuilder.setPreference( PROFILE_NETWORK_PREFERENCE_ENTERPRISE_NO_FALLBACK); + registerDefaultNetworkCallbacks(); testPreferenceForUserNetworkUpDownForGivenPreference( - profileNetworkPreferenceBuilder.build(), false); + profileNetworkPreferenceBuilder.build(), false, + testHandle, mProfileDefaultNetworkCallback, null); } /** @@ -13969,12 +14073,143 @@ public class ConnectivityServiceTest { @Test public void testPreferenceForUserNetworkUpDownWithNoFallbackWithAlreadyConnectedWorkAgent() throws Exception { + final UserHandle testHandle = setupEnterpriseNetwork(); ProfileNetworkPreference.Builder profileNetworkPreferenceBuilder = new ProfileNetworkPreference.Builder(); profileNetworkPreferenceBuilder.setPreference( PROFILE_NETWORK_PREFERENCE_ENTERPRISE_NO_FALLBACK); + registerDefaultNetworkCallbacks(); + testPreferenceForUserNetworkUpDownForGivenPreference( + profileNetworkPreferenceBuilder.build(), true, testHandle, + mProfileDefaultNetworkCallback, null); + } + + /** + * Make sure per-profile networking preference for specific uid of test handle + * behaves as expected + */ + @Test + public void testPreferenceForDefaultUidOfTestHandle() throws Exception { + final UserHandle testHandle = setupEnterpriseNetwork(); + ProfileNetworkPreference.Builder profileNetworkPreferenceBuilder = + new ProfileNetworkPreference.Builder(); + profileNetworkPreferenceBuilder.setPreference(PROFILE_NETWORK_PREFERENCE_ENTERPRISE); + profileNetworkPreferenceBuilder.setIncludedUids( + List.of(testHandle.getUid(TEST_WORK_PROFILE_APP_UID))); + registerDefaultNetworkCallbacks(); + testPreferenceForUserNetworkUpDownForGivenPreference( + profileNetworkPreferenceBuilder.build(), false, testHandle, + mProfileDefaultNetworkCallback, null); + } + + /** + * Make sure per-profile networking preference for specific uid of test handle + * behaves as expected + */ + @Test + public void testPreferenceForSpecificUidOfOnlyOneApp() throws Exception { + final UserHandle testHandle = setupEnterpriseNetwork(); + ProfileNetworkPreference.Builder profileNetworkPreferenceBuilder = + new ProfileNetworkPreference.Builder(); + profileNetworkPreferenceBuilder.setPreference(PROFILE_NETWORK_PREFERENCE_ENTERPRISE); + profileNetworkPreferenceBuilder.setIncludedUids( + List.of(testHandle.getUid(TEST_WORK_PROFILE_APP_UID_2))); + registerDefaultNetworkCallbacks(); testPreferenceForUserNetworkUpDownForGivenPreference( - profileNetworkPreferenceBuilder.build(), true); + profileNetworkPreferenceBuilder.build(), false, + testHandle, mProfileDefaultNetworkCallbackAsAppUid2, null); + } + + /** + * Make sure per-profile networking preference for specific uid of test handle + * behaves as expected + */ + @Test + public void testPreferenceForDisallowSpecificUidOfApp() throws Exception { + final UserHandle testHandle = setupEnterpriseNetwork(); + ProfileNetworkPreference.Builder profileNetworkPreferenceBuilder = + new ProfileNetworkPreference.Builder(); + profileNetworkPreferenceBuilder.setPreference(PROFILE_NETWORK_PREFERENCE_ENTERPRISE); + profileNetworkPreferenceBuilder.setExcludedUids( + List.of(testHandle.getUid(TEST_WORK_PROFILE_APP_UID_2))); + registerDefaultNetworkCallbacks(); + testPreferenceForUserNetworkUpDownForGivenPreference( + profileNetworkPreferenceBuilder.build(), false, + testHandle, mProfileDefaultNetworkCallback, + mProfileDefaultNetworkCallbackAsAppUid2); + } + + /** + * Make sure per-profile networking preference for specific uid of test handle + * invalid uid inputs + */ + @Test + public void testPreferenceForInvalidUids() throws Exception { + final UserHandle testHandle = setupEnterpriseNetwork(); + ProfileNetworkPreference.Builder profileNetworkPreferenceBuilder = + new ProfileNetworkPreference.Builder(); + profileNetworkPreferenceBuilder.setPreference(PROFILE_NETWORK_PREFERENCE_ENTERPRISE); + profileNetworkPreferenceBuilder.setExcludedUids( + List.of(testHandle.getUid(0) - 1)); + final TestOnCompleteListener listener = new TestOnCompleteListener(); + Assert.assertThrows(IllegalArgumentException.class, () -> mCm.setProfileNetworkPreferences( + testHandle, List.of(profileNetworkPreferenceBuilder.build()), + r -> r.run(), listener)); + + profileNetworkPreferenceBuilder.setPreference(PROFILE_NETWORK_PREFERENCE_ENTERPRISE); + profileNetworkPreferenceBuilder.setIncludedUids( + List.of(testHandle.getUid(0) - 1)); + Assert.assertThrows(IllegalArgumentException.class, + () -> mCm.setProfileNetworkPreferences( + testHandle, List.of(profileNetworkPreferenceBuilder.build()), + r -> r.run(), listener)); + + + profileNetworkPreferenceBuilder.setPreference(PROFILE_NETWORK_PREFERENCE_ENTERPRISE); + profileNetworkPreferenceBuilder.setIncludedUids( + List.of(testHandle.getUid(0) - 1)); + profileNetworkPreferenceBuilder.setExcludedUids( + List.of(testHandle.getUid(TEST_WORK_PROFILE_APP_UID_2))); + Assert.assertThrows(IllegalArgumentException.class, + () -> mCm.setProfileNetworkPreferences( + testHandle, List.of(profileNetworkPreferenceBuilder.build()), + r -> r.run(), listener)); + + ProfileNetworkPreference.Builder profileNetworkPreferenceBuilder2 = + new ProfileNetworkPreference.Builder(); + profileNetworkPreferenceBuilder2.setPreference(PROFILE_NETWORK_PREFERENCE_ENTERPRISE); + profileNetworkPreferenceBuilder2.setIncludedUids( + List.of(testHandle.getUid(TEST_WORK_PROFILE_APP_UID_2))); + profileNetworkPreferenceBuilder.setIncludedUids( + List.of(testHandle.getUid(TEST_WORK_PROFILE_APP_UID_2))); + Assert.assertThrows(IllegalArgumentException.class, + () -> mCm.setProfileNetworkPreferences( + testHandle, List.of(profileNetworkPreferenceBuilder.build(), + profileNetworkPreferenceBuilder2.build()), + r -> r.run(), listener)); + + profileNetworkPreferenceBuilder2.setPreference(PROFILE_NETWORK_PREFERENCE_ENTERPRISE); + profileNetworkPreferenceBuilder2.setExcludedUids( + List.of(testHandle.getUid(TEST_WORK_PROFILE_APP_UID_2))); + profileNetworkPreferenceBuilder.setExcludedUids( + List.of(testHandle.getUid(TEST_WORK_PROFILE_APP_UID_2))); + Assert.assertThrows(IllegalArgumentException.class, + () -> mCm.setProfileNetworkPreferences( + testHandle, List.of(profileNetworkPreferenceBuilder.build(), + profileNetworkPreferenceBuilder2.build()), + r -> r.run(), listener)); + + profileNetworkPreferenceBuilder2.setPreference( + PROFILE_NETWORK_PREFERENCE_ENTERPRISE_NO_FALLBACK); + profileNetworkPreferenceBuilder2.setExcludedUids( + List.of(testHandle.getUid(TEST_WORK_PROFILE_APP_UID_2))); + profileNetworkPreferenceBuilder.setExcludedUids( + List.of(testHandle.getUid(TEST_WORK_PROFILE_APP_UID_2))); + Assert.assertThrows(IllegalArgumentException.class, + () -> mCm.setProfileNetworkPreferences( + testHandle, List.of(profileNetworkPreferenceBuilder.build(), + profileNetworkPreferenceBuilder2.build()), + r -> r.run(), listener)); } /** |
