mod common;
use milter::*;
use std::sync::atomic::{AtomicUsize, Ordering};
#[test]
fn callback_panic() {
let test_name = common::test_name(file!());
let miltertest = common::spawn_miltertest_runner(file!());
match Milter::new("inet:3335@localhost")
.name(test_name.to_str().unwrap())
.on_mail(mail_callback)
.run()
{
Err(Error::CallbackPanic) => (),
_ => panic!("expected panic did not occur"),
}
let exit_code = miltertest.join().expect("panic in miltertest runner");
assert!(exit_code.success(), "miltertest returned error exit code");
}
static MAIL_COUNT: AtomicUsize = AtomicUsize::new(1);
#[on_mail(mail_callback)]
fn handle_mail(_: Context<()>, smtp_args: Vec<&str>) -> Status {
match MAIL_COUNT.fetch_add(1, Ordering::Relaxed) {
1 => assert_eq!(smtp_args[0], "from1@example.com"),
2 => panic!("panic expected"),
_ => unreachable!(),
}
Status::Continue
}