use vsmtp_config::DnsResolvers; use vsmtp_rule_engine::RuleEngine; use vsmtp_server::{socket_bind_anyhow, Server}; use vsmtp_test::config; fn get_mail(body_size: u64) -> lettre::Message { lettre::Message::builder() .from("NoBody ".parse().unwrap()) .reply_to("Yuin ".parse().unwrap()) .to("Hei ".parse().unwrap()) .subject("Happy new year") .body((0..body_size).map(|_| 'x').collect::()) .unwrap() } fn run_benchmark(body_size: u64, port: u16) { tokio::runtime::Builder::new_multi_thread() .worker_threads(16) .enable_all() .build() .unwrap() .block_on(async move { let server = tokio::spawn(async move { let config = config::local_test(); let (emitter, _working_rx, _delivery_rx) = vsmtp_server::scheduler::init(1, 1); let config = std::sync::Arc::new(config); let resolvers = std::sync::Arc::new(DnsResolvers::from_system_conf().unwrap()); let queue_manager = ::init( config.clone(), vec![], ) .unwrap(); let rule_engine = std::sync::Arc::new( RuleEngine::new(config.clone(), resolvers.clone(), queue_manager.clone()) .unwrap(), ); Server::new( config.clone(), rule_engine.clone(), queue_manager.clone(), emitter, ) .unwrap() .listen(( [format!("127.0.0.1:{port}")] .iter() .map(socket_bind_anyhow) .collect::>>() .unwrap(), vec![], vec![], )) .await .unwrap(); }); let client = tokio::spawn(async move { let sender = lettre::AsyncSmtpTransport::::builder_dangerous( "localhost".to_string(), ) .port(port) .build(); lettre::AsyncTransport::send(&sender, get_mail(body_size)).await }); tokio::select! { biased; server = server => { let mut file = std::fs::File::create("./tmp/server.txt").unwrap(); std::io::Write::write_all(&mut file, format!("{server:?}").as_bytes()).unwrap(); server.unwrap(); }, client = client => { let mut file = std::fs::File::create("./tmp/client.txt").unwrap(); std::io::Write::write_all(&mut file, format!("{client:?}").as_bytes()).unwrap(); client.unwrap().unwrap(); }, } }); } fn iai_receiver_1024() { run_benchmark(1024, 11025); } fn iai_receiver_1048576() { run_benchmark(1048576, 11026); } iai::main!(iai_receiver_1024, iai_receiver_1048576);