blob: 8a18d72294358a864ecda483d3e830e7215dec30 [file] [log] [blame]
package com.android.carrierdefaultapp;
import android.annotation.TargetApi;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import com.android.internal.telephony.TelephonyIntents;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
public class LaunchCaptivePortalActivityTest extends
CarrierDefaultActivityTestCase<CaptivePortalLaunchActivity> {
@Mock
private ConnectivityManager mCm;
@Mock
private NetworkInfo mNetworkInfo;
@Mock
private Network mNetwork;
@Captor
private ArgumentCaptor<Integer> mInt;
@Captor
private ArgumentCaptor<NetworkRequest> mNetworkReq;
private NetworkCapabilities mNetworkCapabilities;
public LaunchCaptivePortalActivityTest() {
super(CaptivePortalLaunchActivity.class);
}
@Before
public void setUp() throws Exception {
super.setUp();
injectSystemService(ConnectivityManager.class, mCm);
}
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Override
protected Intent createActivityIntent() {
Intent intent = new Intent(getInstrumentation().getTargetContext(),
CaptivePortalLaunchActivity.class);
intent.putExtra(TelephonyIntents.EXTRA_REDIRECTION_URL_KEY, "url");
return intent;
}
@Test
public void testWithoutInternetConnection() throws Throwable {
startActivity();
TestContext.waitForMs(100);
verify(mCm, atLeast(1)).requestNetwork(mNetworkReq.capture(), any(), mInt.capture());
// verify network request
assert(mNetworkReq.getValue().networkCapabilities.hasCapability(
NetworkCapabilities.NET_CAPABILITY_INTERNET));
assert(mNetworkReq.getValue().networkCapabilities.hasTransport(
NetworkCapabilities.TRANSPORT_CELLULAR));
assertFalse(mNetworkReq.getValue().networkCapabilities.hasCapability(
NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED));
assertEquals(CaptivePortalLaunchActivity.NETWORK_REQUEST_TIMEOUT_IN_MS,
(int) mInt.getValue());
// verify captive portal app is not launched due to unavailable network
assertNull(getStartedActivityIntent());
stopActivity();
}
@Test
public void testWithInternetConnection() throws Throwable {
// Mock internet connection
mNetworkCapabilities = new NetworkCapabilities()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
doReturn(new Network[]{mNetwork}).when(mCm).getAllNetworks();
doReturn(mNetworkCapabilities).when(mCm).getNetworkCapabilities(eq(mNetwork));
doReturn(mNetworkInfo).when(mCm).getNetworkInfo(eq(mNetwork));
doReturn(true).when(mNetworkInfo).isConnected();
startActivity();
TestContext.waitForMs(100);
// verify there is no network request with internet connection
verify(mCm, times(0)).requestNetwork(any(), any(), anyInt());
// verify captive portal app is launched
assertNotNull(getStartedActivityIntent());
assertEquals(ConnectivityManager.ACTION_CAPTIVE_PORTAL_SIGN_IN,
getStartedActivityIntent().getAction());
stopActivity();
}
}