1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.server.biometrics.sensors.face.hidl; 18 19 import static junit.framework.Assert.assertEquals; 20 21 import static org.mockito.ArgumentMatchers.anyInt; 22 import static org.mockito.ArgumentMatchers.eq; 23 import static org.mockito.Mockito.never; 24 import static org.mockito.Mockito.verify; 25 import static org.mockito.Mockito.when; 26 27 import android.content.Context; 28 import android.hardware.biometrics.face.V1_0.IBiometricsFace; 29 import android.hardware.biometrics.face.V1_0.OptionalUint64; 30 import android.hardware.face.IFaceServiceReceiver; 31 import android.os.Binder; 32 import android.platform.test.annotations.Presubmit; 33 34 import androidx.test.core.app.ApplicationProvider; 35 import androidx.test.filters.SmallTest; 36 37 import com.android.server.biometrics.log.BiometricContext; 38 import com.android.server.biometrics.log.BiometricLogger; 39 import com.android.server.biometrics.sensors.ClientMonitorCallback; 40 import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; 41 42 import org.junit.Before; 43 import org.junit.Test; 44 import org.mockito.Mock; 45 import org.mockito.MockitoAnnotations; 46 47 @Presubmit 48 @SmallTest 49 public class FaceGenerateChallengeClientTest { 50 51 private static final String TAG = "FaceGenerateChallengeClientTest"; 52 private static final int USER_ID = 2; 53 private static final int SENSOR_ID = 4; 54 private static final long START_TIME = 5000; 55 private static final long CHALLENGE = 200; 56 57 private final Context mContext = ApplicationProvider.getApplicationContext(); 58 59 @Mock 60 private IBiometricsFace mIBiometricsFace; 61 @Mock 62 private IFaceServiceReceiver mClientReceiver; 63 @Mock 64 private IFaceServiceReceiver mOtherReceiver; 65 @Mock 66 private ClientMonitorCallback mMonitorCallback; 67 @Mock 68 private BiometricLogger mBiometricLogger; 69 @Mock 70 private BiometricContext mBiometricContext; 71 72 private FaceGenerateChallengeClient mClient; 73 74 @Before setup()75 public void setup() throws Exception { 76 MockitoAnnotations.initMocks(this); 77 78 final OptionalUint64 challenge = new OptionalUint64(); 79 challenge.value = CHALLENGE; 80 when(mIBiometricsFace.generateChallenge(anyInt())).thenReturn(challenge); 81 82 mClient = new FaceGenerateChallengeClient(mContext, () -> mIBiometricsFace, new Binder(), 83 new ClientMonitorCallbackConverter(mClientReceiver), USER_ID, 84 TAG, SENSOR_ID, mBiometricLogger, mBiometricContext , START_TIME); 85 } 86 87 @Test getCreatedAt()88 public void getCreatedAt() { 89 assertEquals(START_TIME, mClient.getCreatedAt()); 90 } 91 92 @Test reuseResult_whenNotReady()93 public void reuseResult_whenNotReady() throws Exception { 94 mClient.reuseResult(mOtherReceiver); 95 verify(mOtherReceiver, never()).onChallengeGenerated(anyInt(), anyInt(), anyInt()); 96 } 97 98 @Test reuseResult_whenReady()99 public void reuseResult_whenReady() throws Exception { 100 mClient.start(mMonitorCallback); 101 mClient.reuseResult(mOtherReceiver); 102 verify(mOtherReceiver).onChallengeGenerated(eq(SENSOR_ID), eq(USER_ID), eq(CHALLENGE)); 103 } 104 105 @Test reuseResult_whenReallyReady()106 public void reuseResult_whenReallyReady() throws Exception { 107 mClient.reuseResult(mOtherReceiver); 108 mClient.start(mMonitorCallback); 109 verify(mOtherReceiver).onChallengeGenerated(eq(SENSOR_ID), eq(USER_ID), eq(CHALLENGE)); 110 } 111 } 112