Error Injection
Simulate cloud failures deterministically
Inject failures — always, every Nth call, probabilistic, or first N — to test retries and error handling.
inject.NewNthCall(3)
Setup#
import "github.com/stackshy/cloudemu/v2/features/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