Add assertion that driving state has changed to CarUserManagerHostTest#testSwitchUserUxRestrictionFailure

On seahawk this test was failing intermittently. Add an assertion that the car driving state has changed before switching users.

MUST_SLEEP

Test: atest CarUserManagerHostTest#testSwitchUserUxRestrictionFailure
Bug: 279246646
Change-Id: I99f8595d75dfc063a9b4b80455ce82a1f302f9cb
diff --git a/hostsidetests/car/src/android/car/cts/CarUserManagerHostTest.java b/hostsidetests/car/src/android/car/cts/CarUserManagerHostTest.java
index 2ebbb18..659640a 100644
--- a/hostsidetests/car/src/android/car/cts/CarUserManagerHostTest.java
+++ b/hostsidetests/car/src/android/car/cts/CarUserManagerHostTest.java
@@ -18,6 +18,7 @@
 
 import static com.google.common.truth.Truth.assertWithMessage;
 
+import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
 
 import org.junit.Test;
@@ -28,11 +29,14 @@
 
 @RunWith(DeviceJUnit4ClassRunner.class)
 public final class CarUserManagerHostTest extends CarHostJUnit4TestCase {
+    private static final String TAG = CarUserManagerHostTest.class.getSimpleName();
     private static final String STATUS_SUCCESSFUL = "STATUS_SUCCESSFUL";
     private static final String STATUS_INVALID_REQUEST = "STATUS_INVALID_REQUEST";
     private static final String STATUS_OK_USER_ALREADY_IN_FOREGROUND =
             "STATUS_OK_USER_ALREADY_IN_FOREGROUND";
     private static final String STATUS_UX_RESTRICTION_FAILURE = "STATUS_UX_RESTRICTION_FAILURE";
+    private static final long TEST_WAIT_MS = 500;
+    private static final long TEST_TIMEOUT_MS = 10_000;
 
     @Test
     public void testSwitchUserExists() throws Exception {
@@ -54,9 +58,10 @@
     @Test
     public void testSwitchUserUxRestrictionFailure() throws Exception {
         executeCommand("cmd car_service emulate-driving-state drive");
+        assertWithMessage("Waiting for driving state change").that(
+                waitForDrivingStateChanged("Current Driving State: 2", TEST_TIMEOUT_MS)).isTrue();
 
         int newUserid = createFullUser("CarUserManagerHostTest_User");
-
         switchUser(newUserid, STATUS_UX_RESTRICTION_FAILURE);
 
         executeCommand("cmd car_service emulate-driving-state park");
@@ -94,4 +99,25 @@
                 .max()
                 .orElse(0) + 1;
     }
+
+    private boolean waitForDrivingStateChanged(String expected, long timeout) {
+        long start = System.currentTimeMillis();
+        while (start + timeout > System.currentTimeMillis()) {
+            try {
+                String result = executeCommand(
+                        "dumpsys car_service --services CarDrivingStateService");
+                if (result.contains(expected)) {
+                    return true;
+                }
+                Thread.sleep(TEST_WAIT_MS);
+            } catch (InterruptedException e) {
+                CLog.e(TAG, "Test interrupted: " + e);
+                return false;
+            } catch (Exception e) {
+                CLog.e(TAG, "executeCommand failed: " + e);
+                return false;
+            }
+        }
+        return false;
+    }
 }