socket_server_mocker/
lib.rs

1#![doc = include_str!("../README.md")]
2
3//! # socket-server-mocker
4//!
5//! `socket-server-mocker` is a library to mock a socket server.
6//! It can be used to test a code that uses network socket to connect to a server.
7//!
8//! ## Example
9//! Mock an HTTP server:
10//! ```rust
11//! use std::str::from_utf8;
12//! use socket_server_mocker::ServerMocker;
13//! use socket_server_mocker::Instruction::{ReceiveMessage, SendMessage, StopExchange};
14//!
15//! // Mock HTTP server on a random free port
16//! let server = ServerMocker::tcp().unwrap();
17//!
18//! server.add_mock_instructions(vec![
19//!   // Wait for an HTTP GET request
20//!   ReceiveMessage,
21//!   // Send an HTTP response
22//!   SendMessage(b"HTTP/1.1 200 OK\r\nServer: socket-server-mocker-fake-http\r\nContent-Length: 12\r\nConnection: close\r\nContent-Type: text/plain\r\n\r\nHello, world".to_vec()),
23//!   // Close the connection
24//!   StopExchange,
25//! ]).unwrap();
26//!
27//! // New reqwest blocking client
28//! let client = reqwest::blocking::Client::new();
29//! // Send an HTTP GET request to the mocked server
30//! let response = client
31//!   .get(format!("http://localhost:{}/", server.port()))
32//!   .send()
33//!   .unwrap();
34//!
35//! // Check response status code
36//! assert!(response.status().is_success());
37//!
38//! // Check response body
39//! assert_eq!(response.text().unwrap(), "Hello, world");
40//! // Check HTTP request received by the mocked server
41//! assert_eq!(
42//!   format!(
43//!     "GET / HTTP/1.1\r\naccept: */*\r\nhost: localhost:{}\r\n\r\n",
44//!     server.port()
45//!     ),
46//!     from_utf8(&*server.pop_received_message().unwrap()).unwrap()
47//!   );
48//!
49//! // Check that no error has been raised by the mocked server
50//! assert!(server.pop_server_error().is_none());
51//! ```
52
53mod errors;
54mod instructions;
55mod server_mocker;
56mod tcp_server;
57mod udp_server;
58
59pub use errors::ServerMockerError;
60pub use instructions::Instruction;
61pub use server_mocker::ServerMocker;
62pub use tcp_server::TcpMocker;
63pub use udp_server::UdpMocker;