From 639957c71f524e7f5217bb811b71c563f9af7b69 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Tue, 26 Jan 2021 19:03:48 -0800 Subject: [PATCH] Use mock IBiometricsFingerprint for Fingerprint21Test Let's not depend on the actual HAL, since it can cause tests to be flaky. Fixes: 178245995 Test: atest Fingerprint21Test Change-Id: I5a8acc23983a0481746e9c35fe46b6bf5b2225a8 --- .../fingerprint/hidl/Fingerprint21.java | 4 +++- .../fingerprint/hidl/Fingerprint21Test.java | 22 ++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java index acc575fb19731..a4a84019bae76 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java @@ -47,6 +47,7 @@ import android.util.Slog; import android.util.proto.ProtoOutputStream; import com.android.internal.R; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FrameworkStatsLog; import com.android.server.biometrics.SensorServiceStateProto; import com.android.server.biometrics.SensorStateProto; @@ -397,7 +398,8 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider }); } - private synchronized IBiometricsFingerprint getDaemon() { + @VisibleForTesting + synchronized IBiometricsFingerprint getDaemon() { if (mTestHalEnabled) { final TestHal testHal = new TestHal(); testHal.setNotify(mHalResultController); diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21Test.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21Test.java index 61cc8e6e8ea30..904ade82a51f9 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21Test.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21Test.java @@ -19,17 +19,20 @@ package com.android.server.biometrics.sensors.fingerprint.hidl; import static junit.framework.Assert.assertEquals; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.content.res.Resources; import android.hardware.biometrics.BiometricManager; +import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint; import android.os.Handler; import android.os.Looper; import android.os.UserManager; import android.platform.test.annotations.Presubmit; +import androidx.annotation.NonNull; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; @@ -80,7 +83,7 @@ public class Fingerprint21Test { .thenReturn(5); mLockoutResetDispatcher = new LockoutResetDispatcher(mContext); - mFingerprint21 = new Fingerprint21(mContext, mScheduler, + mFingerprint21 = new TestableFingerprint21(mContext, mScheduler, new Handler(Looper.getMainLooper()), SENSOR_ID, BiometricManager.Authenticators.BIOMETRIC_WEAK, mLockoutResetDispatcher, mHalResultController); @@ -100,4 +103,21 @@ public class Fingerprint21Test { waitForIdle(); verify(mScheduler).reset(); } + + private static class TestableFingerprint21 extends Fingerprint21 { + + TestableFingerprint21(@NonNull Context context, + @NonNull BiometricScheduler scheduler, + @NonNull Handler handler, int sensorId, int strength, + @NonNull LockoutResetDispatcher lockoutResetDispatcher, + @NonNull HalResultController controller) { + super(context, scheduler, handler, sensorId, strength, lockoutResetDispatcher, + controller); + } + + @Override + synchronized IBiometricsFingerprint getDaemon() { + return mock(IBiometricsFingerprint.class); + } + } }