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
This commit is contained in:
Kevin Chyn
2021-01-26 19:03:48 -08:00
parent 77bb0b7291
commit 639957c71f
2 changed files with 24 additions and 2 deletions

View File

@@ -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);

View File

@@ -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);
}
}
}