ConnectivityServiceTest.java revision a7b9796345335e4906d98432a1d194fa242cd23e
1fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com/* 2fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com * Copyright (C) 2012 The Android Open Source Project 3fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com * 4fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com * Licensed under the Apache License, Version 2.0 (the "License"); 5fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com * you may not use this file except in compliance with the License. 6fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com * You may obtain a copy of the License at 7b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com * 8fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com * http://www.apache.org/licenses/LICENSE-2.0 9fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com * 10fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com * Unless required by applicable law or agreed to in writing, software 11fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com * distributed under the License is distributed on an "AS IS" BASIS, 1215fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com * See the License for the specific language governing permissions and 1415fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com * limitations under the License. 15b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com */ 16b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 1715fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.compackage com.android.server; 1815fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com 1915fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.comimport static android.net.ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE; 2047580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport static android.net.ConnectivityManager.TYPE_MOBILE; 2115fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.comimport static android.net.ConnectivityManager.TYPE_WIFI; 22fa0588ff672564af1c235a63589573829035a60bcaryclark@google.comimport static android.net.ConnectivityManager.getNetworkTypeName; 2347580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport static android.net.NetworkStateTracker.EVENT_STATE_CHANGED; 2447580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport static org.mockito.Matchers.anyInt; 2547580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport static org.mockito.Matchers.eq; 2647580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport static org.mockito.Matchers.isA; 2747580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport static org.mockito.Mockito.doNothing; 28f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.comimport static org.mockito.Mockito.doReturn; 290b7da433fe0eaa2833d1b2900715b013b36d93dacaryclark@google.comimport static org.mockito.Mockito.doThrow; 308f9f468b0555e95b8fc3cf4e6ee1f1fbf5492a1bcaryclark@google.comimport static org.mockito.Mockito.mock; 3173ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.comimport static org.mockito.Mockito.reset; 32a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comimport static org.mockito.Mockito.verify; 3347580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com 34f9502d7dfad5b361a3cdaa42eb75b593c95f79d8caryclark@google.comimport android.content.Context; 3547580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport android.net.INetworkPolicyManager; 3631143cf37fa38dc98f71c71e518ecc21c83b5e27caryclark@google.comimport android.net.INetworkStatsService; 37fa0588ff672564af1c235a63589573829035a60bcaryclark@google.comimport android.net.LinkProperties; 3847580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport android.net.NetworkConfig; 39fa0588ff672564af1c235a63589573829035a60bcaryclark@google.comimport android.net.NetworkInfo; 4047580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport android.net.NetworkInfo.DetailedState; 414eeda37a7456876cb8d509a4ea43c7f4c684477acaryclark@google.comimport android.net.NetworkStateTracker; 42fa0588ff672564af1c235a63589573829035a60bcaryclark@google.comimport android.net.RouteInfo; 4347580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport android.os.Handler; 44c899ad9c7fa28234d99479ab09afb6866bbd8dc3caryclark@google.comimport android.os.INetworkManagementService; 45e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.comimport android.test.AndroidTestCase; 4647580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport android.test.suitebuilder.annotation.LargeTest; 478dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.comimport android.util.Log; 48e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.comimport android.util.LogPrinter; 4947580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com 50f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.comimport org.mockito.ArgumentCaptor; 51729e1c46cea63dfaa6e4a05608b8f3be41e19dcecaryclark@google.com 5247580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comimport java.net.InetAddress; 538f9f468b0555e95b8fc3cf4e6ee1f1fbf5492a1bcaryclark@google.comimport java.util.concurrent.Future; 54afe56de6361a81eef537ddd8f6d5626c8546d4c7caryclark@google.com 558dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com/** 568f9f468b0555e95b8fc3cf4e6ee1f1fbf5492a1bcaryclark@google.com * Tests for {@link ConnectivityService}. 57fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com */ 58fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com@LargeTest 59fa0588ff672564af1c235a63589573829035a60bcaryclark@google.compublic class ConnectivityServiceTest extends AndroidTestCase { 6047580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com private static final String TAG = "ConnectivityServiceTest"; 61fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 62c91dfe417a51f73c28ecf2708df1e0bee942c6eacaryclark@google.com private static final String MOBILE_IFACE = "rmnet3"; 634eeda37a7456876cb8d509a4ea43c7f4c684477acaryclark@google.com private static final String WIFI_IFACE = "wlan6"; 646aea33f92c611d6fdc88bc2352c5c966168af83bcaryclark@google.com 656aea33f92c611d6fdc88bc2352c5c966168af83bcaryclark@google.com private static final RouteInfo MOBILE_ROUTE_V4 = RouteInfo.makeHostRoute(parse("10.0.0.33"), 663350c3c68ab75cd08721da3a938b8d2b10096d70caryclark@google.com MOBILE_IFACE); 67e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.com private static final RouteInfo MOBILE_ROUTE_V6 = RouteInfo.makeHostRoute(parse("fd00::33"), 683350c3c68ab75cd08721da3a938b8d2b10096d70caryclark@google.com MOBILE_IFACE); 69534aa5b9460639a09b9dc30d29e77782e44b8fffcaryclark@google.com 70e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.com private static final RouteInfo WIFI_ROUTE_V4 = RouteInfo.makeHostRoute(parse("192.168.0.66"), 713350c3c68ab75cd08721da3a938b8d2b10096d70caryclark@google.com parse("192.168.0.1"), 7265f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com WIFI_IFACE); 73729e1c46cea63dfaa6e4a05608b8f3be41e19dcecaryclark@google.com private static final RouteInfo WIFI_ROUTE_V6 = RouteInfo.makeHostRoute(parse("fd00::66"), 7447580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com parse("fd00::"), 758f9f468b0555e95b8fc3cf4e6ee1f1fbf5492a1bcaryclark@google.com WIFI_IFACE); 76afe56de6361a81eef537ddd8f6d5626c8546d4c7caryclark@google.com 7747580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com private INetworkManagementService mNetManager; 788f9f468b0555e95b8fc3cf4e6ee1f1fbf5492a1bcaryclark@google.com private INetworkStatsService mStatsService; 79fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com private INetworkPolicyManager mPolicyService; 80fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com private ConnectivityService.NetworkFactory mNetFactory; 81fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 826aea33f92c611d6fdc88bc2352c5c966168af83bcaryclark@google.com private BroadcastInterceptingContext mServiceContext; 83027de226c144d9e6b7a76acb2e904952b5620a5ecaryclark@google.com private ConnectivityService mService; 84fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 85fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com private MockNetwork mMobile; 8665f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com private MockNetwork mWifi; 87fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 88fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com private Handler mTrackerHandler; 89fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 90fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com private static class MockNetwork { 918dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com public NetworkStateTracker tracker; 928dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com public NetworkInfo info; 938dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com public LinkProperties link; 948dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com 9532546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com public MockNetwork(int type) { 9632546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com tracker = mock(NetworkStateTracker.class); 9732546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com info = new NetworkInfo(type, -1, getNetworkTypeName(type), null); 9832546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com link = new LinkProperties(); 9932546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com } 10032546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com 10132546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com public void doReturnDefaults() { 10232546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com // TODO: eventually CS should make defensive copies 10332546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com doReturn(new NetworkInfo(info)).when(tracker).getNetworkInfo(); 104fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com doReturn(new LinkProperties(link)).when(tracker).getLinkProperties(); 105fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 10632546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com // fallback to default TCP buffers 10732546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com doReturn("").when(tracker).getTcpBufferSizesPropName(); 108fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 109fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 110fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 111fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com @Override 112fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com public void setUp() throws Exception { 11332546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com super.setUp(); 11432546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com 1153350c3c68ab75cd08721da3a938b8d2b10096d70caryclark@google.com mServiceContext = new BroadcastInterceptingContext(getContext()); 116fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 117fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mNetManager = mock(INetworkManagementService.class); 11832546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com mStatsService = mock(INetworkStatsService.class); 119fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mPolicyService = mock(INetworkPolicyManager.class); 12032546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com mNetFactory = mock(ConnectivityService.NetworkFactory.class); 12132546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com 12273ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com mMobile = new MockNetwork(TYPE_MOBILE); 123fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mWifi = new MockNetwork(TYPE_WIFI); 124fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 125fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com // omit most network trackers 126fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com doThrow(new IllegalArgumentException("Not supported in test environment")) 12732546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com .when(mNetFactory).createTracker(anyInt(), isA(NetworkConfig.class)); 12832546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com 129235f56a92f6eb6accbb243e11b3c45e3798f38f2caryclark@google.com doReturn(mMobile.tracker) 130235f56a92f6eb6accbb243e11b3c45e3798f38f2caryclark@google.com .when(mNetFactory).createTracker(eq(TYPE_MOBILE), isA(NetworkConfig.class)); 131235f56a92f6eb6accbb243e11b3c45e3798f38f2caryclark@google.com doReturn(mWifi.tracker) 132235f56a92f6eb6accbb243e11b3c45e3798f38f2caryclark@google.com .when(mNetFactory).createTracker(eq(TYPE_WIFI), isA(NetworkConfig.class)); 133fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 134235f56a92f6eb6accbb243e11b3c45e3798f38f2caryclark@google.com final ArgumentCaptor<Handler> trackerHandler = ArgumentCaptor.forClass(Handler.class); 13532546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com doNothing().when(mMobile.tracker) 136fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com .startMonitoring(isA(Context.class), trackerHandler.capture()); 137fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 13873ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com mService = new ConnectivityService( 13973ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com mServiceContext, mNetManager, mStatsService, mPolicyService, mNetFactory); 140fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mService.systemReady(); 14132546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com 14273ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com mTrackerHandler = trackerHandler.getValue(); 14373ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com mTrackerHandler.getLooper().setMessageLogging(new LogPrinter(Log.INFO, TAG)); 14473ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com } 14573ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com 14673ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com @Override 14773ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com public void tearDown() throws Exception { 14873ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com super.tearDown(); 14932546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com } 15073ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com 15173ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com public void testMobileConnectedAddedRoutes() throws Exception { 15273ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com Future<?> nextConnBroadcast; 153fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 15473ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com // bring up mobile network 155fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mMobile.info.setDetailedState(DetailedState.CONNECTED, null, null); 156fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mMobile.link.setInterfaceName(MOBILE_IFACE); 157fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mMobile.link.addRoute(MOBILE_ROUTE_V4); 158fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mMobile.link.addRoute(MOBILE_ROUTE_V6); 159fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mMobile.doReturnDefaults(); 16032546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com 161fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com nextConnBroadcast = mServiceContext.nextBroadcastIntent(CONNECTIVITY_ACTION_IMMEDIATE); 162fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mTrackerHandler.obtainMessage(EVENT_STATE_CHANGED, mMobile.info).sendToTarget(); 163fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com nextConnBroadcast.get(); 164fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 165fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com // verify that both routes were added and DNS was flushed 16632546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com verify(mNetManager).addRoute(eq(MOBILE_IFACE), eq(MOBILE_ROUTE_V4)); 167fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com verify(mNetManager).addRoute(eq(MOBILE_IFACE), eq(MOBILE_ROUTE_V6)); 168fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com verify(mNetManager).flushNetworkDnsCache(mMobile.tracker.getNetwork().netId); 169fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 170fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 171fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 17232546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com public void testMobileWifiHandoff() throws Exception { 173fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com Future<?> nextConnBroadcast; 174fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 175fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com // bring up mobile network 176e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.com mMobile.info.setDetailedState(DetailedState.CONNECTED, null, null); 177e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.com mMobile.link.setInterfaceName(MOBILE_IFACE); 178e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.com mMobile.link.addRoute(MOBILE_ROUTE_V4); 179e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.com mMobile.link.addRoute(MOBILE_ROUTE_V6); 180e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.com mMobile.doReturnDefaults(); 181e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.com 182e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.com nextConnBroadcast = mServiceContext.nextBroadcastIntent(CONNECTIVITY_ACTION_IMMEDIATE); 183e7bd5f4041701cbab87f6e779eb18fbb9fe74216caryclark@google.com mTrackerHandler.obtainMessage(EVENT_STATE_CHANGED, mMobile.info).sendToTarget(); 1848dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com nextConnBroadcast.get(); 1858dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com 18632546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com reset(mNetManager); 1878dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com 1888dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com // now bring up wifi network 1898dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com mWifi.info.setDetailedState(DetailedState.CONNECTED, null, null); 1908dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com mWifi.link.setInterfaceName(WIFI_IFACE); 1918dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com mWifi.link.addRoute(WIFI_ROUTE_V4); 19232546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com mWifi.link.addRoute(WIFI_ROUTE_V6); 1938dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com mWifi.doReturnDefaults(); 1948dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com 1958dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com // expect that mobile will be torn down 1968dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com doReturn(true).when(mMobile.tracker).teardown(); 1978dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com 19832546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com nextConnBroadcast = mServiceContext.nextBroadcastIntent(CONNECTIVITY_ACTION_IMMEDIATE); 1998dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com mTrackerHandler.obtainMessage(EVENT_STATE_CHANGED, mWifi.info).sendToTarget(); 200fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com nextConnBroadcast.get(); 201fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 2028dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com // verify that wifi routes added, and teardown requested 2038dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com verify(mNetManager).addRoute(eq(WIFI_IFACE), eq(WIFI_ROUTE_V4)); 2048dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com verify(mNetManager).addRoute(eq(WIFI_IFACE), eq(WIFI_ROUTE_V6)); 2058dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com verify(mNetManager).flushNetworkDnsCache(mWifi.tracker.getNetwork().netId); 2068dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com verify(mMobile.tracker).teardown(); 2078dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com 2088dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com reset(mNetManager, mMobile.tracker); 2098dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com 210fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com // tear down mobile network, as requested 21132546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com mMobile.info.setDetailedState(DetailedState.DISCONNECTED, null, null); 212fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mMobile.link.clear(); 213fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mMobile.doReturnDefaults(); 214fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 215fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com nextConnBroadcast = mServiceContext.nextBroadcastIntent(CONNECTIVITY_ACTION_IMMEDIATE); 216fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com mTrackerHandler.obtainMessage(EVENT_STATE_CHANGED, mMobile.info).sendToTarget(); 217fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com nextConnBroadcast.get(); 218f9502d7dfad5b361a3cdaa42eb75b593c95f79d8caryclark@google.com 219f9502d7dfad5b361a3cdaa42eb75b593c95f79d8caryclark@google.com verify(mNetManager).removeRoute(eq(MOBILE_IFACE), eq(MOBILE_ROUTE_V4)); 220f9502d7dfad5b361a3cdaa42eb75b593c95f79d8caryclark@google.com verify(mNetManager).removeRoute(eq(MOBILE_IFACE), eq(MOBILE_ROUTE_V6)); 221f9502d7dfad5b361a3cdaa42eb75b593c95f79d8caryclark@google.com 222f9502d7dfad5b361a3cdaa42eb75b593c95f79d8caryclark@google.com } 223fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 22432546db1494a6c6433a7919844133a6ff5b5c7b2caryclark@google.com private static InetAddress parse(String addr) { 225fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com return InetAddress.parseNumericAddress(addr); 226fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 227fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com} 228fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com