182 lines
6.6 KiB
Java
182 lines
6.6 KiB
Java
/*
|
|
* Copyright 2020 The Android Open Source Project
|
|
*
|
|
* 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.google.android.iwlan;
|
|
|
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
|
|
|
|
import static org.junit.Assert.*;
|
|
import static org.mockito.Mockito.*;
|
|
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.net.Network;
|
|
import android.net.wifi.WifiManager;
|
|
import android.telephony.CarrierConfigManager;
|
|
import android.telephony.SubscriptionManager;
|
|
import android.telephony.TelephonyManager;
|
|
import android.telephony.data.ApnSetting;
|
|
|
|
import com.google.android.iwlan.epdg.EpdgSelector;
|
|
|
|
import org.junit.After;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.mockito.Mock;
|
|
import org.mockito.MockitoAnnotations;
|
|
import org.mockito.MockitoSession;
|
|
|
|
import java.util.*;
|
|
|
|
public class IwlanBroadcastReceiverTest {
|
|
private static final String TAG = "IwlanBroadcastReceiverTest";
|
|
private IwlanBroadcastReceiver mBroadcastReceiver;
|
|
|
|
private static final String ACTION_CARRIER_SIGNAL_PCO_VALUE =
|
|
TelephonyManager.ACTION_CARRIER_SIGNAL_PCO_VALUE;
|
|
private static final String EXTRA_APN_TYPE_INT_KEY = TelephonyManager.EXTRA_APN_TYPE;
|
|
private static final String EXTRA_PCO_ID_KEY = TelephonyManager.EXTRA_PCO_ID;
|
|
private static final String EXTRA_PCO_VALUE_KEY = TelephonyManager.EXTRA_PCO_VALUE;
|
|
|
|
private static final String TEST_PCO_STRING = "testPcoData";
|
|
private byte[] pcoData = TEST_PCO_STRING.getBytes();
|
|
private static int testSubId = 5;
|
|
private static int testSlotId = 6;
|
|
private static int testPcoIdIPv6 = 0xFF01;
|
|
private static int testPcoIdIPv4 = 0xFF02;
|
|
|
|
MockitoSession mStaticMockSession;
|
|
@Mock private Context mMockContext;
|
|
@Mock private Network mMockNetwork;
|
|
@Mock private EpdgSelector mMockEpdgSelector;
|
|
@Mock private IwlanEventListener mMockIwlanEventListener;
|
|
|
|
@Before
|
|
public void setUp() throws Exception {
|
|
MockitoAnnotations.initMocks(this);
|
|
|
|
mStaticMockSession =
|
|
mockitoSession()
|
|
.mockStatic(EpdgSelector.class)
|
|
.mockStatic(IwlanDataService.class)
|
|
.mockStatic(IwlanHelper.class)
|
|
.mockStatic(SubscriptionManager.class)
|
|
.mockStatic(IwlanEventListener.class)
|
|
.startMocking();
|
|
|
|
lenient().when(SubscriptionManager.getSlotIndex(eq(testSubId))).thenReturn(testSlotId);
|
|
|
|
lenient().when(IwlanDataService.getContext()).thenReturn(mMockContext);
|
|
|
|
lenient()
|
|
.when(EpdgSelector.getSelectorInstance(eq(mMockContext), eq(testSlotId)))
|
|
.thenReturn(mMockEpdgSelector);
|
|
|
|
lenient()
|
|
.when(
|
|
IwlanHelper.getConfig(
|
|
eq(CarrierConfigManager.Iwlan.KEY_EPDG_PCO_ID_IPV6_INT),
|
|
any(),
|
|
eq(testSlotId)))
|
|
.thenReturn(testPcoIdIPv6);
|
|
|
|
lenient()
|
|
.when(
|
|
IwlanHelper.getConfig(
|
|
eq(CarrierConfigManager.Iwlan.KEY_EPDG_PCO_ID_IPV4_INT),
|
|
any(),
|
|
eq(testSlotId)))
|
|
.thenReturn(testPcoIdIPv4);
|
|
|
|
lenient()
|
|
.when(IwlanEventListener.getInstance(eq(mMockContext), eq(testSlotId)))
|
|
.thenReturn(mMockIwlanEventListener);
|
|
|
|
// New BroadcastReceiver object
|
|
mBroadcastReceiver = new IwlanBroadcastReceiver();
|
|
}
|
|
|
|
@After
|
|
public void cleanUp() throws Exception {
|
|
mStaticMockSession.finishMocking();
|
|
}
|
|
|
|
@Test
|
|
public void testOnReceiveIPv6Pass() throws Exception {
|
|
onReceiveMethodWithArgs(ApnSetting.TYPE_IMS, testPcoIdIPv6);
|
|
|
|
// Verify the called times of setPcoData method
|
|
verify(mMockEpdgSelector, times(1)).setPcoData(testPcoIdIPv6, pcoData);
|
|
}
|
|
|
|
@Test
|
|
public void testOnReceiveIPv4Pass() throws Exception {
|
|
onReceiveMethodWithArgs(ApnSetting.TYPE_IMS, testPcoIdIPv4);
|
|
|
|
// Verify the called times of setPcoData method
|
|
verify(mMockEpdgSelector, times(1)).setPcoData(testPcoIdIPv4, pcoData);
|
|
}
|
|
|
|
@Test
|
|
public void testOnReceiveIncorrectApnType() throws Exception {
|
|
onReceiveMethodWithArgs(ApnSetting.TYPE_DEFAULT, testPcoIdIPv6);
|
|
|
|
// Verify the called times of setPcoData method
|
|
verify(mMockEpdgSelector, times(0)).setPcoData(testPcoIdIPv6, pcoData);
|
|
}
|
|
|
|
@Test
|
|
public void testOnReceiveMethodIncorrectPcoId() throws Exception {
|
|
onReceiveMethodWithArgs(ApnSetting.TYPE_IMS, 0xFF00);
|
|
|
|
// Verify the called times of setPcoData method
|
|
verify(mMockEpdgSelector, times(0)).setPcoData(0xFF00, pcoData);
|
|
}
|
|
|
|
@Test
|
|
public void testCarrierConfigChanged() throws Exception {
|
|
final Intent intent = new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
|
|
intent.putExtra(CarrierConfigManager.EXTRA_SLOT_INDEX, testSlotId);
|
|
|
|
// Trigger the onReceive
|
|
mBroadcastReceiver.onReceive(mMockContext, intent);
|
|
|
|
verify(mMockIwlanEventListener).onBroadcastReceived(intent);
|
|
}
|
|
|
|
@Test
|
|
public void testWifiStateChanged() throws Exception {
|
|
final Intent intent = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION);
|
|
intent.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED);
|
|
|
|
// Trigger broadcast
|
|
mBroadcastReceiver.onReceive(mMockContext, intent);
|
|
|
|
verify(mMockIwlanEventListener).onBroadcastReceived(intent);
|
|
}
|
|
private void onReceiveMethodWithArgs(int apnType, int pcoId) {
|
|
// Create intent object
|
|
final Intent mIntent = new Intent(ACTION_CARRIER_SIGNAL_PCO_VALUE);
|
|
mIntent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, testSubId);
|
|
mIntent.putExtra(EXTRA_APN_TYPE_INT_KEY, apnType);
|
|
mIntent.putExtra(EXTRA_PCO_ID_KEY, pcoId);
|
|
mIntent.putExtra(EXTRA_PCO_VALUE_KEY, pcoData);
|
|
|
|
// Trigger onReceive method
|
|
mBroadcastReceiver.onReceive(mMockContext, mIntent);
|
|
}
|
|
}
|