Merge "Fix broken LocaleManagerServiceTest cases."

This commit is contained in:
Pratyush More
2021-11-03 17:31:13 +00:00
committed by Android (Google) Code Review

View File

@@ -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());
}
}