Merge "Cache start callback for watchdog in case the HAL operation does not complete its expected lifecycle." into tm-dev

This commit is contained in:
Joe Bolinger
2022-02-28 21:16:17 +00:00
committed by Android (Google) Code Review
2 changed files with 15 additions and 4 deletions

View File

@@ -84,6 +84,8 @@ public class BiometricSchedulerOperation {
private final BaseClientMonitor mClientMonitor;
@Nullable
private final ClientMonitorCallback mClientCallback;
@Nullable
private ClientMonitorCallback mOnStartCallback;
@OperationState
private int mState;
@VisibleForTesting
@@ -108,7 +110,8 @@ public class BiometricSchedulerOperation {
mCancelWatchdog = () -> {
if (!isFinished()) {
Slog.e(TAG, "[Watchdog Triggered]: " + this);
getWrappedCallback().onClientFinished(mClientMonitor, false /* success */);
getWrappedCallback(mOnStartCallback)
.onClientFinished(mClientMonitor, false /* success */);
}
};
}
@@ -174,6 +177,7 @@ public class BiometricSchedulerOperation {
}
private boolean doStart(@NonNull ClientMonitorCallback callback) {
mOnStartCallback = callback;
final ClientMonitorCallback cb = getWrappedCallback(callback);
if (mState == STATE_WAITING_IN_QUEUE_CANCELING) {

View File

@@ -40,12 +40,14 @@ import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@Presubmit
@RunWith(AndroidTestingRunner.class)
@@ -62,6 +64,9 @@ public class BiometricSchedulerOperationTest {
}
}
@Rule
public final MockitoRule mockito = MockitoJUnit.rule();
@Mock
private InterruptableMonitor<FakeHal> mClientMonitor;
@Mock
@@ -76,7 +81,6 @@ public class BiometricSchedulerOperationTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mHandler = new Handler(TestableLooper.get(this).getLooper());
mOperation = new BiometricSchedulerOperation(mClientMonitor, mClientCallback);
}
@@ -311,10 +315,12 @@ public class BiometricSchedulerOperationTest {
private void cancelWatchdog(boolean start) {
when(mClientMonitor.getFreshDaemon()).thenReturn(mHal);
mOperation.start(mock(ClientMonitorCallback.class));
final ClientMonitorCallback opStartCallback = mock(ClientMonitorCallback.class);
mOperation.start(opStartCallback);
if (start) {
verify(mClientMonitor).start(mStartCallback.capture());
mStartCallback.getValue().onClientStarted(mClientMonitor);
verify(opStartCallback).onClientStarted(eq(mClientMonitor));
}
mOperation.cancel(mHandler, mock(ClientMonitorCallback.class));
@@ -325,6 +331,7 @@ public class BiometricSchedulerOperationTest {
assertThat(mOperation.isFinished()).isTrue();
assertThat(mOperation.isCanceling()).isFalse();
verify(opStartCallback).onClientFinished(eq(mClientMonitor), eq(false));
verify(mClientMonitor).destroy();
}
}