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 }