From eda7fc15017e7b13fb36c476d5886d14c78d6708 Mon Sep 17 00:00:00 2001 From: Alexis Mousset Date: Thu, 19 Sep 2019 02:12:33 +0200 Subject: [PATCH] feat(transport): Use criterion for benchmarks --- lettre/Cargo.toml | 7 ++- lettre/benches/transport_smtp.rs | 75 +++++++++++++++++--------------- 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/lettre/Cargo.toml b/lettre/Cargo.toml index a242229..aa6ffa7 100644 --- a/lettre/Cargo.toml +++ b/lettre/Cargo.toml @@ -34,7 +34,12 @@ r2d2 = { version = "^0.8", optional = true} [dev-dependencies] env_logger = "^0.6" -glob = "0.3" +glob = "^0.3" +criterion = "^0.3" + +[[bench]] +name = "transport_smtp" +harness = false [features] default = ["file-transport", "smtp-transport", "sendmail-transport"] diff --git a/lettre/benches/transport_smtp.rs b/lettre/benches/transport_smtp.rs index f535a5e..98470c3 100644 --- a/lettre/benches/transport_smtp.rs +++ b/lettre/benches/transport_smtp.rs @@ -1,49 +1,52 @@ -#![feature(test)] +use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use lettre::{ + smtp::ConnectionReuseParameters, ClientSecurity, EmailAddress, Envelope, SendableEmail, + SmtpClient, Transport, +}; -extern crate test; - -use lettre::smtp::ConnectionReuseParameters; -use lettre::{ClientSecurity, Envelope, SmtpClient}; -use lettre::{EmailAddress, SendableEmail, Transport}; - -#[bench] -fn bench_simple_send(b: &mut test::Bencher) { +fn bench_simple_send(c: &mut Criterion) { let mut sender = SmtpClient::new("127.0.0.1:2525", ClientSecurity::None) .unwrap() .transport(); - b.iter(|| { - let email = SendableEmail::new( - Envelope::new( - Some(EmailAddress::new("user@localhost".to_string()).unwrap()), - vec![EmailAddress::new("root@localhost".to_string()).unwrap()], - ) - .unwrap(), - "id".to_string(), - "Hello ß☺ example".to_string().into_bytes(), - ); - let result = sender.send(email); - assert!(result.is_ok()); + + c.bench_function("send email", move |b| { + b.iter(|| { + let email = SendableEmail::new( + Envelope::new( + Some(EmailAddress::new("user@localhost".to_string()).unwrap()), + vec![EmailAddress::new("root@localhost".to_string()).unwrap()], + ) + .unwrap(), + "id".to_string(), + "Hello ß☺ example".to_string().into_bytes(), + ); + let result = black_box(sender.send(email)); + assert!(result.is_ok()); + }) }); } -#[bench] -fn bench_reuse_send(b: &mut test::Bencher) { +fn bench_reuse_send(c: &mut Criterion) { let mut sender = SmtpClient::new("127.0.0.1:2525", ClientSecurity::None) .unwrap() .connection_reuse(ConnectionReuseParameters::ReuseUnlimited) .transport(); - b.iter(|| { - let email = SendableEmail::new( - Envelope::new( - Some(EmailAddress::new("user@localhost".to_string()).unwrap()), - vec![EmailAddress::new("root@localhost".to_string()).unwrap()], - ) - .unwrap(), - "id".to_string(), - "Hello ß☺ example".to_string().into_bytes(), - ); - let result = sender.send(email); - assert!(result.is_ok()); + c.bench_function("send email with connection reuse", move |b| { + b.iter(|| { + let email = SendableEmail::new( + Envelope::new( + Some(EmailAddress::new("user@localhost".to_string()).unwrap()), + vec![EmailAddress::new("root@localhost".to_string()).unwrap()], + ) + .unwrap(), + "id".to_string(), + "Hello ß☺ example".to_string().into_bytes(), + ); + let result = black_box(sender.send(email)); + assert!(result.is_ok()); + }) }); - sender.close() } + +criterion_group!(benches, bench_simple_send, bench_reuse_send); +criterion_main!(benches);