Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 1 | package com.android.systemui.statusbar.policy; |
| 2 | |
Sunny Goyal | 87fccf0 | 2019-08-13 17:39:10 -0700 | [diff] [blame] | 3 | import static junit.framework.Assert.assertEquals; |
| 4 | |
| 5 | import static org.mockito.Matchers.any; |
| 6 | import static org.mockito.Matchers.anyBoolean; |
| 7 | import static org.mockito.Mockito.mock; |
| 8 | import static org.mockito.Mockito.when; |
| 9 | |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 10 | import android.content.Intent; |
Jason Monk | 33f8ae7 | 2015-05-08 10:45:15 -0400 | [diff] [blame] | 11 | import android.net.NetworkCapabilities; |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 12 | import android.net.NetworkInfo; |
| 13 | import android.net.wifi.WifiInfo; |
| 14 | import android.net.wifi.WifiManager; |
Jason Monk | e427cb8 | 2015-07-28 09:18:08 -0400 | [diff] [blame] | 15 | import android.test.suitebuilder.annotation.SmallTest; |
Jason Monk | 2515f47 | 2017-09-19 09:52:43 -0400 | [diff] [blame] | 16 | import android.testing.AndroidTestingRunner; |
| 17 | import android.testing.TestableLooper.RunWithLooper; |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 18 | |
Jason Monk | 33f8ae7 | 2015-05-08 10:45:15 -0400 | [diff] [blame] | 19 | import com.android.systemui.statusbar.policy.NetworkController.IconState; |
Jason Monk | 07b75fe | 2015-05-14 16:47:03 -0400 | [diff] [blame] | 20 | |
Geoffrey Pitsch | 2c403db | 2016-08-26 09:09:39 -0400 | [diff] [blame] | 21 | import org.junit.Test; |
| 22 | import org.junit.runner.RunWith; |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 23 | import org.mockito.ArgumentCaptor; |
| 24 | import org.mockito.Mockito; |
| 25 | |
Jason Monk | e427cb8 | 2015-07-28 09:18:08 -0400 | [diff] [blame] | 26 | @SmallTest |
Jason Monk | 2515f47 | 2017-09-19 09:52:43 -0400 | [diff] [blame] | 27 | @RunWith(AndroidTestingRunner.class) |
| 28 | @RunWithLooper |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 29 | public class NetworkControllerWifiTest extends NetworkControllerBaseTest { |
| 30 | // These match the constants in WifiManager and need to be kept up to date. |
| 31 | private static final int MIN_RSSI = -100; |
| 32 | private static final int MAX_RSSI = -55; |
| 33 | |
Geoffrey Pitsch | 2c403db | 2016-08-26 09:09:39 -0400 | [diff] [blame] | 34 | @Test |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 35 | public void testWifiIcon() { |
| 36 | String testSsid = "Test SSID"; |
| 37 | setWifiEnabled(true); |
Jason Monk | 7e6c83c | 2017-04-26 14:35:24 -0400 | [diff] [blame] | 38 | verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 39 | |
| 40 | setWifiState(true, testSsid); |
Amin Shaikh | e74dbdd | 2018-03-09 16:05:30 -0500 | [diff] [blame] | 41 | setWifiLevel(0); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 42 | verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[0][0]); |
| 43 | |
| 44 | for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) { |
| 45 | setWifiLevel(testLevel); |
| 46 | |
Anarghya Mitra | 678722f | 2018-05-11 14:29:54 -0700 | [diff] [blame] | 47 | setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 48 | verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); |
Anarghya Mitra | 678722f | 2018-05-11 14:29:54 -0700 | [diff] [blame] | 49 | setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, false, true); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 50 | verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[0][testLevel]); |
| 51 | } |
| 52 | } |
| 53 | |
Geoffrey Pitsch | 2c403db | 2016-08-26 09:09:39 -0400 | [diff] [blame] | 54 | @Test |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 55 | public void testQsWifiIcon() { |
| 56 | String testSsid = "Test SSID"; |
| 57 | |
| 58 | setWifiEnabled(false); |
Jason Monk | d2263cd | 2014-11-10 14:22:56 -0500 | [diff] [blame] | 59 | verifyLastQsWifiIcon(false, false, WifiIcons.QS_WIFI_NO_NETWORK, null); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 60 | |
| 61 | setWifiEnabled(true); |
Jason Monk | d2263cd | 2014-11-10 14:22:56 -0500 | [diff] [blame] | 62 | verifyLastQsWifiIcon(true, false, WifiIcons.QS_WIFI_NO_NETWORK, null); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 63 | |
| 64 | setWifiState(true, testSsid); |
| 65 | for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) { |
| 66 | setWifiLevel(testLevel); |
| 67 | |
Anarghya Mitra | 678722f | 2018-05-11 14:29:54 -0700 | [diff] [blame] | 68 | setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 69 | verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel], |
| 70 | testSsid); |
Anarghya Mitra | 678722f | 2018-05-11 14:29:54 -0700 | [diff] [blame] | 71 | setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, false, true); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 72 | verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[0][testLevel], |
| 73 | testSsid); |
| 74 | } |
| 75 | } |
| 76 | |
Geoffrey Pitsch | 2c403db | 2016-08-26 09:09:39 -0400 | [diff] [blame] | 77 | @Test |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 78 | public void testQsDataDirection() { |
| 79 | // Setup normal connection |
| 80 | String testSsid = "Test SSID"; |
| 81 | int testLevel = 2; |
| 82 | setWifiEnabled(true); |
| 83 | setWifiState(true, testSsid); |
| 84 | setWifiLevel(testLevel); |
Anarghya Mitra | 678722f | 2018-05-11 14:29:54 -0700 | [diff] [blame] | 85 | setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 86 | verifyLastQsWifiIcon(true, true, |
| 87 | WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel], testSsid); |
| 88 | |
Jason Monk | 26ad85a | 2016-12-08 14:45:42 -0500 | [diff] [blame] | 89 | // Set to different activity state first to ensure a callback happens. |
Roshan Pius | 80fb137 | 2018-07-16 15:43:03 -0700 | [diff] [blame] | 90 | setWifiActivity(WifiManager.TrafficStateCallback.DATA_ACTIVITY_IN); |
Jason Monk | 26ad85a | 2016-12-08 14:45:42 -0500 | [diff] [blame] | 91 | |
Roshan Pius | 80fb137 | 2018-07-16 15:43:03 -0700 | [diff] [blame] | 92 | setWifiActivity(WifiManager.TrafficStateCallback.DATA_ACTIVITY_NONE); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 93 | verifyLastQsDataDirection(false, false); |
Roshan Pius | 80fb137 | 2018-07-16 15:43:03 -0700 | [diff] [blame] | 94 | setWifiActivity(WifiManager.TrafficStateCallback.DATA_ACTIVITY_IN); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 95 | verifyLastQsDataDirection(true, false); |
Roshan Pius | 80fb137 | 2018-07-16 15:43:03 -0700 | [diff] [blame] | 96 | setWifiActivity(WifiManager.TrafficStateCallback.DATA_ACTIVITY_OUT); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 97 | verifyLastQsDataDirection(false, true); |
Roshan Pius | 80fb137 | 2018-07-16 15:43:03 -0700 | [diff] [blame] | 98 | setWifiActivity(WifiManager.TrafficStateCallback.DATA_ACTIVITY_INOUT); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 99 | verifyLastQsDataDirection(true, true); |
| 100 | } |
| 101 | |
Geoffrey Pitsch | 2c403db | 2016-08-26 09:09:39 -0400 | [diff] [blame] | 102 | @Test |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 103 | public void testRoamingIconDuringWifi() { |
| 104 | // Setup normal connection |
Sundeep Ghuman | 9d10a3c | 2017-06-16 00:05:16 +0000 | [diff] [blame] | 105 | String testSsid = "Test SSID"; |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 106 | int testLevel = 2; |
| 107 | setWifiEnabled(true); |
| 108 | setWifiState(true, testSsid); |
| 109 | setWifiLevel(testLevel); |
Anarghya Mitra | 678722f | 2018-05-11 14:29:54 -0700 | [diff] [blame] | 110 | setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 111 | verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); |
| 112 | |
| 113 | setupDefaultSignal(); |
| 114 | setGsmRoaming(true); |
| 115 | // Still be on wifi though. |
Anarghya Mitra | 678722f | 2018-05-11 14:29:54 -0700 | [diff] [blame] | 116 | setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); |
| 117 | setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 118 | verifyLastMobileDataIndicators(true, |
Jason Monk | 48edc0c | 2017-04-10 15:01:27 -0400 | [diff] [blame] | 119 | DEFAULT_LEVEL, |
Jason Monk | 0f0de13 | 2016-12-19 15:36:13 -0500 | [diff] [blame] | 120 | 0, true); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 121 | } |
| 122 | |
Anarghya Mitra | 678722f | 2018-05-11 14:29:54 -0700 | [diff] [blame] | 123 | @Test |
| 124 | public void testWifiIconInvalidatedViaCallback() { |
| 125 | // Setup normal connection |
| 126 | String testSsid = "Test SSID"; |
| 127 | int testLevel = 2; |
| 128 | setWifiEnabled(true); |
| 129 | setWifiState(true, testSsid); |
| 130 | setWifiLevel(testLevel); |
| 131 | setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); |
| 132 | verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); |
| 133 | |
| 134 | setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, false, true); |
| 135 | verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[0][testLevel]); |
| 136 | } |
| 137 | |
| 138 | @Test |
| 139 | public void testWifiIconDisconnectedViaCallback(){ |
| 140 | // Setup normal connection |
| 141 | String testSsid = "Test SSID"; |
| 142 | int testLevel = 2; |
| 143 | setWifiEnabled(true); |
| 144 | setWifiState(true, testSsid); |
| 145 | setWifiLevel(testLevel); |
| 146 | setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); |
| 147 | verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); |
| 148 | |
| 149 | setWifiState(false, testSsid); |
| 150 | setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, false, false); |
| 151 | verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK); |
| 152 | } |
| 153 | |
| 154 | @Test |
| 155 | public void testVpnWithUnderlyingWifi(){ |
| 156 | String testSsid = "Test SSID"; |
| 157 | int testLevel = 2; |
| 158 | setWifiEnabled(true); |
| 159 | verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK); |
| 160 | |
| 161 | setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_VPN, false, true); |
| 162 | setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_VPN, true, true); |
| 163 | verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK); |
| 164 | |
| 165 | // Mock calling setUnderlyingNetworks. |
| 166 | setWifiState(true, testSsid); |
| 167 | setWifiLevel(testLevel); |
| 168 | setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, true, true); |
| 169 | verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); |
| 170 | } |
| 171 | |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 172 | protected void setWifiActivity(int activity) { |
| 173 | // TODO: Not this, because this variable probably isn't sticking around. |
Jason Monk | d2263cd | 2014-11-10 14:22:56 -0500 | [diff] [blame] | 174 | mNetworkController.mWifiSignalController.setActivity(activity); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 175 | } |
| 176 | |
| 177 | protected void setWifiLevel(int level) { |
| 178 | float amountPerLevel = (MAX_RSSI - MIN_RSSI) / (WifiIcons.WIFI_LEVEL_COUNT - 1); |
| 179 | int rssi = (int)(MIN_RSSI + level * amountPerLevel); |
| 180 | // Put RSSI in the middle of the range. |
| 181 | rssi += amountPerLevel / 2; |
| 182 | Intent i = new Intent(WifiManager.RSSI_CHANGED_ACTION); |
| 183 | i.putExtra(WifiManager.EXTRA_NEW_RSSI, rssi); |
| 184 | mNetworkController.onReceive(mContext, i); |
| 185 | } |
| 186 | |
| 187 | protected void setWifiEnabled(boolean enabled) { |
Amin Shaikh | eddaf3f | 2018-04-18 17:43:53 -0400 | [diff] [blame] | 188 | when(mMockWm.getWifiState()).thenReturn( |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 189 | enabled ? WifiManager.WIFI_STATE_ENABLED : WifiManager.WIFI_STATE_DISABLED); |
Amin Shaikh | eddaf3f | 2018-04-18 17:43:53 -0400 | [diff] [blame] | 190 | mNetworkController.onReceive(mContext, new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION)); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 191 | } |
| 192 | |
| 193 | protected void setWifiState(boolean connected, String ssid) { |
| 194 | Intent i = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION); |
Anarghya Mitra | 678722f | 2018-05-11 14:29:54 -0700 | [diff] [blame] | 195 | NetworkInfo networkInfo = mock(NetworkInfo.class); |
Amin Shaikh | c7593b1 | 2018-03-09 16:07:09 -0500 | [diff] [blame] | 196 | when(networkInfo.isConnected()).thenReturn(connected); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 197 | |
Anarghya Mitra | 678722f | 2018-05-11 14:29:54 -0700 | [diff] [blame] | 198 | WifiInfo wifiInfo = mock(WifiInfo.class); |
Amin Shaikh | c7593b1 | 2018-03-09 16:07:09 -0500 | [diff] [blame] | 199 | when(wifiInfo.getSSID()).thenReturn(ssid); |
| 200 | when(mMockWm.getConnectionInfo()).thenReturn(wifiInfo); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 201 | |
| 202 | i.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 203 | mNetworkController.onReceive(mContext, i); |
| 204 | } |
| 205 | |
| 206 | protected void verifyLastQsDataDirection(boolean in, boolean out) { |
| 207 | ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class); |
| 208 | ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class); |
| 209 | |
Jason Monk | 07b75fe | 2015-05-14 16:47:03 -0400 | [diff] [blame] | 210 | Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( |
Amin Shaikh | e74dbdd | 2018-03-09 16:05:30 -0500 | [diff] [blame] | 211 | anyBoolean(), any(), any(), inArg.capture(), outArg.capture(), any(), anyBoolean(), |
| 212 | any()); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 213 | assertEquals("WiFi data in, in quick settings", in, (boolean) inArg.getValue()); |
| 214 | assertEquals("WiFi data out, in quick settings", out, (boolean) outArg.getValue()); |
| 215 | } |
| 216 | |
| 217 | protected void verifyLastQsWifiIcon(boolean enabled, boolean connected, int icon, |
| 218 | String description) { |
Jason Monk | 07b75fe | 2015-05-14 16:47:03 -0400 | [diff] [blame] | 219 | ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 220 | ArgumentCaptor<Boolean> enabledArg = ArgumentCaptor.forClass(Boolean.class); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 221 | ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class); |
| 222 | |
Jason Monk | 07b75fe | 2015-05-14 16:47:03 -0400 | [diff] [blame] | 223 | Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( |
Sundeep Ghuman | d57f324 | 2017-01-13 15:31:48 -0800 | [diff] [blame] | 224 | enabledArg.capture(), any(), iconArg.capture(), anyBoolean(), |
Amin Shaikh | e74dbdd | 2018-03-09 16:05:30 -0500 | [diff] [blame] | 225 | anyBoolean(), descArg.capture(), anyBoolean(), any()); |
Jason Monk | 07b75fe | 2015-05-14 16:47:03 -0400 | [diff] [blame] | 226 | IconState iconState = iconArg.getValue(); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 227 | assertEquals("WiFi enabled, in quick settings", enabled, (boolean) enabledArg.getValue()); |
Jason Monk | 07b75fe | 2015-05-14 16:47:03 -0400 | [diff] [blame] | 228 | assertEquals("WiFi connected, in quick settings", connected, iconState.visible); |
| 229 | assertEquals("WiFi signal, in quick settings", icon, iconState.icon); |
Amin Shaikh | c7593b1 | 2018-03-09 16:07:09 -0500 | [diff] [blame] | 230 | assertEquals("WiFI desc (ssid), in quick settings", description, descArg.getValue()); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 231 | } |
| 232 | |
| 233 | protected void verifyLastWifiIcon(boolean visible, int icon) { |
Jason Monk | 07b75fe | 2015-05-14 16:47:03 -0400 | [diff] [blame] | 234 | ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 235 | |
Jason Monk | 07b75fe | 2015-05-14 16:47:03 -0400 | [diff] [blame] | 236 | Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( |
Sundeep Ghuman | d57f324 | 2017-01-13 15:31:48 -0800 | [diff] [blame] | 237 | anyBoolean(), iconArg.capture(), any(), anyBoolean(), anyBoolean(), |
Amin Shaikh | e74dbdd | 2018-03-09 16:05:30 -0500 | [diff] [blame] | 238 | any(), anyBoolean(), any()); |
Jason Monk | 07b75fe | 2015-05-14 16:47:03 -0400 | [diff] [blame] | 239 | IconState iconState = iconArg.getValue(); |
| 240 | assertEquals("WiFi visible, in status bar", visible, iconState.visible); |
| 241 | assertEquals("WiFi signal, in status bar", icon, iconState.icon); |
Jason Monk | f13b4b3 | 2014-11-07 16:39:34 -0500 | [diff] [blame] | 242 | } |
| 243 | } |