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
This commit is contained in:
Joe Bolinger
2022-03-23 15:10:31 -07:00
parent 67aeabd875
commit d53a2acf5e

View File

@@ -41,7 +41,7 @@ import com.android.systemui.R
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.keyguard.WakefulnessLifecycle
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import org.junit.Ignore import org.junit.After
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -52,7 +52,6 @@ import org.mockito.Mockito.verify
import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoJUnit
import org.mockito.Mockito.`when` as whenever import org.mockito.Mockito.`when` as whenever
@Ignore
@RunWith(AndroidTestingRunner::class) @RunWith(AndroidTestingRunner::class)
@RunWithLooper @RunWithLooper
@SmallTest @SmallTest
@@ -72,12 +71,19 @@ class AuthContainerViewTest : SysuiTestCase() {
@Mock @Mock
lateinit var windowToken: IBinder 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 @Test
fun testActionAuthenticated_sendsDismissedAuthenticated() { fun testActionAuthenticated_sendsDismissedAuthenticated() {
initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK)
authContainer.mBiometricCallback.onAction( container.mBiometricCallback.onAction(
AuthBiometricView.Callback.ACTION_AUTHENTICATED AuthBiometricView.Callback.ACTION_AUTHENTICATED
) )
waitForIdleSync() waitForIdleSync()
@@ -86,13 +92,13 @@ class AuthContainerViewTest : SysuiTestCase() {
eq(AuthDialogCallback.DISMISSED_BIOMETRIC_AUTHENTICATED), eq(AuthDialogCallback.DISMISSED_BIOMETRIC_AUTHENTICATED),
eq<ByteArray?>(null) /* credentialAttestation */ eq<ByteArray?>(null) /* credentialAttestation */
) )
assertThat(authContainer.parent).isNull() assertThat(container.parent).isNull()
} }
@Test @Test
fun testActionUserCanceled_sendsDismissedUserCanceled() { fun testActionUserCanceled_sendsDismissedUserCanceled() {
initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK)
authContainer.mBiometricCallback.onAction( container.mBiometricCallback.onAction(
AuthBiometricView.Callback.ACTION_USER_CANCELED AuthBiometricView.Callback.ACTION_USER_CANCELED
) )
waitForIdleSync() waitForIdleSync()
@@ -104,13 +110,13 @@ class AuthContainerViewTest : SysuiTestCase() {
eq(AuthDialogCallback.DISMISSED_USER_CANCELED), eq(AuthDialogCallback.DISMISSED_USER_CANCELED),
eq<ByteArray?>(null) /* credentialAttestation */ eq<ByteArray?>(null) /* credentialAttestation */
) )
assertThat(authContainer.parent).isNull() assertThat(container.parent).isNull()
} }
@Test @Test
fun testActionButtonNegative_sendsDismissedButtonNegative() { fun testActionButtonNegative_sendsDismissedButtonNegative() {
initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK)
authContainer.mBiometricCallback.onAction( container.mBiometricCallback.onAction(
AuthBiometricView.Callback.ACTION_BUTTON_NEGATIVE AuthBiometricView.Callback.ACTION_BUTTON_NEGATIVE
) )
waitForIdleSync() waitForIdleSync()
@@ -119,13 +125,13 @@ class AuthContainerViewTest : SysuiTestCase() {
eq(AuthDialogCallback.DISMISSED_BUTTON_NEGATIVE), eq(AuthDialogCallback.DISMISSED_BUTTON_NEGATIVE),
eq<ByteArray?>(null) /* credentialAttestation */ eq<ByteArray?>(null) /* credentialAttestation */
) )
assertThat(authContainer.parent).isNull() assertThat(container.parent).isNull()
} }
@Test @Test
fun testActionTryAgain_sendsTryAgain() { fun testActionTryAgain_sendsTryAgain() {
initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK)
authContainer.mBiometricCallback.onAction( container.mBiometricCallback.onAction(
AuthBiometricView.Callback.ACTION_BUTTON_TRY_AGAIN AuthBiometricView.Callback.ACTION_BUTTON_TRY_AGAIN
) )
waitForIdleSync() waitForIdleSync()
@@ -135,8 +141,8 @@ class AuthContainerViewTest : SysuiTestCase() {
@Test @Test
fun testActionError_sendsDismissedError() { fun testActionError_sendsDismissedError() {
initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK)
authContainer.mBiometricCallback.onAction( authContainer!!.mBiometricCallback.onAction(
AuthBiometricView.Callback.ACTION_ERROR AuthBiometricView.Callback.ACTION_ERROR
) )
waitForIdleSync() waitForIdleSync()
@@ -145,53 +151,53 @@ class AuthContainerViewTest : SysuiTestCase() {
eq(AuthDialogCallback.DISMISSED_ERROR), eq(AuthDialogCallback.DISMISSED_ERROR),
eq<ByteArray?>(null) /* credentialAttestation */ eq<ByteArray?>(null) /* credentialAttestation */
) )
assertThat(authContainer.parent).isNull() assertThat(authContainer!!.parent).isNull()
} }
@Test @Test
fun testActionUseDeviceCredential_sendsOnDeviceCredentialPressed() { fun testActionUseDeviceCredential_sendsOnDeviceCredentialPressed() {
initializeContainer( val container = initializeContainer(
BiometricManager.Authenticators.BIOMETRIC_WEAK or 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 AuthBiometricView.Callback.ACTION_USE_DEVICE_CREDENTIAL
) )
waitForIdleSync() waitForIdleSync()
verify(callback).onDeviceCredentialPressed() verify(callback).onDeviceCredentialPressed()
assertThat(authContainer.hasCredentialView()).isTrue() assertThat(container.hasCredentialView()).isTrue()
} }
@Test @Test
fun testAnimateToCredentialUI_invokesStartTransitionToCredentialUI() { fun testAnimateToCredentialUI_invokesStartTransitionToCredentialUI() {
initializeContainer( val container = initializeContainer(
BiometricManager.Authenticators.BIOMETRIC_WEAK or BiometricManager.Authenticators.BIOMETRIC_WEAK or
BiometricManager.Authenticators.DEVICE_CREDENTIAL BiometricManager.Authenticators.DEVICE_CREDENTIAL
) )
authContainer.animateToCredentialUI() container.animateToCredentialUI()
waitForIdleSync() waitForIdleSync()
assertThat(authContainer.hasCredentialView()).isTrue() assertThat(container.hasCredentialView()).isTrue()
} }
@Test @Test
fun testShowBiometricUI() { fun testShowBiometricUI() {
initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK)
waitForIdleSync() waitForIdleSync()
assertThat(authContainer.hasCredentialView()).isFalse() assertThat(container.hasCredentialView()).isFalse()
assertThat(authContainer.hasBiometricPrompt()).isTrue() assertThat(container.hasBiometricPrompt()).isTrue()
} }
@Test @Test
fun testShowCredentialUI() { fun testShowCredentialUI() {
initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) val container = initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL)
waitForIdleSync() waitForIdleSync()
assertThat(authContainer.hasCredentialView()).isTrue() assertThat(container.hasCredentialView()).isTrue()
assertThat(authContainer.hasBiometricPrompt()).isFalse() assertThat(container.hasBiometricPrompt()).isFalse()
} }
@Test @Test
@@ -201,11 +207,11 @@ class AuthContainerViewTest : SysuiTestCase() {
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING DevicePolicyManager.PASSWORD_QUALITY_SOMETHING
) )
initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) val container = initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL)
waitForIdleSync() waitForIdleSync()
assertThat(authContainer.hasCredentialPatternView()).isTrue() assertThat(container.hasCredentialPatternView()).isTrue()
assertThat(authContainer.hasBiometricPrompt()).isFalse() assertThat(container.hasBiometricPrompt()).isFalse()
} }
@Test @Test
@@ -218,20 +224,20 @@ class AuthContainerViewTest : SysuiTestCase() {
// In the credential view, clicking on the background (to cancel authentication) is not // 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 // valid. Thus, the listener should be null, and it should not be in the accessibility
// hierarchy. // hierarchy.
initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) val container = initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL)
waitForIdleSync() waitForIdleSync()
assertThat(authContainer.hasCredentialPasswordView()).isTrue() assertThat(container.hasCredentialPasswordView()).isTrue()
assertThat(authContainer.hasBiometricPrompt()).isFalse() assertThat(container.hasBiometricPrompt()).isFalse()
assertThat( assertThat(
authContainer.findViewById<View>(R.id.background)?.isImportantForAccessibility container.findViewById<View>(R.id.background)?.isImportantForAccessibility
).isFalse() ).isFalse()
authContainer.findViewById<View>(R.id.background)?.performClick() container.findViewById<View>(R.id.background)?.performClick()
waitForIdleSync() waitForIdleSync()
assertThat(authContainer.hasCredentialPasswordView()).isTrue() assertThat(container.hasCredentialPasswordView()).isTrue()
assertThat(authContainer.hasBiometricPrompt()).isFalse() assertThat(container.hasBiometricPrompt()).isFalse()
} }
@Test @Test
@@ -246,7 +252,7 @@ class AuthContainerViewTest : SysuiTestCase() {
assertThat((layoutParams.fitInsetsTypes and WindowInsets.Type.ime()) == 0).isTrue() assertThat((layoutParams.fitInsetsTypes and WindowInsets.Type.ime()) == 0).isTrue()
} }
private fun initializeContainer(authenticators: Int) { private fun initializeContainer(authenticators: Int): TestAuthContainerView {
val config = AuthContainerView.Config() val config = AuthContainerView.Config()
config.mContext = mContext config.mContext = mContext
config.mCallback = callback config.mCallback = callback
@@ -286,6 +292,7 @@ class AuthContainerViewTest : SysuiTestCase() {
Handler(TestableLooper.get(this).looper) Handler(TestableLooper.get(this).looper)
) )
ViewUtils.attachView(authContainer) ViewUtils.attachView(authContainer)
return authContainer!!
} }
private inner class TestAuthContainerView( private inner class TestAuthContainerView(