blob: f9dbcd45b19bbf5d6aaef39e95fc13ee13b726a7 [file] [log] [blame]
/*
* Copyright (C) 2016 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.carrierdefaultapp;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.Rlog;
import android.telephony.TelephonyManager;
import android.test.InstrumentationTestCase;
import com.android.internal.telephony.PhoneConstants;
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 org.mockito.MockitoAnnotations;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
public class CarrierDefaultReceiverTest extends InstrumentationTestCase {
@Mock
private NotificationManager mNotificationMgr;
@Mock
private TelephonyManager mTelephonyMgr;
@Mock
private CarrierConfigManager mCarrierConfigMgr;
@Captor
private ArgumentCaptor<Integer> mInt;
@Captor
private ArgumentCaptor<Notification> mNotification;
@Captor
private ArgumentCaptor<String> mString;
private TestContext mContext;
private CarrierDefaultBroadcastReceiver mReceiver;
private static String TAG;
private static final String PORTAL_NOTIFICATION_TAG = "CarrierDefault.Portal.Notification";
private static final int PORTAL_NOTIFICATION_ID = 0;
private static int subId = 0;
@Before
public void setUp() throws Exception {
super.setUp();
TAG = this.getClass().getSimpleName();
MockitoAnnotations.initMocks(this);
mContext = new TestContext(getInstrumentation().getTargetContext());
mContext.injectSystemService(NotificationManager.class, mNotificationMgr);
mContext.injectSystemService(TelephonyManager.class, mTelephonyMgr);
mContext.injectSystemService(CarrierConfigManager.class, mCarrierConfigMgr);
mReceiver = new CarrierDefaultBroadcastReceiver();
}
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Test
public void testOnReceiveRedirection() {
// carrier action idx list includes 4(portal notification) & 1(disable metered APNs)
// upon redirection signal
PersistableBundle b = new PersistableBundle();
b.putStringArray(CarrierConfigManager
.KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY, new String[]{"4,1"});
doReturn(b).when(mCarrierConfigMgr).getConfig();
Intent intent = new Intent(TelephonyIntents.ACTION_CARRIER_SIGNAL_REDIRECTED);
intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
Rlog.d(TAG, "OnReceive redirection intent");
mReceiver.onReceive(mContext, intent);
mContext.waitForMs(100);
Rlog.d(TAG, "verify carrier action: showPortalNotification");
verify(mNotificationMgr, times(1)).notify(mString.capture(), mInt.capture(),
mNotification.capture());
assertEquals(PORTAL_NOTIFICATION_ID, (int) mInt.getValue());
assertEquals(PORTAL_NOTIFICATION_TAG, mString.getValue());
PendingIntent pendingIntent = mNotification.getValue().contentIntent;
assertNotNull(pendingIntent);
Rlog.d(TAG, "verify carrier action: disable all metered apns");
verify(mTelephonyMgr).carrierActionSetMeteredApnsEnabled(eq(subId), eq(false));
}
}