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 } |