From b95ca556dbb96e5e839ee1cc3be1dea37b23ac7d Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Mon, 24 Apr 2023 17:45:36 +0900 Subject: [PATCH] Make the MTU tests more realistic. Currently, the MTU tests work on networks that have not yet been connected. This is not very realistic because most MTU changes (like most LinkProperties changes in general) happen after the network has connected. Change these tests to use connected networks instead. To avoid losing coverage for setting the MTU before the network is connected, add a test just for that. Bug: 143158421 Test: test-only change Change-Id: I7f808249722924a0b1253e402c5580bb104afd8e --- .../server/ConnectivityServiceTest.java | 103 ++++++++++++++---- 1 file changed, 84 insertions(+), 19 deletions(-) diff --git a/tests/unit/java/com/android/server/ConnectivityServiceTest.java b/tests/unit/java/com/android/server/ConnectivityServiceTest.java index 1cc0c8909d..2cf88966cd 100755 --- a/tests/unit/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/unit/java/com/android/server/ConnectivityServiceTest.java @@ -17570,18 +17570,77 @@ public class ConnectivityServiceTest { }); } + private void verifyMtuSetOnWifiInterface(int mtu) throws Exception { + verify(mMockNetd, times(1)).interfaceSetMtu(WIFI_IFNAME, mtu); + } + + private void verifyMtuNeverSetOnWifiInterface() throws Exception { + verify(mMockNetd, never()).interfaceSetMtu(eq(WIFI_IFNAME), anyInt()); + } + @Test - public void testSendLinkPropertiesSetInterfaceMtu() throws Exception { - final int mtu = 1327; + public void testSendLinkPropertiesSetInterfaceMtuBeforeConnect() throws Exception { + final int mtu = 1281; LinkProperties lp = new LinkProperties(); lp.setInterfaceName(WIFI_IFNAME); lp.setMtu(mtu); mWiFiAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI); mWiFiAgent.sendLinkProperties(lp); - waitForIdle(); - verify(mMockNetd).interfaceSetMtu(eq(WIFI_IFNAME), eq(mtu)); + verifyMtuSetOnWifiInterface(mtu); + reset(mMockNetd); + + mWiFiAgent.connect(false /* validated */); + // The MTU is always (re-)applied when the network connects. + verifyMtuSetOnWifiInterface(mtu); + } + + @Test + public void testSendLinkPropertiesUpdateInterfaceMtuBeforeConnect() throws Exception { + final int mtu = 1327; + LinkProperties lp = new LinkProperties(); + lp.setInterfaceName(WIFI_IFNAME); + lp.setMtu(mtu); + + // Registering an agent with an MTU doesn't set the MTU... + mWiFiAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI, lp); + waitForIdle(); + verifyMtuNeverSetOnWifiInterface(); + reset(mMockNetd); + + // ... but prevents future updates with the same MTU from setting the MTU. + mWiFiAgent.sendLinkProperties(lp); + waitForIdle(); + verifyMtuNeverSetOnWifiInterface(); + + // Updating with a different MTU does work. + lp.setMtu(mtu + 1); + mWiFiAgent.sendLinkProperties(lp); + waitForIdle(); + verifyMtuSetOnWifiInterface(mtu + 1); + reset(mMockNetd); + + mWiFiAgent.connect(false /* validated */); + // The MTU is always (re-)applied when the network connects. + verifyMtuSetOnWifiInterface(mtu + 1); + } + + @Test + public void testSendLinkPropertiesUpdateInterfaceMtuAfterConnect() throws Exception { + final int mtu = 1327; + LinkProperties lp = new LinkProperties(); + lp.setInterfaceName(WIFI_IFNAME); + lp.setMtu(mtu); + + mWiFiAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI); + mWiFiAgent.connect(false /* validated */); + verifyMtuNeverSetOnWifiInterface(); + + mWiFiAgent.sendLinkProperties(lp); + waitForIdle(); + // The MTU is always (re-)applied when the network connects. + verifyMtuSetOnWifiInterface(mtu); } @Test @@ -17592,14 +17651,15 @@ public class ConnectivityServiceTest { lp.setMtu(mtu); mWiFiAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI, lp); + mWiFiAgent.connect(false /* validated */); + verifyMtuSetOnWifiInterface(mtu); + reset(mMockNetd); LinkProperties lp2 = new LinkProperties(lp); lp2.setMtu(mtu2); - mWiFiAgent.sendLinkProperties(lp2); - waitForIdle(); - verify(mMockNetd).interfaceSetMtu(eq(WIFI_IFNAME), eq(mtu2)); + verifyMtuSetOnWifiInterface(mtu2); } @Test @@ -17610,10 +17670,13 @@ public class ConnectivityServiceTest { lp.setMtu(mtu); mWiFiAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI, lp); - mWiFiAgent.sendLinkProperties(new LinkProperties(lp)); + mWiFiAgent.connect(false /* validated */); + verifyMtuSetOnWifiInterface(mtu); + reset(mMockNetd); + mWiFiAgent.sendLinkProperties(new LinkProperties(lp)); waitForIdle(); - verify(mMockNetd, never()).interfaceSetMtu(eq(WIFI_IFNAME), anyInt()); + verifyMtuNeverSetOnWifiInterface(); } @Test @@ -17624,15 +17687,15 @@ public class ConnectivityServiceTest { lp.setMtu(mtu); mWiFiAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI, lp); + mWiFiAgent.connect(false /* validated */); + verifyMtuSetOnWifiInterface(mtu); + reset(mMockNetd); - LinkProperties lp2 = new LinkProperties(); - assertNull(lp2.getInterfaceName()); - lp2.setMtu(mtu); - + LinkProperties lp2 = new LinkProperties(lp); + lp2.setInterfaceName(null); mWiFiAgent.sendLinkProperties(new LinkProperties(lp2)); - waitForIdle(); - verify(mMockNetd, never()).interfaceSetMtu(any(), anyInt()); + verifyMtuNeverSetOnWifiInterface(); } @Test @@ -17643,16 +17706,18 @@ public class ConnectivityServiceTest { lp.setMtu(mtu); mWiFiAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI, lp); + mWiFiAgent.connect(false /* validated */); + verifyMtuSetOnWifiInterface(mtu); + reset(mMockNetd); final String ifaceName2 = WIFI_IFNAME + "_2"; - LinkProperties lp2 = new LinkProperties(); + LinkProperties lp2 = new LinkProperties(lp); lp2.setInterfaceName(ifaceName2); - lp2.setMtu(mtu); mWiFiAgent.sendLinkProperties(new LinkProperties(lp2)); - waitForIdle(); - verify(mMockNetd).interfaceSetMtu(eq(ifaceName2), eq(mtu)); + verify(mMockNetd, times(1)).interfaceSetMtu(eq(ifaceName2), eq(mtu)); + verifyMtuNeverSetOnWifiInterface(); } @Test