cloudemu

Error Injection

Simulate cloud failures deterministically

Error Injection

Simulate various failure modes to test your error handling and resilience.

Setup

import "github.com/stackshy/cloudemu/inject"

inj := inject.NewInjector()

bucket := storage.NewBucket(aws.S3,
    storage.WithErrorInjection(inj),
)

Failure Policies

Always Fail

inj.SetPolicy("storage", "PutObject", inject.AlwaysFail(
    cerrors.New(cerrors.Unavailable, "service unavailable"),
))

Every Nth Call

// Fail every 3rd call
inj.SetPolicy("storage", "PutObject", inject.EveryN(3,
    cerrors.New(cerrors.Internal, "intermittent failure"),
))

Probabilistic

// 10% chance of failure
inj.SetPolicy("storage", "PutObject", inject.Probabilistic(0.1,
    cerrors.New(cerrors.Internal, "random failure"),
))

First N Calls

// First 2 calls fail, rest succeed
inj.SetPolicy("storage", "PutObject", inject.FirstN(2,
    cerrors.New(cerrors.Unavailable, "warming up"),
))

Clear Policies

inj.ClearPolicy("storage", "PutObject")
inj.ClearAll()

Use Cases

  • Test retry logic with intermittent failures
  • Verify timeout handling when services are unavailable
  • Simulate cold start failures
  • Test circuit breaker patterns

On this page