Fix testApplicationRestrictionsManagingApp unit test

The API now requires the app restriction manager app to exist
on the current user when it is called.

Change-Id: I809816d4f5d73378c23b18d7b74ebb282b7dc444
This commit is contained in:
Rubin Xu
2016-02-11 17:23:06 +00:00
parent ed5c8f0216
commit ed1928a981
2 changed files with 24 additions and 1 deletions

View File

@@ -8031,7 +8031,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
boolean isPackageInstalledForUser(String packageName, int userHandle) {
try {
PackageInfo pi = mIPackageManager.getPackageInfo(packageName, 0, userHandle);
PackageInfo pi = mInjector.getIPackageManager().getPackageInfo(packageName, 0,
userHandle);
return (pi != null) && (pi.applicationInfo.flags != 0);
} catch (RemoteException re) {
throw new RuntimeException("Package manager has died", re);

View File

@@ -22,9 +22,12 @@ import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManagerInternal;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.wifi.WifiInfo;
import android.os.Build.VERSION_CODES;
import android.os.Build;
import android.os.Bundle;
import android.os.Process;
import android.os.UserHandle;
@@ -995,6 +998,7 @@ public class DevicePolicyManagerTest extends DpmTestBase {
public void testApplicationRestrictionsManagingApp() throws Exception {
setAsProfileOwner(admin1);
final String nonExistAppRestrictionsManagerPackage = "com.google.app.restrictions.manager2";
final String appRestrictionsManagerPackage = "com.google.app.restrictions.manager";
final int appRestrictionsManagerAppId = 20987;
final int appRestrictionsManagerUid = UserHandle.getUid(
@@ -1004,6 +1008,14 @@ public class DevicePolicyManagerTest extends DpmTestBase {
eq(DpmMockContext.CALLER_USER_HANDLE));
mContext.binder.callingUid = appRestrictionsManagerUid;
final PackageInfo pi = new PackageInfo();
pi.applicationInfo = new ApplicationInfo();
pi.applicationInfo.flags = ApplicationInfo.FLAG_HAS_CODE;
doReturn(pi).when(mContext.ipackageManager).getPackageInfo(
eq(appRestrictionsManagerPackage),
anyInt(),
eq(DpmMockContext.CALLER_USER_HANDLE));
// appRestrictionsManager package shouldn't be able to manage restrictions as the PO hasn't
// delegated that permission yet.
assertFalse(dpm.isCallerApplicationRestrictionsManagingPackage());
@@ -1028,6 +1040,16 @@ public class DevicePolicyManagerTest extends DpmTestBase {
mContext.binder.callingUid = DpmMockContext.CALLER_UID;
assertEquals(0, dpm.getApplicationRestrictions(admin1, "pkg1").size());
// Check the API does not allow setting a non-existent package
try {
dpm.setApplicationRestrictionsManagingPackage(admin1,
nonExistAppRestrictionsManagerPackage);
fail("Non-existent app set as app restriction manager.");
} catch (IllegalArgumentException expected) {
MoreAsserts.assertContainsRegex(
"is not installed on the current user", expected.getMessage());
}
// Let appRestrictionsManagerPackage manage app restrictions
dpm.setApplicationRestrictionsManagingPackage(admin1, appRestrictionsManagerPackage);
assertEquals(appRestrictionsManagerPackage,