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:
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user