internal/responsecache/readiness_test.go
Rama main · réplica de lectura del repositorio original.
package responsecache
import (
"context"
"errors"
"testing"
"time"
"github.com/enterpilot/gomodel/internal/cache"
"github.com/stretchr/testify/assert"
)
// pingableStore is a cache.Store that also implements cache.Pinger.
type pingableStore struct {
*cache.MapStore
err error
}
func (p pingableStore) Ping(context.Context) error { return p.err }
func TestUsesRedisAndPing(t *testing.T) {
t.Run("nil middleware", func(t *testing.T) {
var m *ResponseCacheMiddleware
assert.False(t, m.UsesRedis())
err := m.Ping(context.Background())
assert.NoError(t, err)
})
t.Run("non-pinger store is not a readiness component", func(t *testing.T) {
m := NewResponseCacheMiddlewareWithStore(cache.NewMapStore(), time.Minute)
assert.False(t, m.UsesRedis())
err := m.Ping(context.Background())
assert.NoError(t, err)
})
t.Run("pinger store reachable", func(t *testing.T) {
m := NewResponseCacheMiddlewareWithStore(pingableStore{MapStore: cache.NewMapStore()}, time.Minute)
assert.True(t, m.UsesRedis())
err := m.Ping(context.Background())
assert.NoError(t, err)
})
t.Run("pinger store down", func(t *testing.T) {
want := errors.New("redis down")
m := NewResponseCacheMiddlewareWithStore(pingableStore{MapStore: cache.NewMapStore(), err: want}, time.Minute)
assert.True(t, m.UsesRedis())
err := m.Ping(context.Background())
assert.ErrorIs(t, err, want)
})
}