oauth_redis_fallback_test.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. //go:build unit
  2. package xai
  3. import (
  4. "context"
  5. "testing"
  6. "time"
  7. "github.com/alicebob/miniredis/v2"
  8. "github.com/redis/go-redis/v9"
  9. "github.com/stretchr/testify/require"
  10. )
  11. func TestSessionStoreRedisFallbackIsLimitedToFailedWrites(t *testing.T) {
  12. mr := miniredis.RunT(t)
  13. client := redis.NewClient(&redis.Options{Addr: mr.Addr(), MaxRetries: -1})
  14. t.Cleanup(func() { _ = client.Close() })
  15. store := NewRedisSessionStore(client)
  16. defer store.Stop()
  17. session := func(state string) *OAuthSession { return &OAuthSession{State: state, CreatedAt: time.Now()} }
  18. store.Set("remote", session("remote"))
  19. require.NoError(t, store.remote.Delete(context.Background(), "remote"))
  20. _, ok := store.Get("remote")
  21. require.False(t, ok, "a remote miss must not revive the stale local copy")
  22. mr.Close()
  23. store.Set("local-only", session("local"))
  24. got, ok := store.Get("local-only")
  25. require.True(t, ok)
  26. require.Equal(t, "local", got.State)
  27. require.True(t, store.TryConsumeSession("local-only"))
  28. require.False(t, store.TryConsumeSession("local-only"))
  29. }