Loading tests/ManagedProfileLifecycleStressTest/src/com/android/test/stress/ManagedProfileLifecycleStressTest.java +51 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import com.android.tradefed.device.CollectingOutputReceiver; import com.android.tradefed.log.LogUtil.CLog; import com.android.tradefed.testtype.DeviceJUnit4ClassRunner; import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test; Loading Loading @@ -62,13 +63,62 @@ public class ManagedProfileLifecycleStressTest extends BaseHostJUnit4Test { CLog.w("Iteration N" + iteration); final int userId = createManagedProfile(); startUser(userId); installPackageAsUser(DUMMY_DPC_APK, true /* grantPermissions */, userId, "-t"); installPackageAsUser( DUMMY_DPC_APK, /* grantPermissions= */true, userId, /* options= */"-t"); setProfileOwner(DUMMY_DPC_COMPONENT, userId); removeUser(userId); } CLog.w("Completed " + iteration + " iterations."); } /** * Create, start, and kill managed profiles in a loop with waitForBroadcastIdle after each user * operation. */ @Test public void testCreateStartDeleteStable() throws Exception { // Disable package verifier for ADB installs. getDevice().executeShellCommand("settings put global verifier_verify_adb_installs 0"); int iteration = 0; final long deadline = System.nanoTime() + TimeUnit.MINUTES.toNanos(TIME_LIMIT_MINUTES); while (System.nanoTime() < deadline) { iteration++; CLog.w("Iteration N" + iteration); final int userId = createManagedProfile(); waitForBroadcastIdle(); startUser(userId); waitForBroadcastIdle(); installPackageAsUser( DUMMY_DPC_APK, /* grantPermissions= */true, userId, /* options= */"-t"); setProfileOwner(DUMMY_DPC_COMPONENT, userId); removeUser(userId); waitForBroadcastIdle(); } CLog.w("Completed " + iteration + " iterations."); } private void waitForBroadcastIdle() throws Exception { final CollectingOutputReceiver receiver = new CollectingOutputReceiver(); // We allow 8min for the command to complete and 4min for the command to start to // output something. getDevice().executeShellCommand( "am wait-for-broadcast-idle", receiver, /* maxTimeoutForCommand= */8, /* maxTimeoutToOutputShellResponse= */4, TimeUnit.MINUTES, /* retryAttempts= */0); final String output = receiver.getOutput(); if (!output.contains("All broadcast queues are idle!")) { CLog.e("Output from 'am wait-for-broadcast-idle': %s", output); fail("'am wait-for-broadcase-idle' did not complete."); } } private int createManagedProfile() throws Exception { final String output = getDevice().executeShellCommand( "pm create-user --profileOf 0 --managed TestProfile"); Loading Loading
tests/ManagedProfileLifecycleStressTest/src/com/android/test/stress/ManagedProfileLifecycleStressTest.java +51 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import com.android.tradefed.device.CollectingOutputReceiver; import com.android.tradefed.log.LogUtil.CLog; import com.android.tradefed.testtype.DeviceJUnit4ClassRunner; import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test; Loading Loading @@ -62,13 +63,62 @@ public class ManagedProfileLifecycleStressTest extends BaseHostJUnit4Test { CLog.w("Iteration N" + iteration); final int userId = createManagedProfile(); startUser(userId); installPackageAsUser(DUMMY_DPC_APK, true /* grantPermissions */, userId, "-t"); installPackageAsUser( DUMMY_DPC_APK, /* grantPermissions= */true, userId, /* options= */"-t"); setProfileOwner(DUMMY_DPC_COMPONENT, userId); removeUser(userId); } CLog.w("Completed " + iteration + " iterations."); } /** * Create, start, and kill managed profiles in a loop with waitForBroadcastIdle after each user * operation. */ @Test public void testCreateStartDeleteStable() throws Exception { // Disable package verifier for ADB installs. getDevice().executeShellCommand("settings put global verifier_verify_adb_installs 0"); int iteration = 0; final long deadline = System.nanoTime() + TimeUnit.MINUTES.toNanos(TIME_LIMIT_MINUTES); while (System.nanoTime() < deadline) { iteration++; CLog.w("Iteration N" + iteration); final int userId = createManagedProfile(); waitForBroadcastIdle(); startUser(userId); waitForBroadcastIdle(); installPackageAsUser( DUMMY_DPC_APK, /* grantPermissions= */true, userId, /* options= */"-t"); setProfileOwner(DUMMY_DPC_COMPONENT, userId); removeUser(userId); waitForBroadcastIdle(); } CLog.w("Completed " + iteration + " iterations."); } private void waitForBroadcastIdle() throws Exception { final CollectingOutputReceiver receiver = new CollectingOutputReceiver(); // We allow 8min for the command to complete and 4min for the command to start to // output something. getDevice().executeShellCommand( "am wait-for-broadcast-idle", receiver, /* maxTimeoutForCommand= */8, /* maxTimeoutToOutputShellResponse= */4, TimeUnit.MINUTES, /* retryAttempts= */0); final String output = receiver.getOutput(); if (!output.contains("All broadcast queues are idle!")) { CLog.e("Output from 'am wait-for-broadcast-idle': %s", output); fail("'am wait-for-broadcase-idle' did not complete."); } } private int createManagedProfile() throws Exception { final String output = getDevice().executeShellCommand( "pm create-user --profileOf 0 --managed TestProfile"); Loading