Resilience & Testing (resilience, testing)
Import paths:
github.com/krewire/krewire/packages/resiliencegithub.com/krewire/krewire/packages/testing
Distributed systems and web applications fail over network boundaries. Krewire provides built-in resilience primitives to isolate failures and a testing library that links test suites directly to formal specifications.
1. Resilience Patterns (packages/resilience)
Retry Policies with Jittered Backoff
package main
import (
"context"
"time"
"github.com/krewire/krewire/packages/resilience"
)
func main() {
policy := resilience.RetryPolicy{
MaxAttempts: 3,
InitialBackoff: 200 * time.Millisecond,
MaxBackoff: 2 * time.Second,
Jitter: true,
}
err := policy.Do(context.Background(), func(ctx context.Context) error {
// Call unreliable third-party payment API
return callPaymentGateway()
})
}
Circuit Breakers
Prevent cascading service outages by tripping open when an upstream dependency fails repeatedly:
cb := resilience.NewCircuitBreaker(resilience.CircuitBreakerConfig{
FailureThreshold: 5,
ResetTimeout: 10 * time.Second,
})
err := cb.Execute(func() error {
return queryMicroservice()
})
2. Spec-Driven Testing (packages/testing)
Krewire mandates Spec-Driven Testing across all repositories. Every non-trivial capability is governed by a specification with numbered requirement IDs, cited directly in test cases:
package payment_test
import (
"testing"
"github.com/krewire/krewire/packages/testing/assert"
)
// Tests for KWL-PAY-X92KA
// Spec: KWL-PAY-X92KA REQ-001 Scope: PAYMENT
func TestPayment_ChargesCardWithIdempotency(t *testing.T) {
charge, err := ProcessCharge("ch_123", 5000)
assert.NoError(t, err)
assert.Equal(t, "succeeded", charge.Status)
}
This discipline ensures that test coverage maps 1:1 to written requirements and prevents specification drift across software releases.