diff options
-rw-r--r-- | TODO.md | 1 | ||||
-rw-r--r-- | src/tests/otp.rs | 25 |
2 files changed, 16 insertions, 10 deletions
@@ -36,3 +36,4 @@ - Fix generic connection (`get_connected_device`). - More specific error checking in the tests. - Differentiate empty strings and errors (see `result_from_string`). +- Check integer conversions. diff --git a/src/tests/otp.rs b/src/tests/otp.rs index 44689be..46843c8 100644 --- a/src/tests/otp.rs +++ b/src/tests/otp.rs @@ -130,13 +130,15 @@ fn hotp_erase() { assert_eq!("test2", device.get_hotp_slot_name(2).unwrap()); } -fn configure_totp(admin: &ConfigureOtp) { +fn configure_totp(admin: &ConfigureOtp, factor: u64) { let slot_data = OtpSlotData::new(1, "test-totp", TOTP_SECRET, OtpMode::EightDigits); - assert_eq!(CommandStatus::Success, admin.write_totp_slot(slot_data, 30)); + let time_window = 30u64.checked_mul(factor).unwrap(); + assert_eq!(CommandStatus::Success, admin.write_totp_slot(slot_data, time_window as u16)); } -fn check_totp_codes(device: &GenerateOtp) { - for (i, &(time, code)) in TOTP_CODES.iter().enumerate() { +fn check_totp_codes(device: &GenerateOtp, factor: u64) { + for (i, &(base_time, code)) in TOTP_CODES.iter().enumerate() { + let time = base_time.checked_mul(factor).unwrap(); assert_eq!(CommandStatus::Success, device.set_time(time)); let result = device.get_totp_code(1); assert!(result.is_ok()); @@ -157,11 +159,14 @@ fn totp_no_pin() { let config = Config::new(None, None, None, false); assert_eq!(CommandStatus::Success, admin.write_config(config)); - configure_totp(&admin); - check_totp_codes(admin.deref()); + configure_totp(&admin, 1); + check_totp_codes(admin.deref(), 1); - configure_totp(&admin); - check_totp_codes(&admin.device()); + configure_totp(&admin, 2); + check_totp_codes(admin.deref(), 2); + + configure_totp(&admin, 1); + check_totp_codes(&admin.device(), 1); } #[test] @@ -172,9 +177,9 @@ fn totp_pin() { let config = Config::new(None, None, None, true); assert_eq!(CommandStatus::Success, admin.write_config(config)); - configure_totp(&admin); + configure_totp(&admin, 1); let user = admin.device().authenticate_user(USER_PASSWORD).unwrap(); - check_totp_codes(&user); + check_totp_codes(&user, 1); assert!(user.device().get_totp_code(1).is_err()); } |