1pub mod optimizers;
10
11pub use optimizers::{ConnectionOptimizer, NetworkOptimizer, TcpOptimizer, TlsOptimizer};
13
14#[cfg(test)]
15mod tests {
16 use super::*;
17 use crate::constants::socket::{HIGH_THROUGHPUT_RECV_BUFFER, HIGH_THROUGHPUT_SEND_BUFFER};
18 use tokio::net::TcpStream;
19
20 #[test]
21 fn test_constants() {
22 assert_eq!(HIGH_THROUGHPUT_RECV_BUFFER, 16 * 1024 * 1024);
23 assert_eq!(HIGH_THROUGHPUT_SEND_BUFFER, 16 * 1024 * 1024);
24 }
25
26 #[test]
27 fn test_buffer_size_is_reasonable() {
28 const _: () = assert!(HIGH_THROUGHPUT_RECV_BUFFER >= 1024 * 1024); const _: () = assert!(HIGH_THROUGHPUT_RECV_BUFFER <= 128 * 1024 * 1024); const _: () = assert!(HIGH_THROUGHPUT_SEND_BUFFER >= 1024 * 1024);
32 const _: () = assert!(HIGH_THROUGHPUT_SEND_BUFFER <= 128 * 1024 * 1024);
33 }
34
35 #[test]
36 fn test_buffer_sizes_are_equal() {
37 assert_eq!(HIGH_THROUGHPUT_RECV_BUFFER, HIGH_THROUGHPUT_SEND_BUFFER);
38 }
39
40 #[test]
41 fn test_buffer_sizes_are_power_of_two_or_multiple() {
42 let size = HIGH_THROUGHPUT_RECV_BUFFER;
43 assert_eq!(size % (1024 * 1024), 0);
44 }
45
46 #[tokio::test]
47 async fn test_connection_optimizer() {
48 use crate::stream::ConnectionStream;
49
50 let listener = std::net::TcpListener::bind("127.0.0.1:0").unwrap();
51 let addr = listener.local_addr().unwrap();
52
53 let tcp_stream = std::net::TcpStream::connect(addr).unwrap();
54 tcp_stream.set_nonblocking(true).unwrap();
55 let tokio_stream = TcpStream::from_std(tcp_stream).unwrap();
56
57 let conn_stream = ConnectionStream::plain(tokio_stream);
58
59 let optimizer = ConnectionOptimizer::new(&conn_stream);
60 let result = optimizer.optimize();
61 assert!(result.is_ok());
62 }
63
64 #[test]
65 fn test_buffer_size_calculation() {
66 assert_eq!(HIGH_THROUGHPUT_RECV_BUFFER, 16 * 1024 * 1024);
67 assert_eq!(HIGH_THROUGHPUT_RECV_BUFFER, 16_777_216);
68 assert_eq!(HIGH_THROUGHPUT_RECV_BUFFER / 1024, 16384); assert_eq!(HIGH_THROUGHPUT_RECV_BUFFER / (1024 * 1024), 16); }
71
72 #[test]
73 fn test_buffer_size_for_large_articles() {
74 let typical_large_article = 10 * 1024 * 1024; let very_large_article = 100 * 1024 * 1024; assert!(HIGH_THROUGHPUT_RECV_BUFFER > typical_large_article);
77 assert!(HIGH_THROUGHPUT_RECV_BUFFER < very_large_article);
78 }
79}