From d53a2acf5e7c3b4ed0f94b5cd138c67db4767cb0 Mon Sep 17 00:00:00 2001 From: Joe Bolinger Date: Wed, 23 Mar 2022 15:10:31 -0700 Subject: [PATCH] Re-enable biometric prompt tests. These were temporarily disabled when the face-to-fingerprint flow was replaced with the coex flow. The test refactor caused presubmit failures because the detach method was not called after the test ended, which could cause unrelated downstream tests to fail. Bug: 222119218 Test: atest AuthContainerViewTest Change-Id: Ic86e86bc4bcefe98482fbc10d7c205c4c1c3cbf3 --- .../biometrics/AuthContainerViewTest.kt | 91 ++++++++++--------- 1 file changed, 49 insertions(+), 42 deletions(-) diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt index 6f0a8a6adfef9..483dbf51d4a94 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt @@ -41,7 +41,7 @@ import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.keyguard.WakefulnessLifecycle import com.google.common.truth.Truth.assertThat -import org.junit.Ignore +import org.junit.After import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -52,7 +52,6 @@ import org.mockito.Mockito.verify import org.mockito.junit.MockitoJUnit import org.mockito.Mockito.`when` as whenever -@Ignore @RunWith(AndroidTestingRunner::class) @RunWithLooper @SmallTest @@ -72,12 +71,19 @@ class AuthContainerViewTest : SysuiTestCase() { @Mock lateinit var windowToken: IBinder - private lateinit var authContainer: TestAuthContainerView + private var authContainer: TestAuthContainerView? = null + + @After + fun tearDown() { + if (authContainer?.isAttachedToWindow == true) { + ViewUtils.detachView(authContainer) + } + } @Test fun testActionAuthenticated_sendsDismissedAuthenticated() { - initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) - authContainer.mBiometricCallback.onAction( + val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) + container.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_AUTHENTICATED ) waitForIdleSync() @@ -86,13 +92,13 @@ class AuthContainerViewTest : SysuiTestCase() { eq(AuthDialogCallback.DISMISSED_BIOMETRIC_AUTHENTICATED), eq(null) /* credentialAttestation */ ) - assertThat(authContainer.parent).isNull() + assertThat(container.parent).isNull() } @Test fun testActionUserCanceled_sendsDismissedUserCanceled() { - initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) - authContainer.mBiometricCallback.onAction( + val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) + container.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_USER_CANCELED ) waitForIdleSync() @@ -104,13 +110,13 @@ class AuthContainerViewTest : SysuiTestCase() { eq(AuthDialogCallback.DISMISSED_USER_CANCELED), eq(null) /* credentialAttestation */ ) - assertThat(authContainer.parent).isNull() + assertThat(container.parent).isNull() } @Test fun testActionButtonNegative_sendsDismissedButtonNegative() { - initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) - authContainer.mBiometricCallback.onAction( + val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) + container.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_BUTTON_NEGATIVE ) waitForIdleSync() @@ -119,13 +125,13 @@ class AuthContainerViewTest : SysuiTestCase() { eq(AuthDialogCallback.DISMISSED_BUTTON_NEGATIVE), eq(null) /* credentialAttestation */ ) - assertThat(authContainer.parent).isNull() + assertThat(container.parent).isNull() } @Test fun testActionTryAgain_sendsTryAgain() { - initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) - authContainer.mBiometricCallback.onAction( + val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) + container.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_BUTTON_TRY_AGAIN ) waitForIdleSync() @@ -135,8 +141,8 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testActionError_sendsDismissedError() { - initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) - authContainer.mBiometricCallback.onAction( + val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) + authContainer!!.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_ERROR ) waitForIdleSync() @@ -145,53 +151,53 @@ class AuthContainerViewTest : SysuiTestCase() { eq(AuthDialogCallback.DISMISSED_ERROR), eq(null) /* credentialAttestation */ ) - assertThat(authContainer.parent).isNull() + assertThat(authContainer!!.parent).isNull() } @Test fun testActionUseDeviceCredential_sendsOnDeviceCredentialPressed() { - initializeContainer( + val container = initializeContainer( BiometricManager.Authenticators.BIOMETRIC_WEAK or - BiometricManager.Authenticators.DEVICE_CREDENTIAL + BiometricManager.Authenticators.DEVICE_CREDENTIAL ) - authContainer.mBiometricCallback.onAction( + container.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_USE_DEVICE_CREDENTIAL ) waitForIdleSync() verify(callback).onDeviceCredentialPressed() - assertThat(authContainer.hasCredentialView()).isTrue() + assertThat(container.hasCredentialView()).isTrue() } @Test fun testAnimateToCredentialUI_invokesStartTransitionToCredentialUI() { - initializeContainer( + val container = initializeContainer( BiometricManager.Authenticators.BIOMETRIC_WEAK or - BiometricManager.Authenticators.DEVICE_CREDENTIAL + BiometricManager.Authenticators.DEVICE_CREDENTIAL ) - authContainer.animateToCredentialUI() + container.animateToCredentialUI() waitForIdleSync() - assertThat(authContainer.hasCredentialView()).isTrue() + assertThat(container.hasCredentialView()).isTrue() } @Test fun testShowBiometricUI() { - initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) + val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) waitForIdleSync() - assertThat(authContainer.hasCredentialView()).isFalse() - assertThat(authContainer.hasBiometricPrompt()).isTrue() + assertThat(container.hasCredentialView()).isFalse() + assertThat(container.hasBiometricPrompt()).isTrue() } @Test fun testShowCredentialUI() { - initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) + val container = initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) waitForIdleSync() - assertThat(authContainer.hasCredentialView()).isTrue() - assertThat(authContainer.hasBiometricPrompt()).isFalse() + assertThat(container.hasCredentialView()).isTrue() + assertThat(container.hasBiometricPrompt()).isFalse() } @Test @@ -201,11 +207,11 @@ class AuthContainerViewTest : SysuiTestCase() { DevicePolicyManager.PASSWORD_QUALITY_SOMETHING ) - initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) + val container = initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) waitForIdleSync() - assertThat(authContainer.hasCredentialPatternView()).isTrue() - assertThat(authContainer.hasBiometricPrompt()).isFalse() + assertThat(container.hasCredentialPatternView()).isTrue() + assertThat(container.hasBiometricPrompt()).isFalse() } @Test @@ -218,20 +224,20 @@ class AuthContainerViewTest : SysuiTestCase() { // In the credential view, clicking on the background (to cancel authentication) is not // valid. Thus, the listener should be null, and it should not be in the accessibility // hierarchy. - initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) + val container = initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) waitForIdleSync() - assertThat(authContainer.hasCredentialPasswordView()).isTrue() - assertThat(authContainer.hasBiometricPrompt()).isFalse() + assertThat(container.hasCredentialPasswordView()).isTrue() + assertThat(container.hasBiometricPrompt()).isFalse() assertThat( - authContainer.findViewById(R.id.background)?.isImportantForAccessibility + container.findViewById(R.id.background)?.isImportantForAccessibility ).isFalse() - authContainer.findViewById(R.id.background)?.performClick() + container.findViewById(R.id.background)?.performClick() waitForIdleSync() - assertThat(authContainer.hasCredentialPasswordView()).isTrue() - assertThat(authContainer.hasBiometricPrompt()).isFalse() + assertThat(container.hasCredentialPasswordView()).isTrue() + assertThat(container.hasBiometricPrompt()).isFalse() } @Test @@ -246,7 +252,7 @@ class AuthContainerViewTest : SysuiTestCase() { assertThat((layoutParams.fitInsetsTypes and WindowInsets.Type.ime()) == 0).isTrue() } - private fun initializeContainer(authenticators: Int) { + private fun initializeContainer(authenticators: Int): TestAuthContainerView { val config = AuthContainerView.Config() config.mContext = mContext config.mCallback = callback @@ -286,6 +292,7 @@ class AuthContainerViewTest : SysuiTestCase() { Handler(TestableLooper.get(this).looper) ) ViewUtils.attachView(authContainer) + return authContainer!! } private inner class TestAuthContainerView(