From 340e5bac4876ac1d1b5ff549b1e55e9584743060 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Tue, 14 May 2019 16:10:03 +0100 Subject: [PATCH] Fix LockSettingsService unit test flakiness Flush the unlockUser() call in the handler thread before changing the device credential again. Bug: 131132243 Test: atest --generate-new-metrics 100 WeaverBasedSyntheticPasswordTests#testTokenBasedClearPassword Change-Id: I1fdb5009caf744a7c1893c0e23d307bc9ee366c6 --- .../locksettings/BaseLockSettingsServiceTests.java | 4 ++++ .../server/locksettings/LockSettingsServiceTestable.java | 1 - .../server/locksettings/SyntheticPasswordTests.java | 9 +++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java b/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java index 09e20e04835bf..1f5ebe4536d8c 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java @@ -235,6 +235,10 @@ public abstract class BaseLockSettingsServiceTests extends AndroidTestCase { mPasswordSlotManager.cleanup(); } + protected void flushHandlerTasks() { + mService.mHandler.runWithScissors(() -> { }, 0 /*now*/); // Flush runnables on handler + } + protected void assertNotEquals(long expected, long actual) { assertTrue(expected != actual); } diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java index 10fb3ba938d46..db3f3c25c5b69 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java @@ -163,5 +163,4 @@ public class LockSettingsServiceTestable extends LockSettingsService { } return storedData; } - } diff --git a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java index 0273f7651207b..1cd590c39f497 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java @@ -232,7 +232,7 @@ public class SyntheticPasswordTests extends BaseLockSettingsServiceTests { reset(mAuthSecretService); mService.onUnlockUser(PRIMARY_USER_ID); - mService.mHandler.runWithScissors(() -> {}, 0 /*now*/); // Flush runnables on handler + flushHandlerTasks(); verify(mAuthSecretService, never()).primaryUserCredential(any(ArrayList.class)); } @@ -242,7 +242,7 @@ public class SyntheticPasswordTests extends BaseLockSettingsServiceTests { reset(mAuthSecretService); mService.onUnlockUser(PRIMARY_USER_ID); - mService.mHandler.runWithScissors(() -> {}, 0 /*now*/); // Flush runnables on handler + flushHandlerTasks(); verify(mAuthSecretService, never()).primaryUserCredential(any(ArrayList.class)); } @@ -254,7 +254,7 @@ public class SyntheticPasswordTests extends BaseLockSettingsServiceTests { reset(mAuthSecretService); mService.onUnlockUser(PRIMARY_USER_ID); - mService.mHandler.runWithScissors(() -> {}, 0 /*now*/); // Flush runnables on handler + flushHandlerTasks(); verify(mAuthSecretService).primaryUserCredential(any(ArrayList.class)); } @@ -357,7 +357,7 @@ public class SyntheticPasswordTests extends BaseLockSettingsServiceTests { handle, token, PASSWORD_QUALITY_SOMETHING, PRIMARY_USER_ID); // Verify DPM gets notified about new device lock - mService.mHandler.runWithScissors(() -> {}, 0 /*now*/); // Flush runnables on handler + flushHandlerTasks(); final PasswordMetrics metric = PasswordMetrics.computeForCredential( LockPatternUtils.CREDENTIAL_TYPE_PATTERN, pattern); verify(mDevicePolicyManager).setActivePasswordState(metric, PRIMARY_USER_ID); @@ -384,6 +384,7 @@ public class SyntheticPasswordTests extends BaseLockSettingsServiceTests { mLocalService.setLockCredentialWithToken(null, LockPatternUtils.CREDENTIAL_TYPE_NONE, handle, token, PASSWORD_QUALITY_UNSPECIFIED, PRIMARY_USER_ID); + flushHandlerTasks(); // flush the unlockUser() call before changing password again mLocalService.setLockCredentialWithToken(pattern, LockPatternUtils.CREDENTIAL_TYPE_PATTERN, handle, token, PASSWORD_QUALITY_SOMETHING, PRIMARY_USER_ID);