Split integration tests

This commit is contained in:
Alexis Mousset
2015-10-25 12:52:56 +01:00
parent 9e30e7185e
commit 3c91c065d6
9 changed files with 108 additions and 83 deletions

View File

@@ -9,6 +9,7 @@ sudo: false
cache:
apt: true
pip: true
directories:
- target/debug/deps
- target/debug/build

View File

@@ -10,9 +10,9 @@ use lettre::email::EmailBuilder;
#[bench]
fn bench_simple_send(b: &mut test::Bencher) {
let sender = SmtpTransportBuilder::new("127.0.0.1:2525").unwrap().build();
let mut mailer = Mailer::new(sender);
b.iter(|| {
let sender = SmtpTransportBuilder::new("127.0.0.1:2525").unwrap().build();
let mut mailer = Mailer::new(sender);
let email = EmailBuilder::new()
.to("root@localhost")
.from("user@localhost")
@@ -22,13 +22,15 @@ fn bench_simple_send(b: &mut test::Bencher) {
.unwrap();
let result = mailer.send(email);
assert!(result.is_ok());
mailer.close()
});
}
#[bench]
fn bench_reuse_send(b: &mut test::Bencher) {
let sender = SmtpTransportBuilder::new("127.0.0.1:2525").unwrap().connection_reuse(true).build();
let sender = SmtpTransportBuilder::new("127.0.0.1:2525")
.unwrap()
.connection_reuse(true)
.build();
let mut mailer = Mailer::new(sender);
b.iter(|| {
let email = EmailBuilder::new()

View File

@@ -83,8 +83,3 @@ impl From<&'static str> for Error {
/// SMTP result type
pub type EmailResult = Result<Response, Error>;
#[cfg(test)]
mod test {
// TODO
}

View File

@@ -1,7 +1,8 @@
//! TODO
pub mod smtp;
pub mod stub;
pub mod error;
pub mod stub;
// pub mod file;
use transport::error::EmailResult;

View File

@@ -27,8 +27,8 @@ fn escape_dot(string: &str) -> String {
} else {
string.to_string()
}
.replace("\r.", "\r..")
.replace("\n.", "\n..")
.replace("\r.", "\r..")
.replace("\n.", "\n..")
}
/// Returns the string replacing all the CRLF with "\<CRLF\>"

View File

@@ -1,11 +1,12 @@
//! TODO
//! This transport is a stub that only logs the message, and always returns
//! succes
use transport::error::EmailResult;
use transport::smtp::response::Response;
use transport::EmailTransport;
use transport::smtp::response::{Code, Category, Severity};
/// TODO
/// This transport does nothing exept logging the message enveloppe
pub struct StubEmailTransport;
impl EmailTransport for StubEmailTransport {

View File

@@ -1,71 +1,4 @@
extern crate lettre;
use std::sync::{Arc, Mutex};
use std::thread;
use lettre::transport::smtp::SmtpTransportBuilder;
use lettre::transport::EmailTransport;
use lettre::mailer::Mailer;
use lettre::email::EmailBuilder;
#[test]
fn simple_sender() {
let sender = SmtpTransportBuilder::localhost().unwrap().build();
let mut mailer = Mailer::new(sender);
let email = EmailBuilder::new()
.to("root@localhost")
.from("user@localhost")
.body("Hello World!")
.subject("Hello")
.build()
.unwrap();
let result = mailer.send(email);
assert!(result.is_ok());
}
#[test]
fn multithreaded_sender() {
let sender = SmtpTransportBuilder::localhost()
.unwrap()
.hello_name("localhost")
.connection_reuse(true)
.build();
let mailer = Arc::new(Mutex::new(Mailer::new(sender)));
let mut threads = Vec::new();
for _ in 1..5 {
let th_mailer = mailer.clone();
threads.push(thread::spawn(move || {
let email = EmailBuilder::new()
.to("root@localhost")
.from("user@localhost")
.body("Hello World!")
.subject("Hello")
.build()
.unwrap();
let result = th_mailer.lock().unwrap().send(email);
assert!(result.is_ok());
}));
}
for thread in threads {
let _ = thread.join();
}
let email = EmailBuilder::new()
.to("root@localhost")
.from("user@localhost")
.body("Hello World!")
.subject("Hello Bis")
.build()
.unwrap();
let mut mailer = mailer.lock().unwrap();
let final_result = mailer.send(email);
mailer.close();
assert!(final_result.is_ok());
}
mod transport_smtp;
mod transport_stub;

71
tests/transport_smtp.rs Normal file
View File

@@ -0,0 +1,71 @@
extern crate lettre;
use std::sync::{Arc, Mutex};
use std::thread;
use lettre::transport::smtp::SmtpTransportBuilder;
use lettre::transport::EmailTransport;
use lettre::mailer::Mailer;
use lettre::email::EmailBuilder;
#[test]
fn simple_sender() {
let sender = SmtpTransportBuilder::localhost().unwrap().build();
let mut mailer = Mailer::new(sender);
let email = EmailBuilder::new()
.to("root@localhost")
.from("user@localhost")
.body("Hello World!")
.subject("Hello")
.build()
.unwrap();
let result = mailer.send(email);
assert!(result.is_ok());
}
#[test]
fn multithreaded_sender() {
let sender = SmtpTransportBuilder::localhost()
.unwrap()
.hello_name("localhost")
.connection_reuse(true)
.build();
let mailer = Arc::new(Mutex::new(Mailer::new(sender)));
let mut threads = Vec::new();
for _ in 1..5 {
let th_mailer = mailer.clone();
threads.push(thread::spawn(move || {
let email = EmailBuilder::new()
.to("root@localhost")
.from("user@localhost")
.body("Hello World!")
.subject("Hello")
.build()
.unwrap();
let result = th_mailer.lock().unwrap().send(email);
assert!(result.is_ok());
}));
}
for thread in threads {
let _ = thread.join();
}
let email = EmailBuilder::new()
.to("root@localhost")
.from("user@localhost")
.body("Hello World!")
.subject("Hello Bis")
.build()
.unwrap();
let mut mailer = mailer.lock().unwrap();
let final_result = mailer.send(email);
mailer.close();
assert!(final_result.is_ok());
}

21
tests/transport_stub.rs Normal file
View File

@@ -0,0 +1,21 @@
extern crate lettre;
use lettre::transport::stub::StubEmailTransport;
use lettre::transport::EmailTransport;
use lettre::mailer::Mailer;
use lettre::email::EmailBuilder;
#[test]
fn stub_transport() {
let sender = StubEmailTransport;
let mut mailer = Mailer::new(sender);
let email = EmailBuilder::new()
.to("root@localhost")
.from("user@localhost")
.body("Hello World!")
.subject("Hello")
.build()
.unwrap();
let result = mailer.send(email);
assert!(result.is_ok());
}