NumberBlockingTest: wait until user started
When starting a user, wait until the user has actually started before
continuing. This is necessary because "am start-user" is async, so it
may not have finished starting the user before the test continues.
Test: run cts-dev -m CtsHostsideNumberBlockingTestCases -t com.android.cts.numberblocking.hostside.NumberBlockingTest#testNumberBlocking
Bug: 129245654
Signed-off-by: duanyangqi <duanyangqi@xiaomi.com>
diff --git a/hostsidetests/numberblocking/src/com/android/cts/numberblocking/hostside/NumberBlockingTest.java b/hostsidetests/numberblocking/src/com/android/cts/numberblocking/hostside/NumberBlockingTest.java
index 1718ab7..6d5c336 100644
--- a/hostsidetests/numberblocking/src/com/android/cts/numberblocking/hostside/NumberBlockingTest.java
+++ b/hostsidetests/numberblocking/src/com/android/cts/numberblocking/hostside/NumberBlockingTest.java
@@ -119,7 +119,7 @@
runTestAsPrimaryUser(CALL_BLOCKING_TEST_CLASS_NAME, "testUnregisterPhoneAccount");
// Run tests as secondary user.
- assertTrue(getDevice().startUser(mSecondaryUserId));
+ startUserAndWait(mSecondaryUserId);
// Ensure that a privileged app cannot block numbers when the current user is a
// secondary user.
@@ -142,6 +142,29 @@
}
}
+ /** Starts user {@code userId} and waits until it is in state RUNNING_UNLOCKED. */
+ protected void startUserAndWait(int userId) throws Exception {
+ getDevice().startUser(userId);
+
+ final String desiredState = "RUNNING_UNLOCKED";
+ final long USER_STATE_TIMEOUT_MS = 60_0000; // 1 minute
+ final long timeout = System.currentTimeMillis() + USER_STATE_TIMEOUT_MS;
+ final String command = String.format("am get-started-user-state %d", userId);
+ String output = "";
+ while (System.currentTimeMillis() <= timeout) {
+ output = getDevice().executeShellCommand(command);
+ if (output.contains(desiredState)) {
+ return;
+ }
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ // Do nothing.
+ }
+ }
+ fail("User state of " + userId + " was '" + output + "' rather than " + desiredState);
+ }
+
private void createSecondaryUser() throws Exception {
mSecondaryUserId = getDevice().createUser(SECONDARY_USER_NAME);
getDevice().waitForDeviceAvailable();