@@ -524,6 +524,17 @@ __wrap_fido_assert_set_sig(fido_assert_t *assert, size_t idx,
524524 return ret ;
525525}
526526
527+ int
528+ __wrap_fido_dev_get_retry_count (fido_dev_t * dev , int * pin_retries )
529+ {
530+ int ret ;
531+
532+ ret = mock ();
533+ (* pin_retries ) = mock ();
534+
535+ return ret ;
536+ }
537+
527538/***********************
528539 * TEST
529540 **********************/
@@ -1339,6 +1350,38 @@ void test_verify_assert_data_integration(void **state)
13391350 talloc_free (tmp_ctx );
13401351}
13411352
1353+ void test_get_device_pin_retries_success (void * * state )
1354+ {
1355+ struct passkey_data data ;
1356+ fido_dev_t * dev = NULL ;
1357+ int pin_retries = 0 ;
1358+ errno_t ret ;
1359+
1360+ data .user_verification = FIDO_OPT_TRUE ;
1361+ will_return (__wrap_fido_dev_get_retry_count , FIDO_OK );
1362+ will_return (__wrap_fido_dev_get_retry_count , 8 );
1363+
1364+ ret = get_device_pin_retries (dev , & data , & pin_retries );
1365+ assert_int_equal (ret , FIDO_OK );
1366+ assert_int_equal (pin_retries , 8 );
1367+ }
1368+
1369+ void test_get_device_pin_retries_failure (void * * state )
1370+ {
1371+ struct passkey_data data ;
1372+ fido_dev_t * dev = NULL ;
1373+ int pin_retries = 0 ;
1374+ errno_t ret ;
1375+
1376+ data .user_verification = FIDO_OPT_TRUE ;
1377+ will_return (__wrap_fido_dev_get_retry_count , FIDO_ERR_INVALID_ARGUMENT );
1378+ will_return (__wrap_fido_dev_get_retry_count , 8 );
1379+
1380+ ret = get_device_pin_retries (dev , & data , & pin_retries );
1381+ assert_int_equal (ret , FIDO_ERR_INVALID_ARGUMENT );
1382+ assert_int_equal (pin_retries , 8 );
1383+ }
1384+
13421385static void test_parse_supp_valgrind_args (void )
13431386{
13441387 /*
@@ -1349,6 +1392,54 @@ static void test_parse_supp_valgrind_args(void)
13491392 DEBUG_CLI_INIT (debug_level );
13501393}
13511394
1395+ void test_preflight_integration (void * * state )
1396+ {
1397+ TALLOC_CTX * tmp_ctx ;
1398+ struct passkey_data data ;
1399+ size_t dev_number = 3 ;
1400+ char * key_handle ;
1401+ errno_t ret ;
1402+
1403+ tmp_ctx = talloc_new (NULL );
1404+ assert_non_null (tmp_ctx );
1405+ data .action = ACTION_PREFLIGHT ;
1406+ data .shortname = "user" ;
1407+ data .domain = "test.com" ;
1408+ key_handle = talloc_strdup (tmp_ctx , TEST_KEY_HANDLE );
1409+ data .key_handle_list = & key_handle ;
1410+ data .key_handle_size = 1 ;
1411+ data .type = COSE_ES256 ;
1412+ data .user_verification = FIDO_OPT_TRUE ;
1413+ data .user_id = NULL ;
1414+ data .quiet = false;
1415+ will_return (__wrap_fido_dev_info_manifest , FIDO_OK );
1416+ will_return (__wrap_fido_dev_info_manifest , dev_number );
1417+ will_return (__wrap_fido_assert_set_rp , FIDO_OK );
1418+ will_return (__wrap_fido_assert_allow_cred , FIDO_OK );
1419+ will_return (__wrap_fido_assert_set_uv , FIDO_OK );
1420+ will_return (__wrap_fido_assert_set_clientdata_hash , FIDO_OK );
1421+ for (size_t i = 0 ; i < (dev_number - 1 ); i ++ ) {
1422+ will_return (__wrap_fido_dev_info_path , TEST_PATH );
1423+ will_return (__wrap_fido_dev_open , FIDO_OK );
1424+ will_return (__wrap_fido_dev_is_fido2 , true);
1425+ if (i == 0 ) {
1426+ will_return (__wrap_fido_dev_get_assert , FIDO_ERR_INVALID_SIG );
1427+ } else {
1428+ will_return (__wrap_fido_dev_get_assert , FIDO_OK );
1429+ }
1430+ }
1431+ will_return (__wrap_fido_dev_has_uv , false);
1432+ will_return (__wrap_fido_dev_has_pin , true);
1433+ will_return (__wrap_fido_dev_supports_uv , false);
1434+ will_return (__wrap_fido_dev_get_retry_count , FIDO_OK );
1435+ will_return (__wrap_fido_dev_get_retry_count , 8 );
1436+
1437+ ret = preflight (& data , 1 );
1438+ assert_int_equal (ret , EOK );
1439+
1440+ talloc_free (tmp_ctx );
1441+ }
1442+
13521443int main (int argc , const char * argv [])
13531444{
13541445 poptContext pc ;
@@ -1396,6 +1487,9 @@ int main(int argc, const char *argv[])
13961487 cmocka_unit_test (test_authenticate_integration ),
13971488 cmocka_unit_test (test_get_assert_data_integration ),
13981489 cmocka_unit_test (test_verify_assert_data_integration ),
1490+ cmocka_unit_test (test_get_device_pin_retries_success ),
1491+ cmocka_unit_test (test_get_device_pin_retries_failure ),
1492+ cmocka_unit_test (test_preflight_integration ),
13991493 };
14001494
14011495 /* Set debug level to invalid value so we can decide if -d 0 was used. */
0 commit comments