Merge "Re-enable biometric prompt tests." into tm-dev

This commit is contained in:
Joe Bolinger
2022-03-25 23:32:53 +00:00
committed by Android (Google) Code Review

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(