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;