From ee780140e31af01e3e6ed380459f097633c87355 Mon Sep 17 00:00:00 2001 From: Jong Wook Kim Date: Sun, 6 May 2018 14:12:09 -0700 Subject: Update WifiInfo MAC address more frequently Currently, we reset MAC address stored in WifiInfo to 02:00:00:00:00:00 whenever we are handling disconnect with Connected MAC Randomization enabled. The disconnect handling can happen after we have started connecting to a new network and generated a new randomized MAC address. Update the MAC address to the real value once we have successfully connected to the new network. Bug: 78013990 Test: Manual Check, Unittest Change-Id: I8f3d66bef353e91d3938a74c5d0f10d746903961 --- .../android/server/wifi/WifiStateMachineTest.java | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'tests') diff --git a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java index 86692c8ce..44fdd4874 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java @@ -2338,4 +2338,42 @@ public class WifiStateMachineTest { mLooper.dispatchAll(); verify(mIpClient).shutdown(); } + + /** + * Verify that WifiInfo's MAC address is updated when the state machine receives + * NETWORK_CONNECTION_EVENT while in ConnectedState. + */ + @Test + public void verifyWifiInfoMacUpdatedWithNetworkConnectionWhileConnected() throws Exception { + when(mWifiNative.getMacAddress(WIFI_IFACE_NAME)) + .thenReturn(TEST_LOCAL_MAC_ADDRESS.toString()); + connect(); + assertEquals("ConnectedState", getCurrentState().getName()); + assertEquals(TEST_LOCAL_MAC_ADDRESS.toString(), mWsm.getWifiInfo().getMacAddress()); + + when(mWifiNative.getMacAddress(WIFI_IFACE_NAME)) + .thenReturn(TEST_GLOBAL_MAC_ADDRESS.toString()); + mWsm.sendMessage(WifiMonitor.NETWORK_CONNECTION_EVENT, 0, 0, sBSSID); + mLooper.dispatchAll(); + assertEquals(TEST_GLOBAL_MAC_ADDRESS.toString(), mWsm.getWifiInfo().getMacAddress()); + } + + /** + * Verify that WifiInfo's MAC address is updated when the state machine receives + * NETWORK_CONNECTION_EVENT while in DisconnectedState. + */ + @Test + public void verifyWifiInfoMacUpdatedWithNetworkConnectionWhileDisconnected() throws Exception { + when(mWifiNative.getMacAddress(WIFI_IFACE_NAME)) + .thenReturn(TEST_LOCAL_MAC_ADDRESS.toString()); + disconnect(); + assertEquals("DisconnectedState", getCurrentState().getName()); + assertEquals(TEST_LOCAL_MAC_ADDRESS.toString(), mWsm.getWifiInfo().getMacAddress()); + + when(mWifiNative.getMacAddress(WIFI_IFACE_NAME)) + .thenReturn(TEST_GLOBAL_MAC_ADDRESS.toString()); + mWsm.sendMessage(WifiMonitor.NETWORK_CONNECTION_EVENT, 0, 0, sBSSID); + mLooper.dispatchAll(); + assertEquals(TEST_GLOBAL_MAC_ADDRESS.toString(), mWsm.getWifiInfo().getMacAddress()); + } } -- cgit v1.2.3