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