NetworkControllerBaseTest.java revision 29f7a7b0ae2264651c176ef50cc21cf9131247e3
1
2package com.android.systemui.statusbar.policy;
3
4import static org.mockito.Mockito.mock;
5import static org.mockito.Mockito.when;
6
7import android.content.Intent;
8import android.net.ConnectivityManager;
9import android.net.NetworkInfo;
10import android.net.wifi.WifiManager;
11import android.telephony.PhoneStateListener;
12import android.telephony.ServiceState;
13import android.telephony.SignalStrength;
14import android.telephony.TelephonyManager;
15import android.test.AndroidTestCase;
16import android.util.Log;
17
18import com.android.internal.telephony.cdma.EriInfo;
19import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback;
20import com.android.systemui.statusbar.policy.NetworkControllerImpl.SignalCluster;
21
22import org.mockito.ArgumentCaptor;
23import org.mockito.Mockito;
24
25import java.io.PrintWriter;
26import java.io.StringWriter;
27
28public class NetworkControllerBaseTest extends AndroidTestCase {
29    private static final String TAG = "NetworkControllerBaseTest";
30    protected static final int DEFAULT_LEVEL = 2;
31    protected static final int DEFAULT_SIGNAL_STRENGTH =
32            TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][DEFAULT_LEVEL];
33    protected static final int DEFAULT_QS_SIGNAL_STRENGTH =
34            TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[1][DEFAULT_LEVEL];
35    protected static final int DEFAULT_ICON = TelephonyIcons.ICON_3G;
36    protected static final int DEFAULT_QS_ICON = TelephonyIcons.QS_ICON_3G;
37
38    protected NetworkControllerImpl mNetworkController;
39    protected PhoneStateListener mPhoneStateListener;
40    protected SignalCluster mSignalCluster;
41    protected NetworkSignalChangedCallback mNetworkSignalChangedCallback;
42    private SignalStrength mSignalStrength;
43    private ServiceState mServiceState;
44    protected ConnectivityManager mMockCm;
45    protected WifiManager mMockWm;
46    protected TelephonyManager mMockTm;
47
48    @Override
49    protected void setUp() throws Exception {
50        super.setUp();
51        // Mockito stuff.
52        System.setProperty("dexmaker.dexcache", mContext.getCacheDir().getPath());
53        Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
54
55        mMockWm = mock(WifiManager.class);
56        mMockTm = mock(TelephonyManager.class);
57        mMockCm = mock(ConnectivityManager.class);
58        when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(true);
59
60        mSignalStrength = mock(SignalStrength.class);
61        mServiceState = mock(ServiceState.class);
62        mSignalCluster = mock(SignalCluster.class);
63        mNetworkSignalChangedCallback = mock(NetworkSignalChangedCallback.class);
64
65        mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm,
66                mock(AccessPointController.class), mock(MobileDataController.class));
67        setupNetworkController();
68    }
69
70    protected void setupNetworkController() {
71        mPhoneStateListener = mNetworkController.mPhoneStateListener;
72        mNetworkController.addSignalCluster(mSignalCluster);
73        mNetworkController.addNetworkSignalChangedCallback(mNetworkSignalChangedCallback);
74    }
75
76    @Override
77    protected void tearDown() throws Exception {
78        StringWriter sw = new StringWriter();
79        PrintWriter pw = new PrintWriter(sw);
80        mNetworkController.dump(null, pw, null);
81        pw.flush();
82        Log.d(TAG, sw.toString());
83        super.tearDown();
84    }
85
86    // 2 Bars 3G GSM.
87    public void setupDefaultSignal() {
88        setIsGsm(true);
89        setVoiceRegState(ServiceState.STATE_IN_SERVICE);
90        setGsmRoaming(false);
91        setLevel(DEFAULT_LEVEL);
92        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
93                TelephonyManager.NETWORK_TYPE_UMTS);
94        setConnectivity(100, ConnectivityManager.TYPE_MOBILE, true);
95    }
96
97    public void setConnectivity(int inetCondition, int networkType, boolean isConnected) {
98        Intent i = new Intent(ConnectivityManager.INET_CONDITION_ACTION);
99        NetworkInfo networkInfo = mock(NetworkInfo.class);
100        when(networkInfo.isConnected()).thenReturn(isConnected);
101        when(networkInfo.getType()).thenReturn(networkType);
102        when(networkInfo.getTypeName()).thenReturn("");
103        when(mMockCm.getActiveNetworkInfo()).thenReturn(networkInfo);
104
105        i.putExtra(ConnectivityManager.EXTRA_INET_CONDITION, inetCondition);
106        mNetworkController.onReceive(mContext, i);
107    }
108
109    public void setGsmRoaming(boolean isRoaming) {
110        when(mServiceState.getRoaming()).thenReturn(isRoaming);
111        updateServiceState();
112    }
113
114    public void setCdmaRoaming(boolean isRoaming) {
115        when(mServiceState.getCdmaEriIconIndex()).thenReturn(isRoaming ?
116                EriInfo.ROAMING_INDICATOR_ON : EriInfo.ROAMING_INDICATOR_OFF);
117        when(mServiceState.getCdmaEriIconMode()).thenReturn(isRoaming ?
118                EriInfo.ROAMING_ICON_MODE_NORMAL : -1);
119        updateServiceState();
120    }
121
122    public void setVoiceRegState(int voiceRegState) {
123        when(mServiceState.getVoiceRegState()).thenReturn(voiceRegState);
124        updateServiceState();
125    }
126
127    public void setDataRegState(int dataRegState) {
128        when(mServiceState.getDataRegState()).thenReturn(dataRegState);
129        updateServiceState();
130    }
131
132    public void setIsEmergencyOnly(boolean isEmergency) {
133        when(mServiceState.isEmergencyOnly()).thenReturn(isEmergency);
134        updateServiceState();
135    }
136
137    public void setCdmaLevel(int level) {
138        when(mSignalStrength.getCdmaLevel()).thenReturn(level);
139        updateSignalStrength();
140    }
141
142    public void setLevel(int level) {
143        when(mSignalStrength.getLevel()).thenReturn(level);
144        updateSignalStrength();
145    }
146
147    public void setIsGsm(boolean gsm) {
148        when(mSignalStrength.isGsm()).thenReturn(gsm);
149        updateSignalStrength();
150    }
151
152    public void setCdmaEri(int index, int mode) {
153        // TODO: Figure this out.
154    }
155
156    private void updateSignalStrength() {
157        Log.d(TAG, "Sending Signal Strength: " + mSignalStrength);
158        mPhoneStateListener.onSignalStrengthsChanged(mSignalStrength);
159    }
160
161    private void updateServiceState() {
162        Log.d(TAG, "Sending Service State: " + mServiceState);
163        mPhoneStateListener.onServiceStateChanged(mServiceState);
164    }
165
166    public void updateCallState(int state) {
167        // Inputs not currently used in NetworkControllerImpl.
168        mPhoneStateListener.onCallStateChanged(state, "0123456789");
169    }
170
171    public void updateDataConnectionState(int dataState, int dataNetType) {
172        mPhoneStateListener.onDataConnectionStateChanged(dataState, dataNetType);
173    }
174
175    public void updateDataActivity(int dataActivity) {
176        mPhoneStateListener.onDataActivity(dataActivity);
177    }
178
179    protected void verifyLastQsMobileDataIndicators(boolean visible, int icon, int typeIcon,
180            boolean dataIn, boolean dataOut, boolean noSim) {
181        ArgumentCaptor<Integer> iconArg = ArgumentCaptor.forClass(Integer.class);
182        ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
183        ArgumentCaptor<Boolean> visibleArg = ArgumentCaptor.forClass(Boolean.class);
184        ArgumentCaptor<Boolean> dataInArg = ArgumentCaptor.forClass(Boolean.class);
185        ArgumentCaptor<Boolean> dataOutArg = ArgumentCaptor.forClass(Boolean.class);
186        ArgumentCaptor<Boolean> noSimArg = ArgumentCaptor.forClass(Boolean.class);
187
188        Mockito.verify(mNetworkSignalChangedCallback, Mockito.atLeastOnce())
189                .onMobileDataSignalChanged(visibleArg.capture(), iconArg.capture(),
190                        ArgumentCaptor.forClass(String.class).capture(),
191                        typeIconArg.capture(),
192                        dataInArg.capture(),
193                        dataOutArg.capture(),
194                        ArgumentCaptor.forClass(String.class).capture(),
195                        ArgumentCaptor.forClass(String.class).capture(),
196                        noSimArg.capture(),
197                        ArgumentCaptor.forClass(Boolean.class).capture());
198        assertEquals("Visibility in, quick settings", visible, (boolean) visibleArg.getValue());
199        assertEquals("Signal icon in, quick settings", icon, (int) iconArg.getValue());
200        assertEquals("Data icon in, quick settings", typeIcon, (int) typeIconArg.getValue());
201        assertEquals("Data direction in, in quick settings", dataIn,
202                (boolean) dataInArg.getValue());
203        assertEquals("Data direction out, in quick settings", dataOut,
204                (boolean) dataOutArg.getValue());
205        assertEquals("Sim state in quick settings", noSim, (boolean) noSimArg.getValue());
206    }
207
208    protected void verifyLastMobileDataIndicators(boolean visible, int icon, int typeIcon) {
209        ArgumentCaptor<Integer> iconArg = ArgumentCaptor.forClass(Integer.class);
210        ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
211        ArgumentCaptor<Boolean> visibleArg = ArgumentCaptor.forClass(Boolean.class);
212
213        // TODO: Verify all fields.
214        Mockito.verify(mSignalCluster, Mockito.atLeastOnce()).setMobileDataIndicators(
215                visibleArg.capture(), iconArg.capture(), typeIconArg.capture(),
216                ArgumentCaptor.forClass(String.class).capture(),
217                ArgumentCaptor.forClass(String.class).capture(),
218                ArgumentCaptor.forClass(Boolean.class).capture());
219
220        assertEquals("Signal icon in status bar", icon, (int) iconArg.getValue());
221        assertEquals("Data icon in status bar", typeIcon, (int) typeIconArg.getValue());
222        assertEquals("Visibility in status bar", visible, (boolean) visibleArg.getValue());
223    }
224}
225