diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/fpsensor.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/test/fpsensor.c b/test/fpsensor.c index 66ca679b3d..fb60eec8df 100644 --- a/test/fpsensor.c +++ b/test/fpsensor.c @@ -239,12 +239,66 @@ test_static int test_fpsensor_seed(void) return EC_SUCCESS; } +test_static int test_fp_set_sensor_mode(void) +{ + uint32_t requested_mode = 0; + uint32_t output_mode = 0; + + /* Validate initial conditions */ + TEST_ASSERT(FP_MAX_FINGER_COUNT == 5); + TEST_ASSERT(templ_valid == 0); + TEST_ASSERT(sensor_mode == 0); + + /* GIVEN missing output parameter, THEN get error */ + TEST_ASSERT(fp_set_sensor_mode(0, NULL) == EC_RES_INVALID_PARAM); + /* THEN sensor_mode is unchanged */ + TEST_ASSERT(sensor_mode == 0); + + /* GIVEN requested mode includes FP_MODE_DONT_CHANGE, THEN succeed */ + TEST_ASSERT(sensor_mode == 0); + TEST_ASSERT(output_mode == 0); + requested_mode = FP_MODE_DONT_CHANGE; + TEST_ASSERT(fp_set_sensor_mode(requested_mode, &output_mode) == + EC_RES_SUCCESS); + /* THEN sensor_mode is unchanged */ + TEST_ASSERT(sensor_mode == 0); + /* THEN output_mode matches sensor_mode */ + TEST_ASSERT(output_mode == sensor_mode); + + /* GIVEN request to change to valid sensor mode */ + TEST_ASSERT(sensor_mode == 0); + requested_mode = FP_MODE_ENROLL_SESSION; + /* THEN succeed */ + TEST_ASSERT(fp_set_sensor_mode(requested_mode, &output_mode) == + EC_RES_SUCCESS); + /* THEN requested mode is returned */ + TEST_ASSERT(requested_mode == output_mode); + /* THEN sensor_mode is updated */ + TEST_ASSERT(sensor_mode == requested_mode); + + /* GIVEN max number of fingers already enrolled */ + sensor_mode = 0; + output_mode = 0xdeadbeef; + templ_valid = FP_MAX_FINGER_COUNT; + requested_mode = FP_MODE_ENROLL_SESSION; + /* THEN additional enroll attempt will fail */ + TEST_ASSERT(fp_set_sensor_mode(requested_mode, &output_mode) == + EC_RES_INVALID_PARAM); + /* THEN output parameters is unchanged */ + TEST_ASSERT(output_mode = 0xdeadbeef); + /* THEN sensor_mode is unchanged */ + TEST_ASSERT(sensor_mode == 0); + + return EC_SUCCESS; +} + void run_test(void) { RUN_TEST(test_derive_encryption_key_failure_seed_not_set); RUN_TEST(test_fpsensor_seed); RUN_TEST(test_derive_encryption_key); RUN_TEST(test_derive_encryption_key_failure_rollback_fail); + RUN_TEST(test_fp_set_sensor_mode); test_print_result(); } |