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