368 lines
15 KiB
Java
368 lines
15 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.net.ConnectivityManager;
|
||
|
import android.telephony.AccessNetworkConstants;
|
||
|
import android.telephony.INetworkService;
|
||
|
import android.telephony.INetworkServiceCallback;
|
||
|
import android.telephony.NetworkRegistrationInfo;
|
||
|
import android.telephony.NetworkServiceCallback;
|
||
|
import android.telephony.SubscriptionInfo;
|
||
|
import android.telephony.SubscriptionManager;
|
||
|
import android.telephony.TelephonyManager;
|
||
|
|
||
|
import com.google.android.iwlan.IwlanNetworkService.IwlanNetworkServiceProvider;
|
||
|
|
||
|
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.Arrays;
|
||
|
|
||
|
public class IwlanNetworkServiceTest {
|
||
|
private static final String TAG = IwlanNetworkServiceTest.class.getSimpleName();
|
||
|
private static final int DEFAULT_SLOT_INDEX = 0;
|
||
|
|
||
|
@Mock private Context mMockContext;
|
||
|
@Mock private ConnectivityManager mMockConnectivityManager;
|
||
|
@Mock private SubscriptionManager mMockSubscriptionManager;
|
||
|
@Mock private SubscriptionInfo mMockSubscriptionInfo;
|
||
|
@Mock private INetworkServiceCallback mCallback;
|
||
|
MockitoSession mStaticMockSession;
|
||
|
|
||
|
IwlanNetworkService mIwlanNetworkService;
|
||
|
INetworkService mBinder;
|
||
|
IwlanNetworkServiceProvider mIwlanNetworkServiceProvider;
|
||
|
|
||
|
@Before
|
||
|
public void setUp() throws Exception {
|
||
|
MockitoAnnotations.initMocks(this);
|
||
|
|
||
|
mStaticMockSession =
|
||
|
mockitoSession()
|
||
|
.mockStatic(IwlanHelper.class)
|
||
|
.mockStatic(SubscriptionManager.class)
|
||
|
.startMocking();
|
||
|
|
||
|
when(mMockContext.getSystemService(eq(ConnectivityManager.class)))
|
||
|
.thenReturn(mMockConnectivityManager);
|
||
|
|
||
|
when(mMockContext.getSystemService(eq(SubscriptionManager.class)))
|
||
|
.thenReturn(mMockSubscriptionManager);
|
||
|
|
||
|
when(mMockSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(
|
||
|
eq(DEFAULT_SLOT_INDEX)))
|
||
|
.thenReturn(mMockSubscriptionInfo);
|
||
|
|
||
|
lenient()
|
||
|
.when(SubscriptionManager.from(eq(mMockContext)))
|
||
|
.thenReturn(mMockSubscriptionManager);
|
||
|
|
||
|
mIwlanNetworkService = new IwlanNetworkService();
|
||
|
mIwlanNetworkService.setAppContext(mMockContext);
|
||
|
mIwlanNetworkServiceProvider = null;
|
||
|
|
||
|
mBinder = mIwlanNetworkService.mBinder;
|
||
|
mBinder.createNetworkServiceProvider(DEFAULT_SLOT_INDEX);
|
||
|
mBinder.registerForNetworkRegistrationInfoChanged(DEFAULT_SLOT_INDEX, mCallback);
|
||
|
}
|
||
|
|
||
|
@After
|
||
|
public void cleanUp() throws Exception {
|
||
|
mBinder.removeNetworkServiceProvider(DEFAULT_SLOT_INDEX);
|
||
|
mStaticMockSession.finishMocking();
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
public void testRequestNetworkRegistrationInfo() throws Exception {
|
||
|
int domain = NetworkRegistrationInfo.DOMAIN_PS;
|
||
|
boolean mIsSubActive = true;
|
||
|
long startTime;
|
||
|
|
||
|
// Wait for IwlanNetworkServiceProvider created and timeout is 1 second.
|
||
|
startTime = System.currentTimeMillis();
|
||
|
while (System.currentTimeMillis() - startTime < 1000) {
|
||
|
mIwlanNetworkServiceProvider =
|
||
|
mIwlanNetworkService.getNetworkServiceProvider(DEFAULT_SLOT_INDEX);
|
||
|
if (mIwlanNetworkServiceProvider != null) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
assertTrue(mIwlanNetworkServiceProvider != null);
|
||
|
|
||
|
// Set Wifi on and verify mCallback should receive onNetworkStateChanged.
|
||
|
mIwlanNetworkService.setNetworkConnected(true, IwlanNetworkService.Transport.WIFI);
|
||
|
verify(mCallback, timeout(1000).times(1)).onNetworkStateChanged();
|
||
|
|
||
|
// Set Sub active and verify mCallback should receive onNetworkStateChanged.
|
||
|
mIwlanNetworkServiceProvider.subscriptionChanged();
|
||
|
verify(mCallback, timeout(1000).times(2)).onNetworkStateChanged();
|
||
|
|
||
|
// Create expected NetworkRegistrationInfo
|
||
|
NetworkRegistrationInfo.Builder expectedStateBuilder =
|
||
|
generateStateBuilder(
|
||
|
domain, mIsSubActive, NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
|
||
|
|
||
|
mBinder.requestNetworkRegistrationInfo(0, domain, mCallback);
|
||
|
|
||
|
verify(mCallback, timeout(1000).times(1))
|
||
|
.onRequestNetworkRegistrationInfoComplete(
|
||
|
eq(NetworkServiceCallback.RESULT_SUCCESS),
|
||
|
eq(expectedStateBuilder.build()));
|
||
|
|
||
|
IwlanNetworkService.setNetworkConnected(
|
||
|
false, IwlanNetworkService.Transport.UNSPECIFIED_NETWORK);
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
public void testNetworkRegistrationInfoForCellularAndCstDisabled() throws Exception {
|
||
|
int domain = NetworkRegistrationInfo.DOMAIN_PS;
|
||
|
boolean mIsSubActive = true;
|
||
|
long startTime;
|
||
|
|
||
|
// Wait for IwlanNetworkServiceProvider created and timeout is 1 second.
|
||
|
startTime = System.currentTimeMillis();
|
||
|
while (System.currentTimeMillis() - startTime < 1000) {
|
||
|
mIwlanNetworkServiceProvider =
|
||
|
mIwlanNetworkService.getNetworkServiceProvider(DEFAULT_SLOT_INDEX);
|
||
|
if (mIwlanNetworkServiceProvider != null) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
lenient()
|
||
|
.when(
|
||
|
IwlanHelper.isCrossSimCallingEnabled(
|
||
|
eq(mMockContext), eq(DEFAULT_SLOT_INDEX)))
|
||
|
.thenReturn(false);
|
||
|
lenient()
|
||
|
.when(IwlanHelper.isDefaultDataSlot(eq(mMockContext), eq(DEFAULT_SLOT_INDEX)))
|
||
|
.thenReturn(true);
|
||
|
|
||
|
assertTrue(mIwlanNetworkServiceProvider != null);
|
||
|
|
||
|
// Set Network on and verify mCallback should receive onNetworkStateChanged.
|
||
|
mIwlanNetworkService.setNetworkConnected(true, IwlanNetworkService.Transport.MOBILE);
|
||
|
verify(mCallback, timeout(1000).times(1)).onNetworkStateChanged();
|
||
|
|
||
|
// Set Sub active and verify mCallback should receive onNetworkStateChanged.
|
||
|
mIwlanNetworkServiceProvider.subscriptionChanged();
|
||
|
verify(mCallback, timeout(1000).times(2)).onNetworkStateChanged();
|
||
|
|
||
|
// Create expected NetworkRegistrationInfo
|
||
|
NetworkRegistrationInfo.Builder expectedStateBuilder =
|
||
|
generateStateBuilder(
|
||
|
domain,
|
||
|
mIsSubActive,
|
||
|
NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_SEARCHING);
|
||
|
|
||
|
mBinder.requestNetworkRegistrationInfo(0, domain, mCallback);
|
||
|
|
||
|
verify(mCallback, timeout(1000).times(1))
|
||
|
.onRequestNetworkRegistrationInfoComplete(
|
||
|
eq(NetworkServiceCallback.RESULT_SUCCESS),
|
||
|
eq(expectedStateBuilder.build()));
|
||
|
|
||
|
IwlanNetworkService.setNetworkConnected(
|
||
|
false, IwlanNetworkService.Transport.UNSPECIFIED_NETWORK);
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
public void testNetworkRegistrationInfoForCellularAndCstEnabled() throws Exception {
|
||
|
int domain = NetworkRegistrationInfo.DOMAIN_PS;
|
||
|
boolean mIsSubActive = true;
|
||
|
long startTime;
|
||
|
|
||
|
// Wait for IwlanNetworkServiceProvider created and timeout is 1 second.
|
||
|
startTime = System.currentTimeMillis();
|
||
|
while (System.currentTimeMillis() - startTime < 1000) {
|
||
|
mIwlanNetworkServiceProvider =
|
||
|
mIwlanNetworkService.getNetworkServiceProvider(DEFAULT_SLOT_INDEX);
|
||
|
if (mIwlanNetworkServiceProvider != null) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
lenient()
|
||
|
.when(
|
||
|
IwlanHelper.isCrossSimCallingEnabled(
|
||
|
eq(mMockContext), eq(DEFAULT_SLOT_INDEX)))
|
||
|
.thenReturn(true);
|
||
|
lenient()
|
||
|
.when(IwlanHelper.isDefaultDataSlot(eq(mMockContext), eq(DEFAULT_SLOT_INDEX)))
|
||
|
.thenReturn(false);
|
||
|
|
||
|
assertTrue(mIwlanNetworkServiceProvider != null);
|
||
|
|
||
|
// Set Network on and verify mCallback should receive onNetworkStateChanged.
|
||
|
mIwlanNetworkService.setNetworkConnected(true, IwlanNetworkService.Transport.MOBILE);
|
||
|
verify(mCallback, timeout(1000).times(1)).onNetworkStateChanged();
|
||
|
|
||
|
// Set Sub active and verify mCallback should receive onNetworkStateChanged.
|
||
|
mIwlanNetworkServiceProvider.subscriptionChanged();
|
||
|
verify(mCallback, timeout(1000).times(2)).onNetworkStateChanged();
|
||
|
|
||
|
// Create expected NetworkRegistrationInfo
|
||
|
NetworkRegistrationInfo.Builder expectedStateBuilder =
|
||
|
generateStateBuilder(
|
||
|
domain, mIsSubActive, NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
|
||
|
|
||
|
mBinder.requestNetworkRegistrationInfo(0, domain, mCallback);
|
||
|
|
||
|
verify(mCallback, timeout(1000).times(1))
|
||
|
.onRequestNetworkRegistrationInfoComplete(
|
||
|
eq(NetworkServiceCallback.RESULT_SUCCESS),
|
||
|
eq(expectedStateBuilder.build()));
|
||
|
|
||
|
IwlanNetworkService.setNetworkConnected(
|
||
|
false, IwlanNetworkService.Transport.UNSPECIFIED_NETWORK);
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
public void testNetworkRegistrationInfoForWiFiAndCstEnabled() throws Exception {
|
||
|
int domain = NetworkRegistrationInfo.DOMAIN_PS;
|
||
|
boolean mIsSubActive = true;
|
||
|
long startTime;
|
||
|
|
||
|
// Wait for IwlanNetworkServiceProvider created and timeout is 1 second.
|
||
|
startTime = System.currentTimeMillis();
|
||
|
while (System.currentTimeMillis() - startTime < 1000) {
|
||
|
mIwlanNetworkServiceProvider =
|
||
|
mIwlanNetworkService.getNetworkServiceProvider(DEFAULT_SLOT_INDEX);
|
||
|
if (mIwlanNetworkServiceProvider != null) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
lenient()
|
||
|
.when(
|
||
|
IwlanHelper.isCrossSimCallingEnabled(
|
||
|
eq(mMockContext), eq(DEFAULT_SLOT_INDEX)))
|
||
|
.thenReturn(true);
|
||
|
lenient()
|
||
|
.when(IwlanHelper.isDefaultDataSlot(eq(mMockContext), eq(DEFAULT_SLOT_INDEX)))
|
||
|
.thenReturn(true);
|
||
|
|
||
|
assertTrue(mIwlanNetworkServiceProvider != null);
|
||
|
|
||
|
// Set Network on and verify mCallback should receive onNetworkStateChanged.
|
||
|
mIwlanNetworkService.setNetworkConnected(true, IwlanNetworkService.Transport.WIFI);
|
||
|
verify(mCallback, timeout(1000).times(1)).onNetworkStateChanged();
|
||
|
|
||
|
// Set Sub active and verify mCallback should receive onNetworkStateChanged.
|
||
|
mIwlanNetworkServiceProvider.subscriptionChanged();
|
||
|
verify(mCallback, timeout(1000).times(2)).onNetworkStateChanged();
|
||
|
|
||
|
// Create expected NetworkRegistrationInfo
|
||
|
NetworkRegistrationInfo.Builder expectedStateBuilder =
|
||
|
generateStateBuilder(
|
||
|
domain, mIsSubActive, NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
|
||
|
|
||
|
mBinder.requestNetworkRegistrationInfo(0, domain, mCallback);
|
||
|
|
||
|
verify(mCallback, timeout(1000).times(1))
|
||
|
.onRequestNetworkRegistrationInfoComplete(
|
||
|
eq(NetworkServiceCallback.RESULT_SUCCESS),
|
||
|
eq(expectedStateBuilder.build()));
|
||
|
|
||
|
IwlanNetworkService.setNetworkConnected(
|
||
|
false, IwlanNetworkService.Transport.UNSPECIFIED_NETWORK);
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
public void testNetworkRegistrationInfoForWiFiAndCstDisabled() throws Exception {
|
||
|
int domain = NetworkRegistrationInfo.DOMAIN_PS;
|
||
|
boolean mIsSubActive = true;
|
||
|
long startTime;
|
||
|
|
||
|
// Wait for IwlanNetworkServiceProvider created and timeout is 1 second.
|
||
|
startTime = System.currentTimeMillis();
|
||
|
while (System.currentTimeMillis() - startTime < 1000) {
|
||
|
mIwlanNetworkServiceProvider =
|
||
|
mIwlanNetworkService.getNetworkServiceProvider(DEFAULT_SLOT_INDEX);
|
||
|
if (mIwlanNetworkServiceProvider != null) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
lenient()
|
||
|
.when(
|
||
|
IwlanHelper.isCrossSimCallingEnabled(
|
||
|
eq(mMockContext), eq(DEFAULT_SLOT_INDEX)))
|
||
|
.thenReturn(false);
|
||
|
lenient()
|
||
|
.when(IwlanHelper.isDefaultDataSlot(eq(mMockContext), eq(DEFAULT_SLOT_INDEX)))
|
||
|
.thenReturn(true);
|
||
|
|
||
|
assertTrue(mIwlanNetworkServiceProvider != null);
|
||
|
|
||
|
// Set Network on and verify mCallback should receive onNetworkStateChanged.
|
||
|
mIwlanNetworkService.setNetworkConnected(true, IwlanNetworkService.Transport.WIFI);
|
||
|
verify(mCallback, timeout(1000).times(1)).onNetworkStateChanged();
|
||
|
|
||
|
// Set Sub active and verify mCallback should receive onNetworkStateChanged.
|
||
|
mIwlanNetworkServiceProvider.subscriptionChanged();
|
||
|
verify(mCallback, timeout(1000).times(2)).onNetworkStateChanged();
|
||
|
|
||
|
// Create expected NetworkRegistrationInfo
|
||
|
NetworkRegistrationInfo.Builder expectedStateBuilder =
|
||
|
generateStateBuilder(
|
||
|
domain, mIsSubActive, NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
|
||
|
|
||
|
mBinder.requestNetworkRegistrationInfo(0, domain, mCallback);
|
||
|
|
||
|
verify(mCallback, timeout(1000).times(1))
|
||
|
.onRequestNetworkRegistrationInfoComplete(
|
||
|
eq(NetworkServiceCallback.RESULT_SUCCESS),
|
||
|
eq(expectedStateBuilder.build()));
|
||
|
|
||
|
IwlanNetworkService.setNetworkConnected(
|
||
|
false, IwlanNetworkService.Transport.UNSPECIFIED_NETWORK);
|
||
|
}
|
||
|
|
||
|
private NetworkRegistrationInfo.Builder generateStateBuilder(
|
||
|
int domain, boolean isSubActive, int registrationState) {
|
||
|
NetworkRegistrationInfo.Builder expectedStateBuilder =
|
||
|
new NetworkRegistrationInfo.Builder();
|
||
|
expectedStateBuilder
|
||
|
.setAccessNetworkTechnology(
|
||
|
(registrationState
|
||
|
== NetworkRegistrationInfo
|
||
|
.REGISTRATION_STATE_NOT_REGISTERED_SEARCHING)
|
||
|
? TelephonyManager.NETWORK_TYPE_UNKNOWN
|
||
|
: TelephonyManager.NETWORK_TYPE_IWLAN)
|
||
|
.setAvailableServices(Arrays.asList(NetworkRegistrationInfo.SERVICE_TYPE_DATA))
|
||
|
.setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)
|
||
|
.setEmergencyOnly(!isSubActive)
|
||
|
.setDomain(domain)
|
||
|
.setRegistrationState(registrationState);
|
||
|
|
||
|
return expectedStateBuilder;
|
||
|
}
|
||
|
}
|