Fix unit test NPEs when testing against Minimal Telephony
This is not a problem with Minimal Telephony RIL itself, but these tests
leaking context or other calls to the OS and depending on environment
outside of unit test.
Bug: 365800992
Test: atest FrameworksTelephonyTests TelecomUnitTests TelephonyProviderTests TeleServiceTests ImsCommonTests
Flag: TEST_ONLY
Change-Id: I34bec1e9142c8076ae5db5b60826d9a2ff787661
diff --git a/tests/src/com/android/TestContext.java b/tests/src/com/android/TestContext.java
index 6e14574..a684ef5 100644
--- a/tests/src/com/android/TestContext.java
+++ b/tests/src/com/android/TestContext.java
@@ -103,6 +103,11 @@
}
@Override
+ public String getOpPackageName() {
+ return getPackageName();
+ }
+
+ @Override
public String getAttributionTag() {
return "";
}
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index 5618770..6a10d75 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -61,7 +61,6 @@
import android.os.AsyncResult;
import android.os.Bundle;
import android.os.Handler;
-import android.os.Looper;
import android.platform.test.flag.junit.SetFlagsRule;
import android.telecom.Conference;
import android.telecom.Conferenceable;
@@ -283,7 +282,7 @@
@Before
public void setUp() throws Exception {
super.setUp();
- doReturn(Looper.getMainLooper()).when(mContext).getMainLooper();
+
mTestConnectionService = new TestTelephonyConnectionService(mContext);
mTestConnectionService.setFeatureFlags(mFeatureFlags);
mTestConnectionService.setPhoneFactoryProxy(mPhoneFactoryProxy);
diff --git a/tests/src/com/android/services/telephony/TestTelephonyConnection.java b/tests/src/com/android/services/telephony/TestTelephonyConnection.java
index d91435c..9f1a0ec 100644
--- a/tests/src/com/android/services/telephony/TestTelephonyConnection.java
+++ b/tests/src/com/android/services/telephony/TestTelephonyConnection.java
@@ -16,27 +16,31 @@
package com.android.services.telephony;
-import android.content.AttributionSource;
-import android.content.ContentResolver;
-import android.os.Process;
-import android.os.UserHandle;
-import android.telephony.TelephonyManager;
-
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.notNull;
import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import android.content.AttributionSource;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.content.res.Resources;
+import android.os.Build;
import android.os.Bundle;
import android.os.PersistableBundle;
+import android.os.Process;
+import android.os.UserHandle;
+import android.provider.Settings;
import android.telecom.PhoneAccountHandle;
import android.telecom.VideoProfile;
import android.telephony.CarrierConfigManager;
+import android.telephony.TelephonyManager;
+import android.test.mock.MockContentProvider;
+import android.test.mock.MockContentResolver;
import com.android.ims.ImsCall;
import com.android.internal.telephony.Call;
@@ -70,9 +74,6 @@
Context mMockContext;
@Mock
- ContentResolver mMockContentResolver;
-
- @Mock
Resources mMockResources;
@Mock
@@ -96,6 +97,7 @@
@Mock
CarrierConfigManager mCarrierConfigManager;
+ private MockContentResolver mMockContentResolver;
private boolean mIsImsConnection;
private boolean mIsImsExternalConnection;
private boolean mIsConferenceSupported = true;
@@ -136,6 +138,14 @@
mMockContext = mock(Context.class);
mMockTelephonyManager = mock(TelephonyManager.class);
mOriginalConnection = mMockRadioConnection;
+
+ ApplicationInfo applicationInfo = new ApplicationInfo();
+ applicationInfo.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
+ doReturn(applicationInfo).when(mMockContext).getApplicationInfo();
+ mMockContentResolver = new MockContentResolver(mMockContext);
+ mMockContentResolver.addProvider(Settings.AUTHORITY,
+ new EmptyContentProvider(mMockContext));
+
// Set up mMockRadioConnection and mMockPhone to contain an active call
when(mMockRadioConnection.getState()).thenReturn(Call.State.ACTIVE);
when(mOriginalConnection.getState()).thenReturn(Call.State.ACTIVE);
@@ -159,8 +169,7 @@
when(mMockContext.getSystemService(Context.TELEPHONY_SERVICE))
.thenReturn(mMockTelephonyManager);
when(mMockContext.getAttributionSource()).thenReturn(attributionSource);
- when(mMockContentResolver.getUserId()).thenReturn(UserHandle.USER_CURRENT);
- when(mMockContentResolver.getAttributionSource()).thenReturn(attributionSource);
+ when(mMockContext.getUserId()).thenReturn(UserHandle.USER_CURRENT);
when(mMockResources.getBoolean(anyInt())).thenReturn(false);
when(mMockPhone.getDefaultPhone()).thenReturn(mMockPhone);
when(mMockPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_IMS);
@@ -320,4 +329,15 @@
public void setMockImsPhoneConnection(ImsPhoneConnection connection) {
mImsPhoneConnection = connection;
}
+
+ static class EmptyContentProvider extends MockContentProvider {
+ EmptyContentProvider(Context context) {
+ super(context);
+ }
+
+ @Override
+ public Bundle call(String method, String request, Bundle args) {
+ return new Bundle();
+ }
+ }
}
diff --git a/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java b/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java
index 07c9fd0..649d3dd 100644
--- a/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java
+++ b/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java
@@ -45,6 +45,7 @@
import com.android.ims.FeatureConnector;
import com.android.ims.RcsFeatureManager;
import com.android.internal.telephony.imsphone.ImsRegistrationCallbackHelper;
+import com.android.phone.ImsStateCallbackController;
import org.junit.After;
import org.junit.Before;
@@ -84,6 +85,9 @@
@Before
public void setUp() throws Exception {
super.setUp();
+
+ replaceInstance(ImsStateCallbackController.class, "sInstance", null,
+ mock(ImsStateCallbackController.class));
}
@After
diff --git a/tests/src/com/android/services/telephony/rcs/SipTransportControllerTest.java b/tests/src/com/android/services/telephony/rcs/SipTransportControllerTest.java
index 42a45f4..df7a37e 100644
--- a/tests/src/com/android/services/telephony/rcs/SipTransportControllerTest.java
+++ b/tests/src/com/android/services/telephony/rcs/SipTransportControllerTest.java
@@ -147,12 +147,16 @@
@After
public void tearDown() throws Exception {
- super.tearDown();
- boolean isShutdown = mExecutorService == null || mExecutorService.isShutdown();
- if (!isShutdown) {
+ var monitor = RcsProvisioningMonitor.getInstance();
+ if (monitor != null) {
+ monitor.overrideImsFeatureValidation(TEST_SUB_ID, null);
+ }
+
+ if (mExecutorService != null && !mExecutorService.isShutdown()) {
mExecutorService.shutdownNow();
}
- RcsProvisioningMonitor.getInstance().overrideImsFeatureValidation(TEST_SUB_ID, null);
+
+ super.tearDown();
}
@SmallTest
diff --git a/tests/src/com/android/services/telephony/rcs/TelephonyRcsServiceTest.java b/tests/src/com/android/services/telephony/rcs/TelephonyRcsServiceTest.java
index 4cabf95..34ed5c6 100644
--- a/tests/src/com/android/services/telephony/rcs/TelephonyRcsServiceTest.java
+++ b/tests/src/com/android/services/telephony/rcs/TelephonyRcsServiceTest.java
@@ -20,6 +20,7 @@
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
@@ -40,6 +41,7 @@
import com.android.ims.RcsFeatureManager;
import com.android.internal.telephony.ISub;
import com.android.internal.telephony.flags.FeatureFlags;
+import com.android.phone.ImsStateCallbackController;
import org.junit.After;
import org.junit.Before;
@@ -103,6 +105,9 @@
eq(1), anyInt());
doReturn(true).when(mResourceProxy).getDeviceUceEnabled(any());
+ replaceInstance(ImsStateCallbackController.class, "sInstance", null,
+ mock(ImsStateCallbackController.class));
+
replaceInstance(TelephonyManager.class, "sInstance", null, mTelephonyManager);
doReturn(2).when(mTelephonyManager).getActiveModemCount();
}