ConnectivityManagerMobileTest.java revision fc2dbd04005c32360eead803e29df3cc62209cd8
1fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang/* 2fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * Copyright (C) 2010 The Android Open Source Project 3fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * 4fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * you may not use this file except in compliance with the License. 6fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * You may obtain a copy of the License at 7fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * 8fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * http://www.apache.org/licenses/LICENSE-2.0 9fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * 10fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * Unless required by applicable law or agreed to in writing, software 11fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * distributed under the License is distributed on an "AS IS" BASIS, 12fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * See the License for the specific language governing permissions and 14fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang * limitations under the License. 15fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang */ 16fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang 17fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang 18fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang 197fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangpackage com.android.connectivitymanagertest.functional; 207fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 217fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport com.android.connectivitymanagertest.ConnectivityManagerTestActivity; 227fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 237fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.content.Intent; 247fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.content.Context; 257fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.app.Instrumentation; 267fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.os.Handler; 277fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.os.Message; 287fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.ConnectivityManager; 297fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.NetworkInfo; 307fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.NetworkInfo.State; 317fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.net.NetworkInfo.DetailedState; 327fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 337fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.test.suitebuilder.annotation.LargeTest; 347fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.test.ActivityInstrumentationTestCase2; 357fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport com.android.connectivitymanagertest.ConnectivityManagerTestRunner; 367fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport com.android.connectivitymanagertest.NetworkState; 377fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport android.util.Log; 387fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangimport junit.framework.*; 397fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 407fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wangpublic class ConnectivityManagerMobileTest 417fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang extends ActivityInstrumentationTestCase2<ConnectivityManagerTestActivity> { 427fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 437fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang private static final String LOG_TAG = "ConnectivityManagerMobileTest"; 447fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang private static final String PKG_NAME = "com.android.connectivitymanagertest"; 457fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang private static final long WIFI_CONNECTION_TIMEOUT = 30 * 1000; 467fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang private static final long WIFI_NOTIFICATION_TIMEOUT = 10 * 1000; 477fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang private String TEST_ACCESS_POINT; 487fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang private ConnectivityManagerTestActivity cmActivity; 497fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 507fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public ConnectivityManagerMobileTest() { 517fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang super(PKG_NAME, ConnectivityManagerTestActivity.class); 527fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 537fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 547fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @Override 557fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void setUp() throws Exception { 567fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang super.setUp(); 577fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity = getActivity(); 587fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang ConnectivityManagerTestRunner mRunner = 597fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang (ConnectivityManagerTestRunner)getInstrumentation(); 607fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang TEST_ACCESS_POINT = mRunner.TEST_SSID; 617fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Each test case will start with cellular connection 627fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang verifyCellularConnection(); 637fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 647fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 657fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @Override 667fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void tearDown() throws Exception { 677fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // clear Wifi after each test case 687fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.clearWifi(); 697fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.finish(); 707fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "tear down ConnectivityManager test activity"); 717fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang super.tearDown(); 727fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 737fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 747fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // help function to verify 3G connection 757fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void verifyCellularConnection() { 767fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang NetworkInfo extraNetInfo = cmActivity.mNetworkInfo; 777fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang assertEquals("network type is not MOBILE", ConnectivityManager.TYPE_MOBILE, 787fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang extraNetInfo.getType()); 797fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang assertTrue("not connected to cellular network", extraNetInfo.isConnected()); 807fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang assertTrue("no data connection", cmActivity.mState.equals(State.CONNECTED)); 817fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 827fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 837fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Test case 1: Test enabling Wifi without associating with any AP 847fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @LargeTest 857fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void test3GToWifiNotification() { 867fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // As Wifi stays in DISCONNECTED, the connectivity manager will not broadcast 877fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // any network connectivity event for Wifi 887fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 897fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, networkInfo.getState(), 907fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang NetworkState.DO_NOTHING, State.CONNECTED); 917fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 927fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(), 937fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang NetworkState.DO_NOTHING, State.DISCONNECTED); 947fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Eanble Wifi 957fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.enableWifi(); 967fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang try { 977fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Thread.sleep(WIFI_NOTIFICATION_TIMEOUT); 987fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } catch (Exception e) { 997fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "exception: " + e.toString()); 1007fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1017fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 1027fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // validate state and broadcast 1037fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) { 1047fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "the state for WIFI is changed"); 1057fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "reason: " + 1067fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); 107fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang assertTrue("state validation fail", false); 1087fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1097fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { 1107fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "the state for MOBILE is changed"); 1117fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "reason: " + 1127fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE)); 1137fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang assertTrue(false); 1147fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1157fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Verify that the device is still connected to MOBILE 1167fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang verifyCellularConnection(); 1177fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1187fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 1197fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Test case 2: test connection to a given AP 1207fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang @LargeTest 1217fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang public void testConnectToWifi() { 122fc2dbd04005c32360eead803e29df3cc62209cd8Xia Wang assertNotNull("SSID is null", TEST_ACCESS_POINT); 1237fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang //Prepare for connectivity verification 1247fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 1257fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, networkInfo.getState(), 1267fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang NetworkState.TO_DISCONNECTION, State.DISCONNECTED); 1277fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 1287fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_WIFI, networkInfo.getState(), 1297fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang NetworkState.TO_CONNECTION, State.CONNECTED); 1307fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 1317fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // Enable Wifi and connect to a test access point 1327fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang assertTrue("failed to connect to " + TEST_ACCESS_POINT, 1337fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.connectToWifi(TEST_ACCESS_POINT)); 1347fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang try { 1357fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Thread.sleep(WIFI_CONNECTION_TIMEOUT); 1367fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } catch (Exception e) { 1377fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "exception: " + e.toString()); 1387fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1397fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang 1407fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang // validate states 1417fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) { 1427fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "Wifi state transition validation failed."); 1437fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "reason: " + 1447fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); 1457fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang assertTrue(false); 1467fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1477fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { 1487fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "Mobile state transition validation failed."); 1497fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang Log.v(LOG_TAG, "reason: " + 1507fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_MOBILE)); 1517fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang assertTrue(false); 1527fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1537fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang } 1547fb1f674c90eb8f85f1d1ad7dab29ac65c15cb6eXia Wang} 155