1 unstable release

0.0.5 Feb 24, 2022

#13 in #tower-layer

Download history 53/week @ 2024-11-15 39/week @ 2024-11-22 57/week @ 2024-11-29 61/week @ 2024-12-06 54/week @ 2024-12-13 22/week @ 2024-12-20 22/week @ 2024-12-27 50/week @ 2025-01-03 80/week @ 2025-01-10 105/week @ 2025-01-17 31/week @ 2025-01-24 123/week @ 2025-01-31 46/week @ 2025-02-07 67/week @ 2025-02-14 72/week @ 2025-02-21 122/week @ 2025-02-28

331 downloads per month

MIT license

21KB
334 lines

tower-fault Latest Version

tower-fault is a library for injecting various faults into a tower::Service.

Layers

You can use the following layers to inject faults into a service:

  • ErrorLayer - randomly inject errors into a service.
  • LatencyLayer - randomly add latency into a service.

Example usage

use tower_fault::{
    error::ErrorLayer,
    latency::LatencyLayer,
};
use tower::{service_fn, ServiceBuilder};

struct MyRequest {
    value: u64
}

async fn my_service(req: MyRequest) -> Result<(), String> {
    Ok(())
}

// LatencyLayer with a 10% probability of injecting 200 to 500 milliseconds
// of latency.
let latency_layer = LatencyLayer::new(0.1, 200..500);

// ErrorLayer that injects an error if the request value is greater than 10.
let error_layer = ErrorLayer::new(|req: &MyRequest| req.value > 10, |_: &MyRequest| String::from("error"));

let service = ServiceBuilder::new()
    .layer(latency_layer)
    .service(service_fn(my_service));

Dependencies

~1.4–7.5MB
~60K SLoC