blob: 79288222a5869166cf0a48a44bb07be1ff08e6aa [file] [log] [blame]
Xia Wangfc2dbd02010-03-23 12:17:06 -07001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Xia Wang7fb1f672010-03-04 11:54:39 -080017package com.android.connectivitymanagertest.functional;
18
Xia Wang7fb1f672010-03-04 11:54:39 -080019import android.content.Context;
Xia Wang7fb1f672010-03-04 11:54:39 -080020import android.net.ConnectivityManager;
21import android.net.NetworkInfo;
22import android.net.NetworkInfo.State;
Xia Wang2c159662010-03-27 18:25:14 -070023import android.net.wifi.WifiManager;
Brett Chabot4dfa2952012-01-27 20:01:42 -080024import android.os.PowerManager;
25import android.os.PowerManager.WakeLock;
26import android.provider.Settings;
Xia Wang7fb1f672010-03-04 11:54:39 -080027import android.test.ActivityInstrumentationTestCase2;
Brett Chabot4dfa2952012-01-27 20:01:42 -080028import android.test.suitebuilder.annotation.LargeTest;
Xia Wang7fb1f672010-03-04 11:54:39 -080029import android.util.Log;
Xia Wang7fb1f672010-03-04 11:54:39 -080030
Brett Chabot4dfa2952012-01-27 20:01:42 -080031import com.android.connectivitymanagertest.ConnectivityManagerTestActivity;
32import com.android.connectivitymanagertest.ConnectivityManagerTestRunner;
33import com.android.connectivitymanagertest.NetworkState;
Brett Chabot4dfa2952012-01-27 20:01:42 -080034
35public class ConnectivityManagerMobileTest extends
36 ActivityInstrumentationTestCase2<ConnectivityManagerTestActivity> {
Xia Wang7fb1f672010-03-04 11:54:39 -080037 private static final String LOG_TAG = "ConnectivityManagerMobileTest";
Xia Wang2c159662010-03-27 18:25:14 -070038
Xia Wang776cca32012-03-09 16:42:55 -080039 private String mTestAccessPoint;
Xia Wang7fb1f672010-03-04 11:54:39 -080040 private ConnectivityManagerTestActivity cmActivity;
Xia Wang2c159662010-03-27 18:25:14 -070041 private WakeLock wl;
Xia Wang776cca32012-03-09 16:42:55 -080042 private boolean mWifiOnlyFlag;
Xia Wang7fb1f672010-03-04 11:54:39 -080043
44 public ConnectivityManagerMobileTest() {
Xia Wangb97435c2011-03-03 18:41:06 -080045 super(ConnectivityManagerTestActivity.class);
Xia Wang7fb1f672010-03-04 11:54:39 -080046 }
47
48 @Override
49 public void setUp() throws Exception {
50 super.setUp();
51 cmActivity = getActivity();
52 ConnectivityManagerTestRunner mRunner =
53 (ConnectivityManagerTestRunner)getInstrumentation();
Xia Wang776cca32012-03-09 16:42:55 -080054 mTestAccessPoint = mRunner.mTestSsid;
55 mWifiOnlyFlag = mRunner.mWifiOnlyFlag;
56
Xia Wang2c159662010-03-27 18:25:14 -070057 PowerManager pm = (PowerManager)getInstrumentation().
58 getContext().getSystemService(Context.POWER_SERVICE);
59 wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "CMWakeLock");
60 wl.acquire();
Xia Wang7fb1f672010-03-04 11:54:39 -080061 // Each test case will start with cellular connection
Christopher Tatec09cdce2012-09-10 16:50:14 -070062 if (Settings.Global.getInt(getInstrumentation().getContext().getContentResolver(),
63 Settings.Global.AIRPLANE_MODE_ON) == 1) {
Xia Wanga4c2caa2011-11-17 11:11:59 -080064 log("airplane is not disabled, disable it.");
Xia Wang2dc29912011-01-11 17:35:56 -080065 cmActivity.setAirplaneMode(getInstrumentation().getContext(), false);
66 }
Xia Wang776cca32012-03-09 16:42:55 -080067
68 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -080069 if (!cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.CONNECTED,
70 ConnectivityManagerTestActivity.LONG_TIMEOUT)) {
71 // Note: When the test fails in setUp(), tearDown is not called. In that case,
72 // the activity is destroyed which blocks the next test at "getActivity()".
73 // tearDown() is called here to avoid that situation.
74 tearDown();
75 fail("Device is not connected to Mobile, setUp failed");
76 }
Xia Wangca1f2b12010-11-12 16:08:21 -080077 }
Xia Wang7fb1f672010-03-04 11:54:39 -080078 }
79
80 @Override
81 public void tearDown() throws Exception {
Xia Wang7fb1f672010-03-04 11:54:39 -080082 cmActivity.finish();
Xia Wanga4c2caa2011-11-17 11:11:59 -080083 log("tear down ConnectivityManagerTestActivity");
Xia Wang2c159662010-03-27 18:25:14 -070084 wl.release();
Xia Wangca1f2b12010-11-12 16:08:21 -080085 cmActivity.removeConfiguredNetworksAndDisableWifi();
Xia Wang8efaeb02010-12-10 17:09:18 -080086 // if airplane mode is set, disable it.
Christopher Tatec09cdce2012-09-10 16:50:14 -070087 if (Settings.Global.getInt(getInstrumentation().getContext().getContentResolver(),
88 Settings.Global.AIRPLANE_MODE_ON) == 1) {
Xia Wanga4c2caa2011-11-17 11:11:59 -080089 log("disable airplane mode if it is enabled");
Xia Wang8efaeb02010-12-10 17:09:18 -080090 cmActivity.setAirplaneMode(getInstrumentation().getContext(), false);
91 }
Xia Wang7fb1f672010-03-04 11:54:39 -080092 super.tearDown();
93 }
94
95 // help function to verify 3G connection
96 public void verifyCellularConnection() {
Xia Wangca1f2b12010-11-12 16:08:21 -080097 NetworkInfo extraNetInfo = cmActivity.mCM.getActiveNetworkInfo();
Xia Wang7fb1f672010-03-04 11:54:39 -080098 assertEquals("network type is not MOBILE", ConnectivityManager.TYPE_MOBILE,
Xia Wangca1f2b12010-11-12 16:08:21 -080099 extraNetInfo.getType());
Xia Wang7fb1f672010-03-04 11:54:39 -0800100 assertTrue("not connected to cellular network", extraNetInfo.isConnected());
Xia Wang7fb1f672010-03-04 11:54:39 -0800101 }
102
Xia Wanga4c2caa2011-11-17 11:11:59 -0800103 private void log(String message) {
104 Log.v(LOG_TAG, message);
105 }
106
107 private void sleep(long sleeptime) {
108 try {
109 Thread.sleep(sleeptime);
110 } catch (InterruptedException e) {}
111 }
112
Xia Wangbe142fc2011-02-08 14:26:48 -0800113 // Test case 1: Test enabling Wifi without associating with any AP, no broadcast on network
114 // event should be expected.
Xia Wang7fb1f672010-03-04 11:54:39 -0800115 @LargeTest
116 public void test3GToWifiNotification() {
Xia Wang776cca32012-03-09 16:42:55 -0800117 if (mWifiOnlyFlag) {
118 Log.v(LOG_TAG, this.getName() + " is excluded for wifi-only test");
119 return;
120 }
Xia Wangbe142fc2011-02-08 14:26:48 -0800121 // Enable Wi-Fi to avoid initial UNKNOWN state
Xia Wang46722032010-05-06 14:12:54 -0700122 cmActivity.enableWifi();
Xia Wanga4c2caa2011-11-17 11:11:59 -0800123 sleep(2 * ConnectivityManagerTestActivity.SHORT_TIMEOUT);
124
Xia Wangbe142fc2011-02-08 14:26:48 -0800125 // Wi-Fi is disabled
Xia Wang46722032010-05-06 14:12:54 -0700126 cmActivity.disableWifi();
Xia Wang2dc29912011-01-11 17:35:56 -0800127
Xia Wangbe142fc2011-02-08 14:26:48 -0800128 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI,
129 State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
130 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
131 State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
132 // Wait for 10 seconds for broadcasts to be sent out
Xia Wanga4c2caa2011-11-17 11:11:59 -0800133 sleep(10 * 1000);
134
Xia Wangbe142fc2011-02-08 14:26:48 -0800135 // As Wifi stays in DISCONNETED, Mobile statys in CONNECTED,
136 // the connectivity manager will not broadcast any network connectivity event for Wifi
Xia Wang7fb1f672010-03-04 11:54:39 -0800137 NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
Xia Wangb97435c2011-03-03 18:41:06 -0800138 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
139 networkInfo.getState(), NetworkState.DO_NOTHING, State.CONNECTED);
Xia Wang7fb1f672010-03-04 11:54:39 -0800140 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
141 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
142 NetworkState.DO_NOTHING, State.DISCONNECTED);
Xia Wangbe142fc2011-02-08 14:26:48 -0800143 // Eanble Wifi without associating with any AP
Xia Wang7fb1f672010-03-04 11:54:39 -0800144 cmActivity.enableWifi();
Xia Wanga4c2caa2011-11-17 11:11:59 -0800145 sleep(2 * ConnectivityManagerTestActivity.SHORT_TIMEOUT);
Xia Wang7fb1f672010-03-04 11:54:39 -0800146
147 // validate state and broadcast
148 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800149 log("the state for WIFI is changed");
150 log("reason: " +
Xia Wang7fb1f672010-03-04 11:54:39 -0800151 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
Xia Wangfc2dbd02010-03-23 12:17:06 -0700152 assertTrue("state validation fail", false);
Xia Wang7fb1f672010-03-04 11:54:39 -0800153 }
154 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800155 log("the state for MOBILE is changed");
156 log("reason: " +
Xia Wang7fb1f672010-03-04 11:54:39 -0800157 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
Xia Wang2c159662010-03-27 18:25:14 -0700158 assertTrue("state validation fail", false);
Xia Wang7fb1f672010-03-04 11:54:39 -0800159 }
160 // Verify that the device is still connected to MOBILE
161 verifyCellularConnection();
162 }
163
164 // Test case 2: test connection to a given AP
165 @LargeTest
166 public void testConnectToWifi() {
Xia Wang776cca32012-03-09 16:42:55 -0800167 assertNotNull("SSID is null", mTestAccessPoint);
Xia Wangb97435c2011-03-03 18:41:06 -0800168 NetworkInfo networkInfo;
Xia Wang776cca32012-03-09 16:42:55 -0800169 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800170 //Prepare for connectivity verification
171 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
172 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
173 networkInfo.getState(), NetworkState.TO_DISCONNECTION, State.DISCONNECTED);
174 }
Xia Wang7fb1f672010-03-04 11:54:39 -0800175 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
176 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
177 NetworkState.TO_CONNECTION, State.CONNECTED);
178
179 // Enable Wifi and connect to a test access point
Xia Wang776cca32012-03-09 16:42:55 -0800180 assertTrue("failed to connect to " + mTestAccessPoint,
181 cmActivity.connectToWifi(mTestAccessPoint));
Xia Wang2c159662010-03-27 18:25:14 -0700182
Xia Wangca1f2b12010-11-12 16:08:21 -0800183 assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
184 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wanga4c2caa2011-11-17 11:11:59 -0800185 log("wifi state is enabled");
Xia Wangca1f2b12010-11-12 16:08:21 -0800186 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
187 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang776cca32012-03-09 16:42:55 -0800188 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800189 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
190 State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
191 }
Xia Wang7fb1f672010-03-04 11:54:39 -0800192
193 // validate states
194 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800195 log("Wifi state transition validation failed.");
196 log("reason: " +
Xia Wang7fb1f672010-03-04 11:54:39 -0800197 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
198 assertTrue(false);
199 }
Xia Wang776cca32012-03-09 16:42:55 -0800200 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800201 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800202 log("Mobile state transition validation failed.");
203 log("reason: " +
Xia Wangb97435c2011-03-03 18:41:06 -0800204 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
205 assertTrue(false);
206 }
Xia Wang7fb1f672010-03-04 11:54:39 -0800207 }
208 }
Xia Wang2c159662010-03-27 18:25:14 -0700209
210 // Test case 3: connect to Wifi with known AP
211 @LargeTest
212 public void testConnectToWifWithKnownAP() {
Xia Wang776cca32012-03-09 16:42:55 -0800213 assertNotNull("SSID is null", mTestAccessPoint);
214 // Connect to mTestAccessPoint
215 assertTrue("failed to connect to " + mTestAccessPoint,
216 cmActivity.connectToWifi(mTestAccessPoint));
Xia Wangca1f2b12010-11-12 16:08:21 -0800217 assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
218 ConnectivityManagerTestActivity.LONG_TIMEOUT));
219 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
220 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang2c159662010-03-27 18:25:14 -0700221
Xia Wanga4c2caa2011-11-17 11:11:59 -0800222 sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
Xia Wang2c159662010-03-27 18:25:14 -0700223 // Disable Wifi
Xia Wanga4c2caa2011-11-17 11:11:59 -0800224 log("Disable Wifi");
Xia Wang2c159662010-03-27 18:25:14 -0700225 if (!cmActivity.disableWifi()) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800226 log("disable Wifi failed");
Xia Wang2c159662010-03-27 18:25:14 -0700227 return;
228 }
229
230 // Wait for the Wifi state to be DISABLED
Xia Wangca1f2b12010-11-12 16:08:21 -0800231 assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_DISABLED,
232 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wangb97435c2011-03-03 18:41:06 -0800233 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI,
234 State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang776cca32012-03-09 16:42:55 -0800235 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800236 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
237 State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
238 }
Xia Wang2c159662010-03-27 18:25:14 -0700239
Xia Wangb97435c2011-03-03 18:41:06 -0800240 NetworkInfo networkInfo;
Xia Wang776cca32012-03-09 16:42:55 -0800241 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800242 //Prepare for connectivity state verification
243 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
244 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
245 networkInfo.getState(), NetworkState.DO_NOTHING,
246 State.DISCONNECTED);
247 }
Xia Wang2c159662010-03-27 18:25:14 -0700248 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
249 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
250 NetworkState.TO_CONNECTION, State.CONNECTED);
251
Xia Wanga4c2caa2011-11-17 11:11:59 -0800252 // wait for 2 minutes before restart wifi
253 sleep(ConnectivityManagerTestActivity.WIFI_STOP_START_INTERVAL);
Xia Wang2c159662010-03-27 18:25:14 -0700254 // Enable Wifi again
Xia Wanga4c2caa2011-11-17 11:11:59 -0800255 log("Enable Wifi again");
Xia Wang2c159662010-03-27 18:25:14 -0700256 cmActivity.enableWifi();
257
258 // Wait for Wifi to be connected and mobile to be disconnected
Xia Wangca1f2b12010-11-12 16:08:21 -0800259 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
260 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang776cca32012-03-09 16:42:55 -0800261 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800262 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
263 State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
264 }
Xia Wang2c159662010-03-27 18:25:14 -0700265
266 // validate wifi states
267 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800268 log("Wifi state transition validation failed.");
269 log("reason: " +
Xia Wang2c159662010-03-27 18:25:14 -0700270 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
271 assertTrue(false);
272 }
273 }
274
275 // Test case 4: test disconnect Wifi
276 @LargeTest
277 public void testDisconnectWifi() {
Xia Wang776cca32012-03-09 16:42:55 -0800278 assertNotNull("SSID is null", mTestAccessPoint);
Xia Wang2c159662010-03-27 18:25:14 -0700279
280 // connect to Wifi
Xia Wang776cca32012-03-09 16:42:55 -0800281 assertTrue("failed to connect to " + mTestAccessPoint,
282 cmActivity.connectToWifi(mTestAccessPoint));
Xia Wang2c159662010-03-27 18:25:14 -0700283
Xia Wangca1f2b12010-11-12 16:08:21 -0800284 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
285 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang2c159662010-03-27 18:25:14 -0700286
287 // Wait for a few seconds to avoid the state that both Mobile and Wifi is connected
Xia Wanga4c2caa2011-11-17 11:11:59 -0800288 sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
Xia Wang2c159662010-03-27 18:25:14 -0700289
Xia Wangb97435c2011-03-03 18:41:06 -0800290 NetworkInfo networkInfo;
Xia Wang776cca32012-03-09 16:42:55 -0800291 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800292 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
293 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
294 networkInfo.getState(),
295 NetworkState.TO_CONNECTION,
296 State.CONNECTED);
297 }
Xia Wang2c159662010-03-27 18:25:14 -0700298 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
299 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
300 NetworkState.TO_DISCONNECTION, State.DISCONNECTED);
301
302 // clear Wifi
Xia Wangca1f2b12010-11-12 16:08:21 -0800303 cmActivity.removeConfiguredNetworksAndDisableWifi();
Xia Wang2c159662010-03-27 18:25:14 -0700304
Xia Wangca1f2b12010-11-12 16:08:21 -0800305 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.DISCONNECTED,
306 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang776cca32012-03-09 16:42:55 -0800307 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800308 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
309 State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
310 }
Xia Wang2c159662010-03-27 18:25:14 -0700311
312 // validate states
313 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800314 log("Wifi state transition validation failed.");
315 log("reason: " +
Xia Wang2c159662010-03-27 18:25:14 -0700316 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
317 assertTrue(false);
318 }
Xia Wang776cca32012-03-09 16:42:55 -0800319 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800320 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800321 log("Mobile state transition validation failed.");
322 log("reason: " +
Xia Wangb97435c2011-03-03 18:41:06 -0800323 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
324 assertTrue(false);
325 }
Xia Wang2c159662010-03-27 18:25:14 -0700326 }
327 }
328
329 // Test case 5: test connectivity from 3G to airplane mode, then to 3G again
330 @LargeTest
331 public void testDataConnectionWith3GToAmTo3G() {
Xia Wang776cca32012-03-09 16:42:55 -0800332 if (mWifiOnlyFlag) {
333 Log.v(LOG_TAG, this.getName() + " is excluded for wifi-only test");
334 return;
335 }
Xia Wang2c159662010-03-27 18:25:14 -0700336 //Prepare for state verification
337 NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
338 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
339 networkInfo.getState(),
340 NetworkState.TO_DISCONNECTION,
341 State.DISCONNECTED);
342 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
343 assertEquals(State.DISCONNECTED, networkInfo.getState());
Xia Wang2c159662010-03-27 18:25:14 -0700344
345 // Enable airplane mode
Xia Wanga4c2caa2011-11-17 11:11:59 -0800346 log("Enable airplane mode");
Xia Wang2c159662010-03-27 18:25:14 -0700347 cmActivity.setAirplaneMode(getInstrumentation().getContext(), true);
Xia Wanga4c2caa2011-11-17 11:11:59 -0800348 sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
Xia Wang2c159662010-03-27 18:25:14 -0700349
Xia Wang8efaeb02010-12-10 17:09:18 -0800350 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
351 assertEquals(State.DISCONNECTED, networkInfo.getState());
Xia Wang776cca32012-03-09 16:42:55 -0800352 // wait until mobile is turn off
353 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
354 State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang2c159662010-03-27 18:25:14 -0700355 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800356 log("Mobile state transition validation failed.");
357 log("reason: " +
Xia Wang2c159662010-03-27 18:25:14 -0700358 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
359 assertTrue(false);
360 }
361
362 // reset state recorder
363 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
364 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
365 networkInfo.getState(),
366 NetworkState.TO_CONNECTION,
367 State.CONNECTED);
368 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
369 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
370 NetworkState.DO_NOTHING, State.DISCONNECTED);
371
372 // disable airplane mode
373 cmActivity.setAirplaneMode(getInstrumentation().getContext(), false);
374
Xia Wangca1f2b12010-11-12 16:08:21 -0800375 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.CONNECTED,
376 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang2c159662010-03-27 18:25:14 -0700377
378 // Validate the state transition
379 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800380 log("Mobile state transition validation failed.");
381 log("reason: " +
Xia Wang2c159662010-03-27 18:25:14 -0700382 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
383 assertTrue(false);
384 }
385 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800386 log("Wifi state transition validation failed.");
387 log("reason: " +
Xia Wang2c159662010-03-27 18:25:14 -0700388 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
389 assertTrue(false);
390 }
391 }
392
393 // Test case 6: test connectivity with airplane mode Wifi connected
394 @LargeTest
395 public void testDataConnectionOverAMWithWifi() {
Xia Wang776cca32012-03-09 16:42:55 -0800396 if (mWifiOnlyFlag) {
397 Log.v(LOG_TAG, this.getName() + " is excluded for wifi-only test");
398 return;
399 }
400 assertNotNull("SSID is null", mTestAccessPoint);
Xia Wang2c159662010-03-27 18:25:14 -0700401 // Eanble airplane mode
Xia Wanga4c2caa2011-11-17 11:11:59 -0800402 log("Enable airplane mode");
Xia Wang2c159662010-03-27 18:25:14 -0700403 cmActivity.setAirplaneMode(getInstrumentation().getContext(), true);
404
Xia Wangb97435c2011-03-03 18:41:06 -0800405 NetworkInfo networkInfo;
Xia Wang776cca32012-03-09 16:42:55 -0800406 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800407 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
408 State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
409 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
410 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE,
411 networkInfo.getState(),
412 NetworkState.DO_NOTHING,
413 State.DISCONNECTED);
414 }
Xia Wang2c159662010-03-27 18:25:14 -0700415 networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
416 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(),
417 NetworkState.TO_CONNECTION, State.CONNECTED);
418
419 // Connect to Wifi
Xia Wang776cca32012-03-09 16:42:55 -0800420 assertTrue("failed to connect to " + mTestAccessPoint,
421 cmActivity.connectToWifi(mTestAccessPoint));
Xia Wangca1f2b12010-11-12 16:08:21 -0800422 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
423 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang2c159662010-03-27 18:25:14 -0700424
425 // validate state and broadcast
426 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800427 log("state validate for Wifi failed");
428 log("reason: " +
Xia Wang2c159662010-03-27 18:25:14 -0700429 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
430 assertTrue("State validation failed", false);
431 }
Xia Wang776cca32012-03-09 16:42:55 -0800432 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800433 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800434 log("state validation for Mobile failed");
435 log("reason: " +
Xia Wangb97435c2011-03-03 18:41:06 -0800436 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE));
437 assertTrue("state validation failed", false);
438 }
Xia Wang2c159662010-03-27 18:25:14 -0700439 }
440 cmActivity.setAirplaneMode(getInstrumentation().getContext(), false);
441 }
442
443 // Test case 7: test connectivity while transit from Wifi->AM->Wifi
444 @LargeTest
445 public void testDataConnectionWithWifiToAMToWifi () {
Xia Wang776cca32012-03-09 16:42:55 -0800446 if (mWifiOnlyFlag) {
447 Log.v(LOG_TAG, this.getName() + " is excluded for wifi-only test");
448 return;
449 }
450 // Connect to mTestAccessPoint
451 assertNotNull("SSID is null", mTestAccessPoint);
Xia Wang2c159662010-03-27 18:25:14 -0700452 // Connect to Wifi
Xia Wang776cca32012-03-09 16:42:55 -0800453 assertTrue("failed to connect to " + mTestAccessPoint,
454 cmActivity.connectToWifi(mTestAccessPoint));
Xia Wang2c159662010-03-27 18:25:14 -0700455
Xia Wangca1f2b12010-11-12 16:08:21 -0800456 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
457 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang2c159662010-03-27 18:25:14 -0700458
459 try {
Xia Wangca1f2b12010-11-12 16:08:21 -0800460 Thread.sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
Xia Wang2c159662010-03-27 18:25:14 -0700461 } catch (Exception e) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800462 log("exception: " + e.toString());
Xia Wang2c159662010-03-27 18:25:14 -0700463 }
464
465 // Enable airplane mode without clearing Wifi
466 cmActivity.setAirplaneMode(getInstrumentation().getContext(), true);
467
Xia Wangca1f2b12010-11-12 16:08:21 -0800468 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.DISCONNECTED,
469 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang2c159662010-03-27 18:25:14 -0700470
471 try {
Xia Wangca1f2b12010-11-12 16:08:21 -0800472 Thread.sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
Xia Wang2c159662010-03-27 18:25:14 -0700473 } catch (Exception e) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800474 log("exception: " + e.toString());
Xia Wang2c159662010-03-27 18:25:14 -0700475 }
476
477 // Prepare for state validation
Xia Wang72b301f2010-04-05 19:59:26 -0700478 NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
Xia Wang2c159662010-03-27 18:25:14 -0700479 assertEquals(State.DISCONNECTED, networkInfo.getState());
480 cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI,
481 networkInfo.getState(), NetworkState.TO_CONNECTION, State.CONNECTED);
482
483 // Disable airplane mode
484 cmActivity.setAirplaneMode(getInstrumentation().getContext(), false);
485
Xia Wangca1f2b12010-11-12 16:08:21 -0800486 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
487 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang776cca32012-03-09 16:42:55 -0800488 if (!mWifiOnlyFlag) {
Xia Wangb97435c2011-03-03 18:41:06 -0800489 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
490 State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
491 }
Xia Wang2c159662010-03-27 18:25:14 -0700492
493 // validate the state transition
494 if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800495 log("Wifi state transition validation failed.");
496 log("reason: " +
Xia Wang2c159662010-03-27 18:25:14 -0700497 cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI));
498 assertTrue(false);
499 }
Xia Wang2c159662010-03-27 18:25:14 -0700500 }
501
502 // Test case 8: test wifi state change while connecting/disconnecting to/from an AP
503 @LargeTest
504 public void testWifiStateChange () {
Xia Wang776cca32012-03-09 16:42:55 -0800505 assertNotNull("SSID is null", mTestAccessPoint);
506 //Connect to mTestAccessPoint
507 assertTrue("failed to connect to " + mTestAccessPoint,
508 cmActivity.connectToWifi(mTestAccessPoint));
Xia Wangca1f2b12010-11-12 16:08:21 -0800509 assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
510 ConnectivityManagerTestActivity.LONG_TIMEOUT));
511 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
512 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang2c159662010-03-27 18:25:14 -0700513 assertNotNull("Not associated with any AP",
514 cmActivity.mWifiManager.getConnectionInfo().getBSSID());
515
516 try {
Xia Wangca1f2b12010-11-12 16:08:21 -0800517 Thread.sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
Xia Wang2c159662010-03-27 18:25:14 -0700518 } catch (Exception e) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800519 log("exception: " + e.toString());
Xia Wang2c159662010-03-27 18:25:14 -0700520 }
521
522 // Disconnect from the current AP
Xia Wanga4c2caa2011-11-17 11:11:59 -0800523 log("disconnect from the AP");
Xia Wang2c159662010-03-27 18:25:14 -0700524 if (!cmActivity.disconnectAP()) {
Xia Wang776cca32012-03-09 16:42:55 -0800525 log("failed to disconnect from " + mTestAccessPoint);
Xia Wang2c159662010-03-27 18:25:14 -0700526 }
527
528 // Verify the connectivity state for Wifi is DISCONNECTED
Xia Wangca1f2b12010-11-12 16:08:21 -0800529 assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.DISCONNECTED,
530 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang2c159662010-03-27 18:25:14 -0700531
532 if (!cmActivity.disableWifi()) {
Xia Wanga4c2caa2011-11-17 11:11:59 -0800533 log("disable Wifi failed");
Xia Wang2c159662010-03-27 18:25:14 -0700534 return;
535 }
Xia Wangca1f2b12010-11-12 16:08:21 -0800536 assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_DISABLED,
537 ConnectivityManagerTestActivity.LONG_TIMEOUT));
Xia Wang2c159662010-03-27 18:25:14 -0700538 }
Xia Wang7fb1f672010-03-04 11:54:39 -0800539}