diff --git a/tests/transport_smtp_pool.rs b/tests/transport_smtp_pool.rs new file mode 100644 index 0000000..65c1340 --- /dev/null +++ b/tests/transport_smtp_pool.rs @@ -0,0 +1,61 @@ +#[cfg(all(test, feature = "smtp-transport", feature = "r2d2"))] +mod test { + use lettre::{Envelope, SmtpTransport, Tls, Transport}; + use r2d2::Pool; + use std::{sync::mpsc, thread}; + + fn envelope() -> Envelope { + Envelope::new( + Some("user@localhost".parse().unwrap()), + vec!["root@localhost".parse().unwrap()], + ) + .unwrap() + } + + #[test] + fn send_one() { + let client = SmtpTransport::new("127.0.0.1").port(2525); + let c = client.clone(); + let pool = Pool::builder().max_size(1).build(c).unwrap(); + let mailer = client.pool(pool); + + let result = mailer.send_raw(&envelope(), b"test"); + assert!(result.is_ok()); + } + + #[test] + fn send_from_thread() { + let client = SmtpTransport::new("127.0.0.1").port(2525); + let c = client.clone(); + let pool = Pool::builder().max_size(1).build(c).unwrap(); + let mailer = client.pool(pool); + + let (s1, r1) = mpsc::channel(); + let (s2, r2) = mpsc::channel(); + + let mailer1 = mailer.clone(); + let t1 = thread::spawn(move || { + s1.send(()).unwrap(); + r2.recv().unwrap(); + mailer1 + .send_raw(&envelope(), b"test1") + .expect("Send failed from thread 1"); + }); + + let mailer2 = mailer.clone(); + let t2 = thread::spawn(move || { + s2.send(()).unwrap(); + r1.recv().unwrap(); + mailer2 + .send_raw(&envelope(), b"test2") + .expect("Send failed from thread 2"); + }); + + t1.join().unwrap(); + t2.join().unwrap(); + + mailer + .send_raw(&envelope(), b"test") + .expect("Send failed from main thread"); + } +}