From fb3a754f8343a36bc5e3ca38c47c6f6aef94ad38 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Fri, 5 Sep 2025 19:08:36 +0900 Subject: [PATCH] Fix setDelegateUid unit test. The assertion that the app was removed from the list was due to the fact that when adding the same UID twice, the code first removes it and then re-adds it. Add a bit more test coverage. Test: test-only change Flag: EXEMPT TEST_ONLY Change-Id: I1eda5be93668ebda7fe2049a2d1ace4e744948e7 --- .../server/ConnectivityServiceTest.java | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/tests/unit/java/com/android/server/ConnectivityServiceTest.java b/tests/unit/java/com/android/server/ConnectivityServiceTest.java index fbfe0fdac2..fdfcc51337 100644 --- a/tests/unit/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/unit/java/com/android/server/ConnectivityServiceTest.java @@ -5086,24 +5086,49 @@ public class ConnectivityServiceTest { final CaptivePortal captivePortal = signInIntent .getParcelableExtra(ConnectivityManager.EXTRA_CAPTIVE_PORTAL); + InOrder inOrder = inOrder(mMockNetd); + + // Add the UID and check that it's added to the bypass list. FakeOutcomeReceiver or = new FakeOutcomeReceiver(); captivePortal.setDelegateUid(APP2_UID, r -> r.run(), or); or.awaitOutcome(); - verify(mMockNetd).networkAllowBypassVpnOnNetwork(true, APP2_UID, + inOrder.verify(mMockNetd).networkAllowBypassVpnOnNetwork(true, APP2_UID, mWiFiAgent.getNetwork().netId); + // Remove the UID and check that it's removed from the list. + or = new FakeOutcomeReceiver(); + captivePortal.setDelegateUid(Process.INVALID_UID, r -> r.run(), or); + or.awaitOutcome(); + inOrder.verify(mMockNetd).networkAllowBypassVpnOnNetwork(false, APP2_UID, + mWiFiAgent.getNetwork().netId); + + // Add the UID again. or = new FakeOutcomeReceiver(); captivePortal.setDelegateUid(APP2_UID, r -> r.run(), or); or.awaitOutcome(); - verify(mMockNetd).networkAllowBypassVpnOnNetwork(false, APP2_UID, + inOrder.verify(mMockNetd).networkAllowBypassVpnOnNetwork(true, APP2_UID, + mWiFiAgent.getNetwork().netId); + + // Add the UID again. Nothing should change. + or = new FakeOutcomeReceiver(); + captivePortal.setDelegateUid(APP2_UID, r -> r.run(), or); + or.awaitOutcome(); + // BUG: the code should not call into netd. + inOrder.verify(mMockNetd).networkAllowBypassVpnOnNetwork(false, APP2_UID, + mWiFiAgent.getNetwork().netId); + inOrder.verify(mMockNetd).networkAllowBypassVpnOnNetwork(true, APP2_UID, + mWiFiAgent.getNetwork().netId); + + // Add another UID again. The old UID should be removed and the new one added. + or = new FakeOutcomeReceiver(); + captivePortal.setDelegateUid(APP1_UID, r -> r.run(), or); + or.awaitOutcome(); + inOrder.verify(mMockNetd).networkAllowBypassVpnOnNetwork(false, APP2_UID, + mWiFiAgent.getNetwork().netId); + inOrder.verify(mMockNetd).networkAllowBypassVpnOnNetwork(true, APP1_UID, mWiFiAgent.getNetwork().netId); mWiFiAgent.disconnect(); - waitForIdle(); - - // TODO: test that if the network disconnects, the delegated UID is gone. - verify(mMockNetd).networkAllowBypassVpnOnNetwork(false, APP2_UID, - mWiFiAgent.getNetwork().netId); // TODO: check VPN interface filtering rules, see // testFullyRoutedVpnResultsInInterfaceFilteringRules