Skip to content
cloudemu
Features

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)

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

On this page

On this page