Ctrl K
ComunidadGuías…

internal/responsecache/readiness_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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)
	})
}