Refactor CarrierPrivilegeAuthenticatorTest

Refactor this test to make it easier to test the no-op
refactoring coming as a follow-up

Test: this
Change-Id: I47c81bdec2b8f9575835ba664b61721d5f2c69ff
This commit is contained in:
Chalard Jean
2022-11-14 19:18:04 +09:00
parent 265016d1d0
commit 23890c29c5

View File

@@ -20,18 +20,17 @@ import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static android.telephony.TelephonyManager.ACTION_MULTI_SIM_CONFIG_CHANGED;
import static com.android.testutils.DevSdkIgnoreRuleKt.SC_V2;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import android.annotation.NonNull;
@@ -40,14 +39,15 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.NetworkRequest;
import android.net.NetworkSpecifier;
import android.net.NetworkCapabilities;
import android.net.TelephonyNetworkSpecifier;
import android.os.Build;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import com.android.net.module.util.CollectionUtils;
import com.android.networkstack.apishim.TelephonyManagerShimImpl;
import com.android.networkstack.apishim.common.TelephonyManagerShim;
import com.android.networkstack.apishim.common.TelephonyManagerShim.CarrierPrivilegesListenerShim;
import com.android.networkstack.apishim.common.UnsupportedApiLevelException;
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo;
import com.android.testutils.DevSdkIgnoreRunner;
@@ -58,16 +58,16 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* Tests for CarrierPrivilegeAuthenticatorTest.
*
* Build, install and run with:
* runtest frameworks-net -c com.android.server.connectivity.CarrierPrivilegeAuthenticatorTest
* atest FrameworksNetTests:CarrierPrivilegeAuthenticatorTest
*/
@RunWith(DevSdkIgnoreRunner.class)
@IgnoreUpTo(SC_V2) // TODO: Use to Build.VERSION_CODES.SC_V2 when available
@IgnoreUpTo(Build.VERSION_CODES.S_V2)
public class CarrierPrivilegeAuthenticatorTest {
private static final int SUBSCRIPTION_COUNT = 2;
private static final int TEST_SUBSCRIPTION_ID = 1;
@@ -107,8 +107,7 @@ public class CarrierPrivilegeAuthenticatorTest {
doReturn(mPackageManager).when(mContext).getPackageManager();
final ApplicationInfo applicationInfo = new ApplicationInfo();
applicationInfo.uid = mCarrierConfigPkgUid;
doReturn(applicationInfo).when(mPackageManager)
.getApplicationInfo(eq(mTestPkg), anyInt());
doReturn(applicationInfo).when(mPackageManager).getApplicationInfo(eq(mTestPkg), anyInt());
mCarrierPrivilegeAuthenticator =
new TestCarrierPrivilegeAuthenticator(mContext, mTelephonyManager);
}
@@ -119,21 +118,23 @@ public class CarrierPrivilegeAuthenticatorTest {
return captor.getValue();
}
private List<TelephonyManagerShim.CarrierPrivilegesListenerShim>
getCarrierPrivilegesListeners() {
final ArgumentCaptor<TelephonyManagerShim.CarrierPrivilegesListenerShim> captor =
ArgumentCaptor.forClass(TelephonyManagerShim.CarrierPrivilegesListenerShim.class);
private Map<Integer, CarrierPrivilegesListenerShim> getCarrierPrivilegesListeners() {
final ArgumentCaptor<Integer> slotCaptor = ArgumentCaptor.forClass(Integer.class);
final ArgumentCaptor<CarrierPrivilegesListenerShim> listenerCaptor =
ArgumentCaptor.forClass(CarrierPrivilegesListenerShim.class);
try {
verify(mTelephonyManagerShim, atLeastOnce())
.addCarrierPrivilegesListener(anyInt(), any(), captor.capture());
verify(mTelephonyManagerShim, atLeastOnce()).addCarrierPrivilegesListener(
slotCaptor.capture(), any(), listenerCaptor.capture());
} catch (UnsupportedApiLevelException e) {
}
return captor.getAllValues();
final Map<Integer, CarrierPrivilegesListenerShim> result =
CollectionUtils.assoc(slotCaptor.getAllValues(), listenerCaptor.getAllValues());
clearInvocations(mTelephonyManagerShim);
return result;
}
private Intent buildTestMultiSimConfigBroadcastIntent() {
final Intent intent = new Intent(ACTION_MULTI_SIM_CONFIG_CHANGED);
return intent;
return new Intent(ACTION_MULTI_SIM_CONFIG_CHANGED);
}
@Test
public void testConstructor() throws Exception {
@@ -146,99 +147,96 @@ public class CarrierPrivilegeAuthenticatorTest {
assertEquals(1, filter.countActions());
assertTrue(filter.hasAction(ACTION_MULTI_SIM_CONFIG_CHANGED));
verify(mTelephonyManagerShim, times(2))
.addCarrierPrivilegesListener(anyInt(), any(), any());
verify(mTelephonyManagerShim)
.addCarrierPrivilegesListener(eq(0), any(), any());
verify(mTelephonyManagerShim)
.addCarrierPrivilegesListener(eq(1), any(), any());
assertEquals(2, getCarrierPrivilegesListeners().size());
// Two listeners originally registered, one for slot 0 and one for slot 1
final Map<Integer, CarrierPrivilegesListenerShim> initialListeners =
getCarrierPrivilegesListeners();
assertNotNull(initialListeners.get(0));
assertNotNull(initialListeners.get(1));
assertEquals(2, initialListeners.size());
final TelephonyNetworkSpecifier telephonyNetworkSpecifier =
new TelephonyNetworkSpecifier(0);
final NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
networkRequestBuilder.addTransportType(TRANSPORT_CELLULAR);
networkRequestBuilder.setNetworkSpecifier(telephonyNetworkSpecifier);
final NetworkCapabilities.Builder ncBuilder = new NetworkCapabilities.Builder()
.addTransportType(TRANSPORT_CELLULAR)
.setNetworkSpecifier(new TelephonyNetworkSpecifier(0));
assertTrue(mCarrierPrivilegeAuthenticator.hasCarrierPrivilegeForNetworkCapabilities(
mCarrierConfigPkgUid, networkRequestBuilder.build().networkCapabilities));
mCarrierConfigPkgUid, ncBuilder.build()));
assertFalse(mCarrierPrivilegeAuthenticator.hasCarrierPrivilegeForNetworkCapabilities(
mCarrierConfigPkgUid + 1, networkRequestBuilder.build().networkCapabilities));
mCarrierConfigPkgUid + 1, ncBuilder.build()));
}
@Test
public void testMultiSimConfigChanged() throws Exception {
doReturn(1).when(mTelephonyManager).getActiveModemCount();
final List<TelephonyManagerShim.CarrierPrivilegesListenerShim> carrierPrivilegesListeners =
// Two listeners originally registered, one for slot 0 and one for slot 1
final Map<Integer, CarrierPrivilegesListenerShim> initialListeners =
getCarrierPrivilegesListeners();
assertNotNull(initialListeners.get(0));
assertNotNull(initialListeners.get(1));
assertEquals(2, initialListeners.size());
doReturn(1).when(mTelephonyManager).getActiveModemCount();
mCarrierPrivilegeAuthenticator.onReceive(
mContext, buildTestMultiSimConfigBroadcastIntent());
for (TelephonyManagerShim.CarrierPrivilegesListenerShim carrierPrivilegesListener
: carrierPrivilegesListeners) {
verify(mTelephonyManagerShim)
.removeCarrierPrivilegesListener(eq(carrierPrivilegesListener));
// Check all listeners have been removed
for (CarrierPrivilegesListenerShim listener : initialListeners.values()) {
verify(mTelephonyManagerShim).removeCarrierPrivilegesListener(eq(listener));
}
// Expect a new CarrierPrivilegesListener to have been registered for slot 0, and none other
// (2 previously registered during startup, for slots 0 & 1)
verify(mTelephonyManagerShim, times(3))
.addCarrierPrivilegesListener(anyInt(), any(), any());
verify(mTelephonyManagerShim, times(2))
.addCarrierPrivilegesListener(eq(0), any(), any());
final Map<Integer, CarrierPrivilegesListenerShim> newListeners =
getCarrierPrivilegesListeners();
assertNotNull(newListeners.get(0));
assertEquals(1, newListeners.size());
final TelephonyNetworkSpecifier telephonyNetworkSpecifier =
new TelephonyNetworkSpecifier(0);
final NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
networkRequestBuilder.addTransportType(TRANSPORT_CELLULAR);
networkRequestBuilder.setNetworkSpecifier(telephonyNetworkSpecifier);
final TelephonyNetworkSpecifier specifier = new TelephonyNetworkSpecifier(0);
final NetworkCapabilities nc = new NetworkCapabilities.Builder()
.addTransportType(TRANSPORT_CELLULAR)
.setNetworkSpecifier(specifier)
.build();
assertTrue(mCarrierPrivilegeAuthenticator.hasCarrierPrivilegeForNetworkCapabilities(
mCarrierConfigPkgUid, networkRequestBuilder.build().networkCapabilities));
mCarrierConfigPkgUid, nc));
assertFalse(mCarrierPrivilegeAuthenticator.hasCarrierPrivilegeForNetworkCapabilities(
mCarrierConfigPkgUid + 1, networkRequestBuilder.build().networkCapabilities));
mCarrierConfigPkgUid + 1, nc));
}
@Test
public void testOnCarrierPrivilegesChanged() throws Exception {
final TelephonyManagerShim.CarrierPrivilegesListenerShim listener =
getCarrierPrivilegesListeners().get(0);
final CarrierPrivilegesListenerShim listener = getCarrierPrivilegesListeners().get(0);
final TelephonyNetworkSpecifier telephonyNetworkSpecifier =
new TelephonyNetworkSpecifier(0);
final NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
networkRequestBuilder.addTransportType(TRANSPORT_CELLULAR);
networkRequestBuilder.setNetworkSpecifier(telephonyNetworkSpecifier);
final TelephonyNetworkSpecifier specifier = new TelephonyNetworkSpecifier(0);
final NetworkCapabilities nc = new NetworkCapabilities.Builder()
.addTransportType(TRANSPORT_CELLULAR)
.setNetworkSpecifier(specifier)
.build();
final ApplicationInfo applicationInfo = new ApplicationInfo();
applicationInfo.uid = mCarrierConfigPkgUid + 1;
doReturn(applicationInfo).when(mPackageManager)
.getApplicationInfo(eq(mTestPkg), anyInt());
doReturn(applicationInfo).when(mPackageManager).getApplicationInfo(eq(mTestPkg), anyInt());
listener.onCarrierPrivilegesChanged(Collections.emptyList(), new int[] {});
assertFalse(mCarrierPrivilegeAuthenticator.hasCarrierPrivilegeForNetworkCapabilities(
mCarrierConfigPkgUid, networkRequestBuilder.build().networkCapabilities));
mCarrierConfigPkgUid, nc));
assertTrue(mCarrierPrivilegeAuthenticator.hasCarrierPrivilegeForNetworkCapabilities(
mCarrierConfigPkgUid + 1, networkRequestBuilder.build().networkCapabilities));
mCarrierConfigPkgUid + 1, nc));
}
@Test
public void testDefaultSubscription() throws Exception {
final NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
networkRequestBuilder.addTransportType(TRANSPORT_CELLULAR);
final NetworkCapabilities.Builder ncBuilder = new NetworkCapabilities.Builder();
ncBuilder.addTransportType(TRANSPORT_CELLULAR);
assertFalse(mCarrierPrivilegeAuthenticator.hasCarrierPrivilegeForNetworkCapabilities(
mCarrierConfigPkgUid, networkRequestBuilder.build().networkCapabilities));
mCarrierConfigPkgUid, ncBuilder.build()));
networkRequestBuilder.setNetworkSpecifier(new TelephonyNetworkSpecifier(0));
ncBuilder.setNetworkSpecifier(new TelephonyNetworkSpecifier(0));
assertTrue(mCarrierPrivilegeAuthenticator.hasCarrierPrivilegeForNetworkCapabilities(
mCarrierConfigPkgUid, networkRequestBuilder.build().networkCapabilities));
mCarrierConfigPkgUid, ncBuilder.build()));
// The builder for NetworkRequest doesn't allow removing the transport as long as a
// The builder for NetworkCapabilities doesn't allow removing the transport as long as a
// specifier is set, so unset it first. TODO : fix the builder
networkRequestBuilder.setNetworkSpecifier((NetworkSpecifier) null);
networkRequestBuilder.removeTransportType(TRANSPORT_CELLULAR);
networkRequestBuilder.addTransportType(TRANSPORT_WIFI);
networkRequestBuilder.setNetworkSpecifier(new TelephonyNetworkSpecifier(0));
ncBuilder.setNetworkSpecifier(null);
ncBuilder.removeTransportType(TRANSPORT_CELLULAR);
ncBuilder.addTransportType(TRANSPORT_WIFI);
ncBuilder.setNetworkSpecifier(new TelephonyNetworkSpecifier(0));
assertFalse(mCarrierPrivilegeAuthenticator.hasCarrierPrivilegeForNetworkCapabilities(
mCarrierConfigPkgUid, networkRequestBuilder.build().networkCapabilities));
mCarrierConfigPkgUid, ncBuilder.build()));
}
}