summaryrefslogtreecommitdiff
path: root/apct-tests
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2019-09-25 18:45:13 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-09-25 18:45:13 +0000
commitbe0f335f5a38d247f573242c7de6734a7ac56b22 (patch)
tree1185b97a5a47774ae5359523e94e5dfc6e750f7a /apct-tests
parent4591d1d42594be765485f62798285f1f4f9ca128 (diff)
parent04d7ae5c6f87dad68980304c7cdb220a8ce54cf2 (diff)
Merge "Whitelist packages for user types"
Diffstat (limited to 'apct-tests')
-rw-r--r--apct-tests/perftests/multiuser/AndroidManifest.xml1
-rw-r--r--apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java77
2 files changed, 78 insertions, 0 deletions
diff --git a/apct-tests/perftests/multiuser/AndroidManifest.xml b/apct-tests/perftests/multiuser/AndroidManifest.xml
index b2a9524d29c4..893c8ca9328b 100644
--- a/apct-tests/perftests/multiuser/AndroidManifest.xml
+++ b/apct-tests/perftests/multiuser/AndroidManifest.xml
@@ -22,6 +22,7 @@
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
+ <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<application>
<uses-library android:name="android.test.runner" />
diff --git a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
index 32107b4e789e..e74e4a958eb9 100644
--- a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
+++ b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
@@ -38,8 +38,10 @@ import android.os.Bundle;
import android.os.IBinder;
import android.os.IProgressListener;
import android.os.RemoteException;
+import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
+import android.perftests.utils.ShellHelper;
import android.util.Log;
import android.view.WindowManagerGlobal;
@@ -85,6 +87,14 @@ public class UserLifecycleTests {
private static final String DUMMY_PACKAGE_NAME = "perftests.multiuser.apps.dummyapp";
+ // Copy of UserSystemPackageInstaller whitelist mode constants.
+ private static final String PACKAGE_WHITELIST_MODE_PROP =
+ "persist.debug.user.package_whitelist_mode";
+ private static final int USER_TYPE_PACKAGE_WHITELIST_MODE_DISABLE = 0;
+ private static final int USER_TYPE_PACKAGE_WHITELIST_MODE_ENFORCE = 0b001;
+ private static final int USER_TYPE_PACKAGE_WHITELIST_MODE_IMPLICIT_WHITELIST = 0b100;
+ private static final int USER_TYPE_PACKAGE_WHITELIST_MODE_DEVICE_DEFAULT = -1;
+
private UserManager mUm;
private ActivityManager mAm;
private IActivityManager mIam;
@@ -442,6 +452,55 @@ public class UserLifecycleTests {
}
}
+ // TODO: This is just a POC. Do this properly and add more.
+ /** Tests starting (unlocking) a newly-created profile using the user-type-pkg-whitelist. */
+ @Test
+ public void managedProfileUnlock_usingWhitelist() throws Exception {
+ assumeTrue(mHasManagedUserFeature);
+ final int origMode = getUserTypePackageWhitelistMode();
+ setUserTypePackageWhitelistMode(USER_TYPE_PACKAGE_WHITELIST_MODE_ENFORCE
+ | USER_TYPE_PACKAGE_WHITELIST_MODE_IMPLICIT_WHITELIST);
+
+ try {
+ while (mRunner.keepRunning()) {
+ mRunner.pauseTiming();
+ final int userId = createManagedProfile();
+ mRunner.resumeTiming();
+
+ startUserInBackground(userId);
+
+ mRunner.pauseTiming();
+ removeUser(userId);
+ mRunner.resumeTiming();
+ }
+ } finally {
+ setUserTypePackageWhitelistMode(origMode);
+ }
+ }
+ /** Tests starting (unlocking) a newly-created profile NOT using the user-type-pkg-whitelist. */
+ @Test
+ public void managedProfileUnlock_notUsingWhitelist() throws Exception {
+ assumeTrue(mHasManagedUserFeature);
+ final int origMode = getUserTypePackageWhitelistMode();
+ setUserTypePackageWhitelistMode(USER_TYPE_PACKAGE_WHITELIST_MODE_DISABLE);
+
+ try {
+ while (mRunner.keepRunning()) {
+ mRunner.pauseTiming();
+ final int userId = createManagedProfile();
+ mRunner.resumeTiming();
+
+ startUserInBackground(userId);
+
+ mRunner.pauseTiming();
+ removeUser(userId);
+ mRunner.resumeTiming();
+ }
+ } finally {
+ setUserTypePackageWhitelistMode(origMode);
+ }
+ }
+
/** Creates a new user, returning its userId. */
private int createUserNoFlags() {
return createUserWithFlags(/* flags= */ 0);
@@ -458,6 +517,10 @@ public class UserLifecycleTests {
private int createManagedProfile() {
final UserInfo userInfo = mUm.createProfileForUser("TestProfile",
UserInfo.FLAG_MANAGED_PROFILE, mAm.getCurrentUser());
+ if (userInfo == null) {
+ throw new IllegalStateException("Creating managed profile failed. Most likely there is "
+ + "already a pre-existing profile on the device.");
+ }
mUsersToRemove.add(userInfo.id);
return userInfo.id;
}
@@ -627,6 +690,20 @@ public class UserLifecycleTests {
}
}
+ /** Gets the PACKAGE_WHITELIST_MODE_PROP System Property. */
+ private int getUserTypePackageWhitelistMode() {
+ return SystemProperties.getInt(PACKAGE_WHITELIST_MODE_PROP,
+ USER_TYPE_PACKAGE_WHITELIST_MODE_DEVICE_DEFAULT);
+ }
+
+ /** Sets the PACKAGE_WHITELIST_MODE_PROP System Property to the given value. */
+ private void setUserTypePackageWhitelistMode(int mode) {
+ String result = ShellHelper.runShellCommand(
+ String.format("setprop %s %d", PACKAGE_WHITELIST_MODE_PROP, mode));
+ attestFalse("Failed to set sysprop " + PACKAGE_WHITELIST_MODE_PROP + ": " + result,
+ result != null && result.contains("Failed"));
+ }
+
private void removeUser(int userId) {
try {
mUm.removeUser(userId);