comparison src/libpam/answer.rs @ 79:2128123b9406

Format (oops!) and make some fun and/or stupid conversions available.
author Paul Fisher <paul@pfish.zone>
date Sun, 08 Jun 2025 04:21:58 -0400
parents 002adfb98c5c
children 5aa1a010f1e8
comparison
equal deleted inserted replaced
78:002adfb98c5c 79:2128123b9406
230 #[cfg(test)] 230 #[cfg(test)]
231 mod tests { 231 mod tests {
232 use super::{Answer, Answers, BinaryAnswer, TextAnswer}; 232 use super::{Answer, Answers, BinaryAnswer, TextAnswer};
233 use crate::conv::{BinaryQAndA, ErrorMsg, InfoMsg, MaskedQAndA, QAndA, RadioQAndA}; 233 use crate::conv::{BinaryQAndA, ErrorMsg, InfoMsg, MaskedQAndA, QAndA, RadioQAndA};
234 use crate::libpam::conversation::OwnedMessage; 234 use crate::libpam::conversation::OwnedMessage;
235 use crate::libpam::memory;
235 use crate::BinaryData; 236 use crate::BinaryData;
236 use crate::libpam::memory;
237 237
238 #[test] 238 #[test]
239 fn test_round_trip() { 239 fn test_round_trip() {
240 let binary_msg = { 240 let binary_msg = {
241 let qa = BinaryQAndA::new((&[][..], 0)); 241 let qa = BinaryQAndA::new((&[][..], 0));
293 } 293 }
294 294
295 #[test] 295 #[test]
296 fn test_text_answer() { 296 fn test_text_answer() {
297 let answer_ptr: *mut Answer = memory::calloc(1); 297 let answer_ptr: *mut Answer = memory::calloc(1);
298 let answer = unsafe {&mut *answer_ptr}; 298 let answer = unsafe { &mut *answer_ptr };
299 TextAnswer::fill(answer, "hello").unwrap(); 299 TextAnswer::fill(answer, "hello").unwrap();
300 let zeroth_text = unsafe { TextAnswer::upcast(answer) }; 300 let zeroth_text = unsafe { TextAnswer::upcast(answer) };
301 let data = zeroth_text.contents().expect("valid"); 301 let data = zeroth_text.contents().expect("valid");
302 assert_eq!("hello", data); 302 assert_eq!("hello", data);
303 zeroth_text.free_contents(); 303 zeroth_text.free_contents();
308 308
309 #[test] 309 #[test]
310 fn test_binary_answer() { 310 fn test_binary_answer() {
311 let answer_ptr: *mut Answer = memory::calloc(1); 311 let answer_ptr: *mut Answer = memory::calloc(1);
312 let answer = unsafe { &mut *answer_ptr }; 312 let answer = unsafe { &mut *answer_ptr };
313 let real_data = BinaryData::new(vec![1, 2, 3, 4, 5, 6, 7, 8], 9); 313 let real_data = BinaryData::new([1, 2, 3, 4, 5, 6, 7, 8], 9);
314 BinaryAnswer::fill(answer, (&real_data).into()).expect("alloc should succeed"); 314 BinaryAnswer::fill(answer, (&real_data).into()).expect("alloc should succeed");
315 let bin_answer = unsafe { BinaryAnswer::upcast(answer) }; 315 let bin_answer = unsafe { BinaryAnswer::upcast(answer) };
316 assert_eq!(real_data, bin_answer.data().into()); 316 assert_eq!(real_data, bin_answer.data().into());
317 answer.free_contents(); 317 answer.free_contents();
318 answer.free_contents(); 318 answer.free_contents();
322 #[test] 322 #[test]
323 #[ignore] 323 #[ignore]
324 fn test_binary_answer_too_big() { 324 fn test_binary_answer_too_big() {
325 let big_data: Vec<u8> = vec![0xFFu8; 10_000_000_000]; 325 let big_data: Vec<u8> = vec![0xFFu8; 10_000_000_000];
326 let answer_ptr: *mut Answer = memory::calloc(1); 326 let answer_ptr: *mut Answer = memory::calloc(1);
327 let answer = unsafe {&mut*answer_ptr}; 327 let answer = unsafe { &mut *answer_ptr };
328 BinaryAnswer::fill(answer, (&big_data, 100)) 328 BinaryAnswer::fill(answer, (&big_data, 100)).expect_err("this is too big!");
329 .expect_err("this is too big!");
330 answer.free_contents(); 329 answer.free_contents();
331 unsafe { memory::free(answer) } 330 unsafe { memory::free(answer) }
332 } 331 }
333 } 332 }