Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-resilience

Resilience pipelines for Pudu: retry, circuit breaker, timeout, fallback, hedging, rate limiting, and chaos injection

0.1.0Apache-2.01

InstallClose

PuduLangResilienceTest.pudu

Pudu43 lines2.5 KB

GitHub ↗
1/** @Test.Root.Suite — outcome helpers and failure descriptions */2module PuduLangResilienceTest34import Std.Io as Io5import Std.Test as Test6import PuduLangResilience as Resilience78/// Runs the suite.9fn main() -> Int {10  let failures: Array[Resilience.Failure[Str]] = [11    Resilience.Raised("disk"), Resilience.TimedOut(30), Resilience.BrokenCircuit(5), Resilience.IsolatedCircuit,12    Resilience.RateLimited(Some(9)), Resilience.RateLimited(None), Resilience.Cancelled("stop"), Resilience.Crashed("boom")13  ]14  let succeeded: Resilience.Outcome[Int, Str] = Resilience.succeed(4)15  let lost: Resilience.Outcome[Int, Str] = Resilience.raise("x")16  let checks = Test.suite("Resilience", &[17      Test.equals("succeed holds the value", &succeeded, &Ok(4)),18      Test.equals("raise holds the callback's error", &Resilience.raise("bad"), &Err(Resilience.Raised("bad"))),19      Test.equals("lift keeps a value", &Resilience.lift(Ok(2)), &Ok(2)),20      Test.equals("lift raises an error", &Resilience.lift(Err("e")), &Err(Resilience.Raised("e"))),21      Test.equals("raised answers only the callback's error", &failures.map(|found: Resilience.Failure[Str]| Resilience.raised(&found)), &[Some("disk"), None, None, None, None, None, None, None]),22      Test.equals("only cancellation is a cancellation", &failures.map(|found: Resilience.Failure[Str]| Resilience.isCancellation(&found)), &[false, false, false, false, false, false, true, false]),23      Test.equals("rejections are the strategies' refusals", &failures.map(|found: Resilience.Failure[Str]| Resilience.isRejection(&found)), &[false, true, true, true, true, true, false, false]),24      Test.equals("every failure is described", &failures.map(|found: Resilience.Failure[Str]| Resilience.describe(&found)), &[25          "The operation failed: \"disk\"",26          "The operation did not complete within 30 ms.",27          "The circuit is open; it may be tried again in 5 ms.",28          "The circuit is isolated and admits no execution.",29          "The rate limiter rejected the execution; retry after 9 ms.",30          "The rate limiter rejected the execution.",31          "The operation was cancelled: stop",32          "The operation stopped its thread: boom"33        ]),34      Test.equals("a value is summarized", &Resilience.summarize(&succeeded), &"Ok(4)"),35      Test.equals("a failure is summarized by its description", &Resilience.summarize(&lost), &"The operation failed: \"x\"")36    ])37  let ran = Test.run(&checks)38  for failure in Test.failuresOf(&ran) {39    let _reported = Io.writeErrorLine(failure)40  }41  Test.report(&ran)42}43