fionaxu | a21a87b | 2016-12-13 17:15:11 -0800 | [diff] [blame] | 1 | package com.android.carrierdefaultapp; |
| 2 | |
| 3 | import android.annotation.TargetApi; |
| 4 | import android.content.Intent; |
| 5 | import android.net.ConnectivityManager; |
| 6 | import android.net.Network; |
| 7 | import android.net.NetworkCapabilities; |
| 8 | import android.net.NetworkInfo; |
| 9 | import android.net.NetworkRequest; |
| 10 | |
| 11 | import com.android.internal.telephony.TelephonyIntents; |
| 12 | |
| 13 | import org.junit.After; |
| 14 | import org.junit.Before; |
| 15 | import org.junit.Test; |
| 16 | import org.mockito.ArgumentCaptor; |
| 17 | import org.mockito.Captor; |
| 18 | import org.mockito.Mock; |
| 19 | |
| 20 | import static org.mockito.Matchers.any; |
| 21 | import static org.mockito.Matchers.anyInt; |
| 22 | import static org.mockito.Matchers.eq; |
| 23 | import static org.mockito.Mockito.atLeast; |
| 24 | import static org.mockito.Mockito.doReturn; |
| 25 | import static org.mockito.Mockito.times; |
| 26 | import static org.mockito.Mockito.verify; |
| 27 | |
| 28 | public class LaunchCaptivePortalActivityTest extends |
| 29 | CarrierDefaultActivityTestCase<CaptivePortalLaunchActivity> { |
| 30 | |
| 31 | @Mock |
| 32 | private ConnectivityManager mCm; |
| 33 | @Mock |
| 34 | private NetworkInfo mNetworkInfo; |
| 35 | @Mock |
| 36 | private Network mNetwork; |
| 37 | |
| 38 | @Captor |
| 39 | private ArgumentCaptor<Integer> mInt; |
| 40 | @Captor |
| 41 | private ArgumentCaptor<NetworkRequest> mNetworkReq; |
| 42 | |
| 43 | private NetworkCapabilities mNetworkCapabilities; |
| 44 | |
| 45 | public LaunchCaptivePortalActivityTest() { |
| 46 | super(CaptivePortalLaunchActivity.class); |
| 47 | } |
| 48 | |
| 49 | @Before |
| 50 | public void setUp() throws Exception { |
| 51 | super.setUp(); |
| 52 | injectSystemService(ConnectivityManager.class, mCm); |
| 53 | } |
| 54 | |
| 55 | @After |
| 56 | public void tearDown() throws Exception { |
| 57 | super.tearDown(); |
| 58 | } |
| 59 | |
| 60 | @Override |
| 61 | protected Intent createActivityIntent() { |
| 62 | Intent intent = new Intent(getInstrumentation().getTargetContext(), |
| 63 | CaptivePortalLaunchActivity.class); |
| 64 | intent.putExtra(TelephonyIntents.EXTRA_REDIRECTION_URL_KEY, "url"); |
| 65 | return intent; |
| 66 | } |
| 67 | |
| 68 | @Test |
| 69 | public void testWithoutInternetConnection() throws Throwable { |
| 70 | startActivity(); |
| 71 | TestContext.waitForMs(100); |
| 72 | verify(mCm, atLeast(1)).requestNetwork(mNetworkReq.capture(), any(), mInt.capture()); |
| 73 | // verify network request |
| 74 | assert(mNetworkReq.getValue().networkCapabilities.hasCapability( |
| 75 | NetworkCapabilities.NET_CAPABILITY_INTERNET)); |
| 76 | assert(mNetworkReq.getValue().networkCapabilities.hasTransport( |
| 77 | NetworkCapabilities.TRANSPORT_CELLULAR)); |
| 78 | assertFalse(mNetworkReq.getValue().networkCapabilities.hasCapability( |
| 79 | NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)); |
| 80 | assertEquals(CaptivePortalLaunchActivity.NETWORK_REQUEST_TIMEOUT_IN_MS, |
| 81 | (int) mInt.getValue()); |
| 82 | // verify captive portal app is not launched due to unavailable network |
| 83 | assertNull(getStartedActivityIntent()); |
| 84 | stopActivity(); |
| 85 | } |
| 86 | |
| 87 | @Test |
| 88 | public void testWithInternetConnection() throws Throwable { |
| 89 | // Mock internet connection |
| 90 | mNetworkCapabilities = new NetworkCapabilities() |
| 91 | .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) |
| 92 | .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); |
| 93 | doReturn(new Network[]{mNetwork}).when(mCm).getAllNetworks(); |
| 94 | doReturn(mNetworkCapabilities).when(mCm).getNetworkCapabilities(eq(mNetwork)); |
| 95 | doReturn(mNetworkInfo).when(mCm).getNetworkInfo(eq(mNetwork)); |
| 96 | doReturn(true).when(mNetworkInfo).isConnected(); |
| 97 | |
| 98 | startActivity(); |
| 99 | TestContext.waitForMs(100); |
| 100 | // verify there is no network request with internet connection |
| 101 | verify(mCm, times(0)).requestNetwork(any(), any(), anyInt()); |
| 102 | // verify captive portal app is launched |
| 103 | assertNotNull(getStartedActivityIntent()); |
| 104 | assertEquals(ConnectivityManager.ACTION_CAPTIVE_PORTAL_SIGN_IN, |
| 105 | getStartedActivityIntent().getAction()); |
| 106 | stopActivity(); |
| 107 | } |
| 108 | } |