# mirror-server A simple server for mirroring HTTP requests for testing. It is optimized for working with REST API JSON calls, and catching headers. [![Build Status](https://ci.birch-tree.net/api/badges/dorian/mirror-server/status.svg)](https://ci.birch-tree.net/dorian/mirror-server) ## Getting Started * Use the latest stable version of Rust using rustup. * Build: `cargo build` * Test: `cargo test` * Run the server: `cargo run -- --port=8080` * Create a DEB package: * Install cargo-deb: `cargo install cargo-deb` * Create the DEB package: `cargo deb` * Faster builds using [`cargo-watch`](https://watchexec.github.io/#cargo-watch): `cargo watch -x run` * Installing the binary locally from source: `cargo install --path .` ## Install `mirror-server` is installable either by a local Cargo install or a Debian package. Additionally `mirror-server` can be run as a Docker container using the latest (or tagged) release. ### Docker Image Run via Docker using: ```console $ docker run -p 8080:8080 code.birch-tree.net/dorian/mirror-server:latest ``` ### Debian Package Download the DEB file, and install it: ```bash VERSION=0.3.0 REPO_URL=https://code.birch-tree.net/api/packages/dorian/generic/mirror-server/ curl "${REPO_URL}/${VERSION}/mirror-server_${VERSION}_amd64.deb" sudo dpkg -i "mirror-server-${VERSION}_amd64.deb" ``` Afterward you can run using `mirror-server` ## Usage You can get all the options that `mirror-server` supports by running it with the help option `--help` or `-h`: ```console $ mirror-server --help A simple server for mirror HTTP requests for testing. Usage: mirror-server [OPTIONS] Options: -p, --port Port to run on [default: 8080] -i, --ips Listen to IP mask [default: 0.0.0.0] -h, --help Print help -V, --version Print version ``` After starting the server, you can send requests to it. Using `curl` you can send `mirror-server` JSON requests: ```console $ curl -s -X PUT -D '{"hello": "world"}' -H 'Content-Type: application/json' \ http://localhost:8080/api/testing | jq . ``` And `mirror-server` responds to requests with JSON responses: ```json { "method": "PUT", "path": "/api/testing", "host": "localhost:8180", "headers": { "accept": "*/*", "content-length": "18", "content-type": "application/json", "host": "localhost:8080", "user-agent": "curl/7.68.0" }, "body": { "hello": "world" } } ```