Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 17c35128 authored by Diya Bera's avatar Diya Bera
Browse files

Fix tests: follow up to ag/25856378

Bug: 294161627
Test: atest com.android.server.biometrics
Change-Id: Ie360bde7edfd493cd3bebee73984363644fcca51
parent 8c4b2f57
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -33,6 +33,9 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.UserHandle;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;

@@ -40,6 +43,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.test.filters.SmallTest;

import com.android.server.biometrics.Flags;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;

@@ -66,6 +70,9 @@ public class UserAwareBiometricSchedulerTest {

    @Rule
    public final MockitoRule mockito = MockitoJUnit.rule();
    @Rule
    public final CheckFlagsRule mCheckFlagsRule =
            DeviceFlagsValueProvider.createCheckFlagsRule();

    private Handler mHandler;
    private UserAwareBiometricScheduler mScheduler;
@@ -122,6 +129,7 @@ public class UserAwareBiometricSchedulerTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void testScheduleOperation_whenNoUser() {
        mCurrentUserId = UserHandle.USER_NULL;

@@ -183,6 +191,7 @@ public class UserAwareBiometricSchedulerTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void testScheduleOperation_whenSameUser() {
        mCurrentUserId = 10;

@@ -199,6 +208,7 @@ public class UserAwareBiometricSchedulerTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void testScheduleOperation_whenDifferentUser() {
        mCurrentUserId = 10;

@@ -219,6 +229,7 @@ public class UserAwareBiometricSchedulerTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void testStartUser_alwaysStartsNextOperation() {
        BaseClientMonitor nextClient = mock(BaseClientMonitor.class);
        when(nextClient.getTargetUserId()).thenReturn(10);
@@ -246,6 +257,7 @@ public class UserAwareBiometricSchedulerTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void testStartUser_failsClearsStopUserClient() {
        // When a stop user client fails, check that mStopUserClient
        // is set to null to prevent the scheduler from getting stuck.
+42 −0
Original line number Diff line number Diff line
@@ -50,12 +50,17 @@ import android.os.IBinder;
import android.os.PowerManager;
import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.platform.test.flag.junit.SetFlagsRule;
import android.testing.TestableContext;

import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;

import com.android.server.biometrics.Flags;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.OperationContextExt;
@@ -94,6 +99,9 @@ public class FaceAuthenticationClientTest {
    @Rule
    public final TestableContext mContext = new TestableContext(
            InstrumentationRegistry.getInstrumentation().getTargetContext(), null);
    @Rule
    public final CheckFlagsRule mCheckFlagsRule =
            DeviceFlagsValueProvider.createCheckFlagsRule();

    @Mock
    private ISession mHal;
@@ -127,6 +135,8 @@ public class FaceAuthenticationClientTest {
    private ArgumentCaptor<OperationContextExt> mOperationContextCaptor;
    @Captor
    private ArgumentCaptor<Consumer<OperationContext>> mContextInjector;
    @Captor
    private ArgumentCaptor<Consumer<OperationContext>> mStartHalConsumerCaptor;

    @Rule
    public final MockitoRule mockito = MockitoJUnit.rule();
@@ -149,6 +159,7 @@ public class FaceAuthenticationClientTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void authWithContext_v2() throws RemoteException {
        final FaceAuthenticationClient client = createClient(2);
        client.start(mCallback);
@@ -189,6 +200,7 @@ public class FaceAuthenticationClientTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void notifyHalWhenContextChanges() throws RemoteException {
        final FaceAuthenticationClient client = createClient();
        client.start(mCallback);
@@ -210,6 +222,36 @@ public class FaceAuthenticationClientTest {
        verify(mBiometricContext).unsubscribe(same(mOperationContextCaptor.getValue()));
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_DE_HIDL)
    public void subscribeContextAndStartHal() throws RemoteException {
        final FaceAuthenticationClient client = createClient();
        client.start(mCallback);

        verify(mBiometricContext).subscribe(mOperationContextCaptor.capture(),
                mStartHalConsumerCaptor.capture(), mContextInjector.capture(), any());

        mStartHalConsumerCaptor.getValue().accept(
                mOperationContextCaptor.getValue().toAidlContext());
        final ArgumentCaptor<OperationContext> captor =
                ArgumentCaptor.forClass(OperationContext.class);

        verify(mHal).authenticateWithContext(eq(OP_ID), captor.capture());

        OperationContext opContext = captor.getValue();

        assertThat(opContext).isSameInstanceAs(
                mOperationContextCaptor.getValue().toAidlContext());

        mContextInjector.getValue().accept(opContext);

        verify(mHal).onContextChanged(same(opContext));

        client.stopHalOperation();

        verify(mBiometricContext).unsubscribe(same(mOperationContextCaptor.getValue()));
    }

    @Test
    public void cancelsAuthWhenNotInForeground() throws Exception {
        final ActivityManager.RunningTaskInfo topTask = new ActivityManager.RunningTaskInfo();
+41 −0
Original line number Diff line number Diff line
@@ -37,11 +37,16 @@ import android.os.PowerManager;
import android.os.RemoteException;
import android.os.Vibrator;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.testing.TestableContext;

import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;

import com.android.server.biometrics.Flags;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.OperationContextExt;
@@ -71,6 +76,9 @@ public class FaceDetectClientTest {
    @Rule
    public final TestableContext mContext = new TestableContext(
            InstrumentationRegistry.getInstrumentation().getTargetContext(), null);
    @Rule
    public final CheckFlagsRule mCheckFlagsRule =
            DeviceFlagsValueProvider.createCheckFlagsRule();

    @Mock
    private ISession mHal;
@@ -91,6 +99,8 @@ public class FaceDetectClientTest {
    @Captor
    private ArgumentCaptor<OperationContextExt> mOperationContextCaptor;
    @Captor
    private ArgumentCaptor<Consumer<OperationContext>> mStartHalCaptor;
    @Captor
    private ArgumentCaptor<Consumer<OperationContext>> mContextInjector;

    @Rule
@@ -114,6 +124,7 @@ public class FaceDetectClientTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void detectWithContext_v2() throws RemoteException {
        final FaceDetectClient client = createClient(2);
        client.start(mCallback);
@@ -132,6 +143,7 @@ public class FaceDetectClientTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void notifyHalWhenContextChanges() throws RemoteException {
        final FaceDetectClient client = createClient();
        client.start(mCallback);
@@ -153,6 +165,35 @@ public class FaceDetectClientTest {
        verify(mBiometricContext).unsubscribe(same(mOperationContextCaptor.getValue()));
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_DE_HIDL)
    public void subscribeContextAndStartHal() throws RemoteException {
        final FaceDetectClient client = createClient();
        client.start(mCallback);

        verify(mBiometricContext).subscribe(mOperationContextCaptor.capture(),
                mStartHalCaptor.capture(), mContextInjector.capture(), any());

        mStartHalCaptor.getValue().accept(mOperationContextCaptor.getValue().toAidlContext());
        final ArgumentCaptor<OperationContext> captor =
                ArgumentCaptor.forClass(OperationContext.class);

        verify(mHal).detectInteractionWithContext(captor.capture());

        OperationContext opContext = captor.getValue();

        assertThat(opContext).isSameInstanceAs(
                mOperationContextCaptor.getValue().toAidlContext());

        mContextInjector.getValue().accept(opContext);

        verify(mHal).onContextChanged(same(opContext));

        client.stopHalOperation();

        verify(mBiometricContext).unsubscribe(same(mOperationContextCaptor.getValue()));
    }

    @Test
    public void doesNotPlayHapticOnInteractionDetected() throws Exception {
        final FaceDetectClient client = createClient();
+57 −1
Original line number Diff line number Diff line
@@ -28,17 +28,21 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.hardware.biometrics.common.OperationContext;
import android.hardware.biometrics.face.FaceEnrollOptions;
import android.hardware.biometrics.face.ISession;
import android.hardware.face.Face;
import android.os.IBinder;
import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.testing.TestableContext;

import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;

import com.android.server.biometrics.Flags;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.OperationContextExt;
@@ -68,6 +72,9 @@ public class FaceEnrollClientTest {
    @Rule
    public final TestableContext mContext = new TestableContext(
            InstrumentationRegistry.getInstrumentation().getTargetContext(), null);
    @Rule
    public final CheckFlagsRule mCheckFlagsRule =
            DeviceFlagsValueProvider.createCheckFlagsRule();

    @Mock
    private ISession mHal;
@@ -89,6 +96,8 @@ public class FaceEnrollClientTest {
    private ArgumentCaptor<OperationContextExt> mOperationContextCaptor;
    @Captor
    private ArgumentCaptor<Consumer<OperationContext>> mContextInjector;
    @Captor
    private ArgumentCaptor<Consumer<OperationContext>> mStartHalConsumer;

    @Rule
    public final MockitoRule mockito = MockitoJUnit.rule();
@@ -109,6 +118,7 @@ public class FaceEnrollClientTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void enrollWithContext_v2() throws RemoteException {
        final FaceEnrollClient client = createClient(2);
        client.start(mCallback);
@@ -123,6 +133,7 @@ public class FaceEnrollClientTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void notifyHalWhenContextChanges() throws RemoteException {
        final FaceEnrollClient client = createClient(3);
        client.start(mCallback);
@@ -145,6 +156,37 @@ public class FaceEnrollClientTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_DE_HIDL)
    public void subscribeContextAndStartHal() throws RemoteException {
        final FaceEnrollClient client = createClient(3);
        client.start(mCallback);

        verify(mBiometricContext).subscribe(
                mOperationContextCaptor.capture(), mStartHalConsumer.capture(),
                mContextInjector.capture(), any());

        mStartHalConsumer.getValue().accept(mOperationContextCaptor.getValue().toAidlContext());
        final ArgumentCaptor<OperationContext> captor =
                ArgumentCaptor.forClass(OperationContext.class);

        verify(mHal).enrollWithContext(any(), anyByte(), any(), any(), captor.capture());

        OperationContext opContext = captor.getValue();

        assertThat(opContext).isSameInstanceAs(
                mOperationContextCaptor.getValue().toAidlContext());

        mContextInjector.getValue().accept(opContext);

        verify(mHal).onContextChanged(same(opContext));

        client.stopHalOperation();

        verify(mBiometricContext).unsubscribe(same(mOperationContextCaptor.getValue()));
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void enrollWithFaceOptions() throws RemoteException {
        final FaceEnrollClient client = createClient(4);
        client.start(mCallback);
@@ -152,6 +194,20 @@ public class FaceEnrollClientTest {
        verify(mHal).enrollWithOptions(any());
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_DE_HIDL)
    public void enrollWithFaceOptionsAfterSubscribingContext() throws RemoteException {
        final FaceEnrollClient client = createClient(4);
        client.start(mCallback);

        verify(mBiometricContext).subscribe(mOperationContextCaptor.capture(),
                mStartHalConsumer.capture(), any(), any());

        mStartHalConsumer.getValue().accept(mOperationContextCaptor.getValue().toAidlContext());

        verify(mHal).enrollWithOptions(any());
    }

    private FaceEnrollClient createClient() throws RemoteException {
        return createClient(200 /* version */);
    }
+12 −0
Original line number Diff line number Diff line
@@ -38,11 +38,15 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.UserManager;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;

import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;

import com.android.internal.R;
import com.android.server.biometrics.Flags;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.sensors.AuthenticationStateListeners;
import com.android.server.biometrics.sensors.BiometricScheduler;
@@ -50,6 +54,7 @@ import com.android.server.biometrics.sensors.BiometricStateCallback;
import com.android.server.biometrics.sensors.LockoutResetDispatcher;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -70,6 +75,10 @@ public class Face10Test {
    private static final int USER_ID = 20;
    private static final float FRR_THRESHOLD = 0.2f;

    @Rule
    public final CheckFlagsRule mCheckFlagsRule =
            DeviceFlagsValueProvider.createCheckFlagsRule();

    @Mock
    private Context mContext;
    @Mock
@@ -145,6 +154,7 @@ public class Face10Test {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void scheduleGenerateChallenge_cachesResult() {
        final IFaceServiceReceiver[] mocks = IntStream.range(0, 3)
                .mapToObj(i -> mock(IFaceServiceReceiver.class))
@@ -163,6 +173,7 @@ public class Face10Test {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void scheduleRevokeChallenge_waitsUntilEmpty() {
        final long challenge = 22;
        final IFaceServiceReceiver[] mocks = IntStream.range(0, 3)
@@ -182,6 +193,7 @@ public class Face10Test {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DE_HIDL)
    public void scheduleRevokeChallenge_doesNotWaitForever() {
        mFace10.scheduleGenerateChallenge(
                SENSOR_ID, USER_ID, mBinder, mock(IFaceServiceReceiver.class), TAG);
Loading