NetworkControllerWifiTest.java revision 2c403db659db615831d8bd02661f8769c7762241
1package com.android.systemui.statusbar.policy; 2 3import android.content.Intent; 4import android.net.NetworkCapabilities; 5import android.net.NetworkInfo; 6import android.net.wifi.WifiInfo; 7import android.net.wifi.WifiManager; 8import android.support.test.runner.AndroidJUnit4; 9import android.test.suitebuilder.annotation.SmallTest; 10 11import com.android.systemui.statusbar.policy.NetworkController.IconState; 12 13import org.junit.Test; 14import org.junit.runner.RunWith; 15import org.mockito.ArgumentCaptor; 16import org.mockito.Mockito; 17 18import static junit.framework.Assert.assertEquals; 19 20@SmallTest 21@RunWith(AndroidJUnit4.class) 22public class NetworkControllerWifiTest extends NetworkControllerBaseTest { 23 // These match the constants in WifiManager and need to be kept up to date. 24 private static final int MIN_RSSI = -100; 25 private static final int MAX_RSSI = -55; 26 27 @Test 28 public void testWifiIcon() { 29 String testSsid = "Test SSID"; 30 setWifiEnabled(true); 31 verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK); 32 33 setWifiState(true, testSsid); 34 verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[0][0]); 35 36 for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) { 37 setWifiLevel(testLevel); 38 39 setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true); 40 verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); 41 setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, false, true); 42 verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[0][testLevel]); 43 } 44 } 45 46 @Test 47 public void testQsWifiIcon() { 48 String testSsid = "Test SSID"; 49 50 setWifiEnabled(false); 51 verifyLastQsWifiIcon(false, false, WifiIcons.QS_WIFI_NO_NETWORK, null); 52 53 setWifiEnabled(true); 54 verifyLastQsWifiIcon(true, false, WifiIcons.QS_WIFI_NO_NETWORK, null); 55 56 setWifiState(true, testSsid); 57 for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) { 58 setWifiLevel(testLevel); 59 60 setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true); 61 verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel], 62 testSsid); 63 setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, false, true); 64 verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[0][testLevel], 65 testSsid); 66 } 67 } 68 69 @Test 70 public void testQsDataDirection() { 71 // Setup normal connection 72 String testSsid = "Test SSID"; 73 int testLevel = 2; 74 setWifiEnabled(true); 75 setWifiState(true, testSsid); 76 setWifiLevel(testLevel); 77 setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true); 78 verifyLastQsWifiIcon(true, true, 79 WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel], testSsid); 80 81 setWifiActivity(WifiManager.DATA_ACTIVITY_NONE); 82 verifyLastQsDataDirection(false, false); 83 setWifiActivity(WifiManager.DATA_ACTIVITY_IN); 84 verifyLastQsDataDirection(true, false); 85 setWifiActivity(WifiManager.DATA_ACTIVITY_OUT); 86 verifyLastQsDataDirection(false, true); 87 setWifiActivity(WifiManager.DATA_ACTIVITY_INOUT); 88 verifyLastQsDataDirection(true, true); 89 } 90 91 @Test 92 public void testRoamingIconDuringWifi() { 93 // Setup normal connection 94 String testSsid = "Test SSID"; 95 int testLevel = 2; 96 setWifiEnabled(true); 97 setWifiState(true, testSsid); 98 setWifiLevel(testLevel); 99 setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true); 100 verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); 101 102 setupDefaultSignal(); 103 setGsmRoaming(true); 104 // Still be on wifi though. 105 setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true); 106 verifyLastMobileDataIndicators(true, 107 TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[1][DEFAULT_LEVEL], 108 TelephonyIcons.ROAMING_ICON); 109 } 110 111 protected void setWifiActivity(int activity) { 112 // TODO: Not this, because this variable probably isn't sticking around. 113 mNetworkController.mWifiSignalController.setActivity(activity); 114 } 115 116 protected void setWifiLevel(int level) { 117 float amountPerLevel = (MAX_RSSI - MIN_RSSI) / (WifiIcons.WIFI_LEVEL_COUNT - 1); 118 int rssi = (int)(MIN_RSSI + level * amountPerLevel); 119 // Put RSSI in the middle of the range. 120 rssi += amountPerLevel / 2; 121 Intent i = new Intent(WifiManager.RSSI_CHANGED_ACTION); 122 i.putExtra(WifiManager.EXTRA_NEW_RSSI, rssi); 123 mNetworkController.onReceive(mContext, i); 124 } 125 126 protected void setWifiEnabled(boolean enabled) { 127 Intent i = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION); 128 i.putExtra(WifiManager.EXTRA_WIFI_STATE, 129 enabled ? WifiManager.WIFI_STATE_ENABLED : WifiManager.WIFI_STATE_DISABLED); 130 mNetworkController.onReceive(mContext, i); 131 } 132 133 protected void setWifiState(boolean connected, String ssid) { 134 Intent i = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION); 135 NetworkInfo networkInfo = Mockito.mock(NetworkInfo.class); 136 Mockito.when(networkInfo.isConnected()).thenReturn(connected); 137 138 WifiInfo wifiInfo = Mockito.mock(WifiInfo.class); 139 Mockito.when(wifiInfo.getSSID()).thenReturn(ssid); 140 141 i.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo); 142 i.putExtra(WifiManager.EXTRA_WIFI_INFO, wifiInfo); 143 mNetworkController.onReceive(mContext, i); 144 } 145 146 protected void verifyLastQsDataDirection(boolean in, boolean out) { 147 ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class); 148 ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class); 149 150 Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( 151 Mockito.anyBoolean(), Mockito.any(IconState.class), Mockito.any(IconState.class), 152 inArg.capture(), outArg.capture(), Mockito.anyString()); 153 assertEquals("WiFi data in, in quick settings", in, (boolean) inArg.getValue()); 154 assertEquals("WiFi data out, in quick settings", out, (boolean) outArg.getValue()); 155 } 156 157 protected void verifyLastQsWifiIcon(boolean enabled, boolean connected, int icon, 158 String description) { 159 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class); 160 ArgumentCaptor<Boolean> enabledArg = ArgumentCaptor.forClass(Boolean.class); 161 ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class); 162 163 Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( 164 enabledArg.capture(), Mockito.any(IconState.class), 165 iconArg.capture(), Mockito.anyBoolean(), 166 Mockito.anyBoolean(), 167 descArg.capture()); 168 IconState iconState = iconArg.getValue(); 169 assertEquals("WiFi enabled, in quick settings", enabled, (boolean) enabledArg.getValue()); 170 assertEquals("WiFi connected, in quick settings", connected, iconState.visible); 171 assertEquals("WiFi signal, in quick settings", icon, iconState.icon); 172 assertEquals("WiFI desc (ssid), in quick settings", description, descArg.getValue()); 173 } 174 175 protected void verifyLastWifiIcon(boolean visible, int icon) { 176 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class); 177 178 Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( 179 Mockito.anyBoolean(), iconArg.capture(), Mockito.any(IconState.class), 180 Mockito.anyBoolean(), Mockito.anyBoolean(), Mockito.anyString()); 181 IconState iconState = iconArg.getValue(); 182 assertEquals("WiFi visible, in status bar", visible, iconState.visible); 183 assertEquals("WiFi signal, in status bar", icon, iconState.icon); 184 } 185} 186