Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30ca1e46 authored by rambowang's avatar rambowang
Browse files

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
parent 9b0d5955
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -217,3 +217,14 @@ flag {
        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
    }
}
+40 −0
Original line number Diff line number Diff line
@@ -37,9 +37,11 @@ import android.os.Binder;
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 android.test.mock.MockContentResolver;
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 @@ public class TelephonyPermissionsTest {
    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 @@ public class TelephonyPermissionsTest {

    @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 @@ public class TelephonyPermissionsTest {
                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);