blob: 8a18d72294358a864ecda483d3e830e7215dec30 [file] [log] [blame]
fionaxua21a87b2016-12-13 17:15:11 -08001package com.android.carrierdefaultapp;
2
3import android.annotation.TargetApi;
4import android.content.Intent;
5import android.net.ConnectivityManager;
6import android.net.Network;
7import android.net.NetworkCapabilities;
8import android.net.NetworkInfo;
9import android.net.NetworkRequest;
10
11import com.android.internal.telephony.TelephonyIntents;
12
13import org.junit.After;
14import org.junit.Before;
15import org.junit.Test;
16import org.mockito.ArgumentCaptor;
17import org.mockito.Captor;
18import org.mockito.Mock;
19
20import static org.mockito.Matchers.any;
21import static org.mockito.Matchers.anyInt;
22import static org.mockito.Matchers.eq;
23import static org.mockito.Mockito.atLeast;
24import static org.mockito.Mockito.doReturn;
25import static org.mockito.Mockito.times;
26import static org.mockito.Mockito.verify;
27
28public 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}