[−][src]Crate http_test_server
HTTP Test Server
Programatically create end-points that listen for connections and return pre-defined responses.
- Allows multiple endpoints and simultaneous client connections
- Resource builder for creating endpoints
- Streaming support
- Helper functions to retrieve data such as request count, number of connected clients and requests metadata
- Automatically allocates free port and close server after use
NOTE: This is not intended to work as a full featured server. For this reason many validations
and behaviours are not implemented. e.g: A request with Accept
header with not supported
Content-Type
won't trigger a 406 Not Acceptable
.
As this crate was devised to be used in tests, smart behaviours could be confusing and misleading.
Having said that, there are some default behaviours implemented:
- Server returns
404 Not Found
when requested resource was not configured. - Server returns
405 Method Not Allowed
when trying to reach resource with different method from those configured. - When a resource is created it responds to
GET
with200 Ok
by default.
Example:
Accept POST requests:
extern crate http_test_server; use http_test_server::{TestServer, Resource}; use http_test_server::http::{Status, Method}; let server = TestServer::new().unwrap(); let resource = server.create_resource("/some-endpoint/new"); resource .status(Status::Created) .method(Method::POST) .header("Content-Type", "application/json") .header("Cache-Control", "no-cache") .body("{ \"message\": \"this is a message\" }"); // request: POST /some-endpoint/new // HTTP/1.1 201 Created\r\n // Content-Type: application/json\r\n // Cache-Control: no-cache\r\n // \r\n // { "message": "this is a message" }
Expose a persistent stream:
let server = TestServer::new().unwrap(); let resource = server.create_resource("/sub"); resource .header("Content-Type", "text/event-stream") .header("Cache-Control", "no-cache") .stream() .body(": initial data"); // ... resource .send("some data") .send(" some extra data\n") .send_line("some extra data with line break") .close_open_connections(); // request: GET /sub // HTTP/1.1 200 Ok\r\n // Content-Type: text/event-stream\r\n // Cache-Control: no-cache\r\n // \r\n // : initial data // some data some extra data\n // some extra data with line break\n
Redirects:
let server = TestServer::new().unwrap(); let resource_redirect = server.create_resource("/original"); let resource_target = server.create_resource("/new"); resource_redirect .status(Status::SeeOther) .header("Location", "/new" ); resource_target.body("Hi!"); // request: GET /original // HTTP/1.1 303 See Other\r\n // Location: /new\r\n // \r\n
Re-exports
pub use resource::Resource; |
Modules
http | HTTP constants |
resource | Server resource builders |
Structs
Request | Request information |
TestServer | Controls the listener life cycle and creates new resources |