Test for the current behaviour of updating a network's owner UID.

The current behaviour is at least bizarre and arguably incorrect.
Add a test to document the current behaviour so we can check that
any changes we make to this behaviour are correct.

Test: test-only change
Change-Id: I345bd320eced96316d92e520f576ae06b8020d9f
This commit is contained in:
Lorenzo Colitti
2020-11-27 15:26:31 +09:00
parent 96883c93f3
commit 6b44e92fde

View File

@@ -1957,6 +1957,57 @@ public class ConnectivityServiceTest {
doNetworkCallbacksSanitizationTest(false /* sanitized */); doNetworkCallbacksSanitizationTest(false /* sanitized */);
} }
@Test
public void testOwnerUidChangeBug() throws Exception {
// Owner UIDs are not visible without location permission.
setupLocationPermissions(Build.VERSION_CODES.Q, true, AppOpsManager.OPSTR_FINE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION);
final NetworkCapabilities ncTemplate = new NetworkCapabilities();
final int originalOwnerUid = Process.myUid();
ncTemplate.setOwnerUid(originalOwnerUid);
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI, new LinkProperties(),
ncTemplate);
mWiFiNetworkAgent.connect(false);
waitForIdle();
// Send ConnectivityService an update to the mWiFiNetworkAgent's capabilities that changes
// its owner UID.
NetworkCapabilities agentCapabilities = mWiFiNetworkAgent.getNetworkCapabilities();
assertEquals(originalOwnerUid, agentCapabilities.getOwnerUid());
agentCapabilities.setOwnerUid(42);
mWiFiNetworkAgent.setNetworkCapabilities(agentCapabilities, true);
waitForIdle();
// Check that the owner UID is not updated.
NetworkCapabilities nc = mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork());
assertEquals(originalOwnerUid, nc.getOwnerUid());
// Make an unrelated change to the capabilities.
assertFalse(agentCapabilities.hasCapability(NET_CAPABILITY_NOT_CONGESTED));
agentCapabilities.addCapability(NET_CAPABILITY_NOT_CONGESTED);
mWiFiNetworkAgent.setNetworkCapabilities(agentCapabilities, true);
waitForIdle();
// Check that both the capability change and the owner UID have been modified.
// The owner UID is -1 because it is visible only to the UID that owns the network.
nc = mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork());
assertEquals(-1, nc.getOwnerUid());
assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_CONGESTED));
// Set the owner back to originalOwnerUid, update the capabilities, and check that it is
// visible again.
// TODO: should this even be possible?
agentCapabilities.setOwnerUid(originalOwnerUid);
agentCapabilities.removeCapability(NET_CAPABILITY_NOT_CONGESTED);
mWiFiNetworkAgent.setNetworkCapabilities(agentCapabilities, true);
waitForIdle();
nc = mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork());
assertEquals(originalOwnerUid, nc.getOwnerUid());
}
@Test @Test
public void testMultipleLingering() throws Exception { public void testMultipleLingering() throws Exception {
// This test would be flaky with the default 120ms timer: that is short enough that // This test would be flaky with the default 120ms timer: that is short enough that