Mercurial > crates > nonstick
comparison testharness/src/bin/testharness.rs @ 166:2f5913131295
Separate flag/action flags into flags and action.
This also individualizes the type of flag for each PAM function,
so that you can only call a function with the right flags and values.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Tue, 15 Jul 2025 00:32:24 -0400 |
| parents | a75a66cb4181 |
| children | 0cabe7b94a4f |
comparison
equal
deleted
inserted
replaced
| 165:c4b1e280463c | 166:2f5913131295 |
|---|---|
| 1 //! The actual program which runs the tests. | 1 //! The actual program which runs the tests. |
| 2 | 2 |
| 3 use nonstick::conv::Exchange; | 3 use nonstick::conv::Exchange; |
| 4 use nonstick::items::Items; | 4 use nonstick::items::Items; |
| 5 use nonstick::libpam::TransactionBuilder; | 5 use nonstick::libpam::TransactionBuilder; |
| 6 use nonstick::{Conversation, ErrorCode, Flags, LibPamTransaction, PamShared, Transaction}; | 6 use nonstick::{ |
| 7 AuthnFlags, AuthtokFlags, Conversation, ErrorCode, LibPamTransaction, PamShared, Transaction, | |
| 8 }; | |
| 7 use std::cell::Cell; | 9 use std::cell::Cell; |
| 8 use std::ffi::OsString; | 10 use std::ffi::OsString; |
| 9 use std::os::unix::ffi::OsStrExt; | 11 use std::os::unix::ffi::OsStrExt; |
| 10 | 12 |
| 11 fn main() { | 13 fn main() { |
| 91 let harness = TestHarness { | 93 let harness = TestHarness { |
| 92 wrong_username: true, | 94 wrong_username: true, |
| 93 ..Default::default() | 95 ..Default::default() |
| 94 }; | 96 }; |
| 95 let mut tx = harness.start(); | 97 let mut tx = harness.start(); |
| 96 let auth = tx.authenticate(Flags::empty()); | 98 let auth = tx.authenticate(AuthnFlags::empty()); |
| 97 assert_eq!(auth, Err(ErrorCode::UserUnknown)); | 99 assert_eq!(auth, Err(ErrorCode::UserUnknown)); |
| 98 } | 100 } |
| 99 | 101 |
| 100 fn test_wrong_password() { | 102 fn test_wrong_password() { |
| 101 let harness = TestHarness { | 103 let harness = TestHarness { |
| 102 wrong_password: true, | 104 wrong_password: true, |
| 103 ..Default::default() | 105 ..Default::default() |
| 104 }; | 106 }; |
| 105 let mut tx = harness.start(); | 107 let mut tx = harness.start(); |
| 106 let auth = tx.authenticate(Flags::empty()); | 108 let auth = tx.authenticate(AuthnFlags::empty()); |
| 107 assert_eq!(auth, Err(ErrorCode::AuthenticationError)); | 109 assert_eq!(auth, Err(ErrorCode::AuthenticationError)); |
| 108 } | 110 } |
| 109 | 111 |
| 110 fn test_correct() { | 112 fn test_correct() { |
| 111 let harness = TestHarness::default(); | 113 let harness = TestHarness::default(); |
| 112 let mut tx = harness.start(); | 114 let mut tx = harness.start(); |
| 113 tx.authenticate(Flags::empty()).unwrap(); | 115 tx.authenticate(AuthnFlags::empty()).unwrap(); |
| 114 assert_eq!(tx.items().user().unwrap().unwrap(), "updated-in-process"); | 116 assert_eq!(tx.items().user().unwrap().unwrap(), "updated-in-process"); |
| 115 let result = tx.account_management(Flags::empty()); | 117 let result = tx.account_management(AuthnFlags::empty()); |
| 116 assert_eq!(result, Err(ErrorCode::NewAuthTokRequired)); | 118 assert_eq!(result, Err(ErrorCode::NewAuthTokRequired)); |
| 117 harness.changing_password.set(true); | 119 harness.changing_password.set(true); |
| 118 let change = tx.change_authtok(Flags::CHANGE_EXPIRED_AUTHTOK); | 120 let change = tx.change_authtok(AuthtokFlags::CHANGE_EXPIRED_AUTHTOK); |
| 119 assert_eq!(change, Err(ErrorCode::TryAgain)); | 121 assert_eq!(change, Err(ErrorCode::TryAgain)); |
| 120 tx.change_authtok(Flags::CHANGE_EXPIRED_AUTHTOK).unwrap(); | 122 tx.change_authtok(AuthtokFlags::CHANGE_EXPIRED_AUTHTOK) |
| 123 .unwrap(); | |
| 121 } | 124 } |
