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