Add unit test cases to cover utility methods
UT covers the methods below:
- TelephonyPermission.isSystemOrPhone
- TelephonyPermission.isRootOrShell
The CL also introduces aconfig flag to guard the fix.
Bug: 328511085
Test: atest TelephonyPermissionsTest
Flag: com.android.internal.telephony.flags.support_phone_uid_check_for_multiuser
Change-Id: I52d638815901c8325ac49dcce13a000d47543f37
diff --git a/flags/misc.aconfig b/flags/misc.aconfig
index 9d5cbd6..4fe925c 100644
--- a/flags/misc.aconfig
+++ b/flags/misc.aconfig
@@ -217,3 +217,14 @@
purpose: PURPOSE_BUGFIX
}
}
+
+# OWNER=rambowang TARGET=24Q4
+flag {
+ name: "support_phone_uid_check_for_multiuser"
+ namespace: "telephony"
+ description: "Check phone/system processes from UID with multiuser-aware way"
+ bug:"328511085"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/TelephonyPermissionsTest.java b/tests/telephonytests/src/com/android/internal/telephony/TelephonyPermissionsTest.java
index d4717dd..3b4f869 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/TelephonyPermissionsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/TelephonyPermissionsTest.java
@@ -37,9 +37,11 @@
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.Process;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.permission.LegacyPermissionManager;
+import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
@@ -50,11 +52,13 @@
import androidx.test.filters.SmallTest;
import com.android.internal.telephony.flags.FeatureFlags;
+import com.android.internal.telephony.flags.Flags;
import com.android.internal.util.test.FakeSettingsProvider;
import com.android.server.pm.permission.LegacyPermissionManagerService;
import org.junit.After;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import java.lang.reflect.Field;
@@ -71,6 +75,9 @@
private static final String FEATURE = "com.example.feature";
private static final String MSG = "message";
+ @Rule
+ public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+
// Mocked classes
private Context mMockContext;
private AppOpsManager mMockAppOps;
@@ -90,6 +97,7 @@
@Before
public void setUp() throws Exception {
+ mSetFlagsRule.enableFlags(Flags.FLAG_SUPPORT_PHONE_UID_CHECK_FOR_MULTIUSER);
mMockContext = mock(Context.class);
mMockAppOps = mock(AppOpsManager.class);
mMockSubscriptionManager = mock(SubscriptionManager.class);
@@ -558,6 +566,38 @@
UserHandle.SYSTEM));
}
+ @Test
+ public void testIsSystemOrPhone_systemUser() {
+ assertTrue(TelephonyPermissions.isSystemOrPhone(Process.SYSTEM_UID));
+ assertTrue(TelephonyPermissions.isSystemOrPhone(Process.PHONE_UID));
+
+ assertFalse(TelephonyPermissions.isSystemOrPhone(1002));
+ }
+
+ @Test
+ public void testIsSystemOrPhone_nonSystemUser() {
+ assertTrue(TelephonyPermissions.isSystemOrPhone(1001000));
+ assertTrue(TelephonyPermissions.isSystemOrPhone(1001001));
+
+ assertFalse(TelephonyPermissions.isSystemOrPhone(1001002));
+ }
+
+ @Test
+ public void testIsRootOrShell_systemUser() {
+ assertTrue(TelephonyPermissions.isRootOrShell(Process.ROOT_UID));
+ assertTrue(TelephonyPermissions.isRootOrShell(Process.SHELL_UID));
+
+ assertFalse(TelephonyPermissions.isRootOrShell(1002));
+ }
+
+ @Test
+ public void testIsRootOrShell_nonSystemUser() {
+ assertTrue(TelephonyPermissions.isRootOrShell(1000000));
+ assertTrue(TelephonyPermissions.isRootOrShell(1002000));
+
+ assertFalse(TelephonyPermissions.isRootOrShell(1001002));
+ }
+
// Put mMockTelephony into service cache so that TELEPHONY_SUPPLIER will get it.
private void setTelephonyMockAsService() throws Exception {
when(mMockTelephonyBinder.queryLocalInterface(anyString())).thenReturn(mMockTelephony);