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

Commit 7a537e04 authored by Pratyush More's avatar Pratyush More
Browse files

Fix broken LocaleManagerServiceTest cases.

Bug: 204991447
Test: atest FrameworksServicesTests:LocaleManagerServiceTest
Change-Id: Ibb4d48f26b48206ddaff167e81227f953136f944
parent 4dcc91e0
Loading
Loading
Loading
Loading
+28 −17
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ import static org.mockito.Mockito.verify;
import android.Manifest;
import android.app.ActivityManagerInternal;
import android.content.Context;
import android.content.pm.InstallSourceInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.os.Binder;
import android.os.LocaleList;
@@ -60,13 +62,16 @@ public class LocaleManagerServiceTest {
    private static final String DEFAULT_LOCALE_TAGS = "en-XC, ar-XB";
    private static final LocaleList DEFAULT_LOCALES =
            LocaleList.forLanguageTags(DEFAULT_LOCALE_TAGS);
    private static final InstallSourceInfo DEFAULT_INSTALL_SOURCE_INFO = new InstallSourceInfo(
            /* initiatingPackageName = */ null, /* initiatingPackageSigningInfo = */ null,
            /* originatingPackageName = */ null, /* installingPackageName = */ null);

    private LocaleManagerService mLocaleManagerService;

    @Mock
    private Context mMockContext;
    @Mock
    private PackageManagerInternal mMockPackageManager;
    private PackageManagerInternal mMockPackageManagerInternal;
    @Mock
    private FakePackageConfigurationUpdater mFakePackageConfigurationUpdater;
    @Mock
@@ -75,11 +80,17 @@ public class LocaleManagerServiceTest {
    private ActivityManagerInternal mMockActivityManager;

    @Before
    public void setUp() {
    public void setUp() throws Exception {
        mMockContext = mock(Context.class);
        mMockActivityTaskManager = mock(ActivityTaskManagerInternal.class);
        mMockActivityManager = mock(ActivityManagerInternal.class);
        mMockPackageManager = mock(PackageManagerInternal.class);
        mMockPackageManagerInternal = mock(PackageManagerInternal.class);

        // For unit tests, set the default (null) installer info
        PackageManager mockPackageManager = mock(PackageManager.class);
        doReturn(DEFAULT_INSTALL_SOURCE_INFO).when(mockPackageManager)
                .getInstallSourceInfo(anyString());
        doReturn(mockPackageManager).when(mMockContext).getPackageManager();

        mFakePackageConfigurationUpdater = new FakePackageConfigurationUpdater();
        doReturn(mFakePackageConfigurationUpdater)
@@ -93,13 +104,13 @@ public class LocaleManagerServiceTest {
                        anyString(), anyString());

        mLocaleManagerService = new LocaleManagerService(mMockContext, mMockActivityTaskManager,
                mMockActivityManager, mMockPackageManager);
                mMockActivityManager, mMockPackageManagerInternal);
    }

    @Test(expected = SecurityException.class)
    public void testSetApplicationLocales_arbitraryAppWithoutPermissions_fails() throws Exception {
        doReturn(DEFAULT_UID)
                .when(mMockPackageManager).getPackageUid(anyString(), anyInt(), anyInt());
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyInt(), anyInt());
        setUpFailingPermissionCheckFor(Manifest.permission.CHANGE_CONFIGURATION);

        try {
@@ -107,7 +118,7 @@ public class LocaleManagerServiceTest {
                    LocaleList.getEmptyLocaleList());
            fail("Expected SecurityException");
        } finally {
            verify(mMockContext).enforceCallingPermission(
            verify(mMockContext).enforceCallingOrSelfPermission(
                    eq(android.Manifest.permission.CHANGE_CONFIGURATION),
                    anyString());
            assertNoLocalesStored(mFakePackageConfigurationUpdater.getStoredLocales());
@@ -142,7 +153,7 @@ public class LocaleManagerServiceTest {
    @Test
    public void testSetApplicationLocales_arbitraryAppWithPermission_succeeds() throws Exception {
        doReturn(DEFAULT_UID)
                .when(mMockPackageManager).getPackageUid(anyString(), anyInt(), anyInt());
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyInt(), anyInt());
        // if package is not owned by the caller, the calling app should have the following
        //   permission. We will mock this to succeed to imitate that.
        setUpPassingPermissionCheckFor(Manifest.permission.CHANGE_CONFIGURATION);
@@ -157,7 +168,7 @@ public class LocaleManagerServiceTest {
    @Test
    public void testSetApplicationLocales_callerOwnsPackage_succeeds() throws Exception {
        doReturn(Binder.getCallingUid())
                .when(mMockPackageManager).getPackageUid(anyString(), anyInt(), anyInt());
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyInt(), anyInt());

        mLocaleManagerService.setApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID,
                DEFAULT_LOCALES);
@@ -168,7 +179,7 @@ public class LocaleManagerServiceTest {
    @Test(expected = IllegalArgumentException.class)
    public void testSetApplicationLocales_invalidPackageOrUserId_fails() throws Exception {
        doReturn(INVALID_UID)
                .when(mMockPackageManager).getPackageUid(anyString(), anyInt(), anyInt());
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyInt(), anyInt());
        try {
            mLocaleManagerService.setApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID,
                    LocaleList.getEmptyLocaleList());
@@ -180,7 +191,7 @@ public class LocaleManagerServiceTest {

    @Test(expected = SecurityException.class)
    public void testGetApplicationLocales_arbitraryAppWithoutPermission_fails() throws Exception {
        doReturn(DEFAULT_UID).when(mMockPackageManager)
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
                .getPackageUid(anyString(), anyInt(), anyInt());
        setUpFailingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);

@@ -188,7 +199,7 @@ public class LocaleManagerServiceTest {
            mLocaleManagerService.getApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID);
            fail("Expected SecurityException");
        } finally {
            verify(mMockContext).enforceCallingPermission(
            verify(mMockContext).enforceCallingOrSelfPermission(
                    eq(android.Manifest.permission.READ_APP_SPECIFIC_LOCALES),
                    anyString());
        }
@@ -198,7 +209,7 @@ public class LocaleManagerServiceTest {
    public void testGetApplicationLocales_appSpecificConfigAbsent_returnsEmptyList()
            throws Exception {
        // any valid app calling for its own package or having appropriate permission
        doReturn(DEFAULT_UID).when(mMockPackageManager)
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
                .getPackageUid(anyString(), anyInt(), anyInt());
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        doReturn(null)
@@ -213,7 +224,7 @@ public class LocaleManagerServiceTest {
    @Test
    public void testGetApplicationLocales_appSpecificLocalesAbsent_returnsEmptyList()
            throws Exception {
        doReturn(DEFAULT_UID).when(mMockPackageManager)
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
                .getPackageUid(anyString(), anyInt(), anyInt());
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        doReturn(new PackageConfig(/* nightMode = */ 0, /* locales = */ null))
@@ -228,7 +239,7 @@ public class LocaleManagerServiceTest {
    @Test
    public void testGetApplicationLocales_callerOwnsAppAndConfigPresent_returnsLocales()
            throws Exception {
        doReturn(Binder.getCallingUid()).when(mMockPackageManager)
        doReturn(Binder.getCallingUid()).when(mMockPackageManagerInternal)
                .getPackageUid(anyString(), anyInt(), anyInt());
        doReturn(new PackageConfig(/* nightMode = */ 0, DEFAULT_LOCALES))
                .when(mMockActivityTaskManager).getApplicationConfig(anyString(), anyInt());
@@ -242,7 +253,7 @@ public class LocaleManagerServiceTest {
    @Test
    public void testGetApplicationLocales_arbitraryCallerWithPermissions_returnsLocales()
            throws Exception {
        doReturn(DEFAULT_UID).when(mMockPackageManager)
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
                .getPackageUid(anyString(), anyInt(), anyInt());
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        doReturn(new PackageConfig(/* nightMode = */ 0, DEFAULT_LOCALES))
@@ -260,10 +271,10 @@ public class LocaleManagerServiceTest {

    private void setUpFailingPermissionCheckFor(String permission) {
        doThrow(new SecurityException("Mock"))
                .when(mMockContext).enforceCallingPermission(eq(permission), any());
                .when(mMockContext).enforceCallingOrSelfPermission(eq(permission), any());
    }

    private void setUpPassingPermissionCheckFor(String permission) {
        doNothing().when(mMockContext).enforceCallingPermission(eq(permission), any());
        doNothing().when(mMockContext).enforceCallingOrSelfPermission(eq(permission), any());
    }
}