store_test.go 981 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //go:build unit
  2. package redissession
  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 TestStoreRoundTripAndSingleUse(t *testing.T) {
  12. mr := miniredis.RunT(t)
  13. rdb := redis.NewClient(&redis.Options{Addr: mr.Addr()})
  14. t.Cleanup(func() { _ = rdb.Close() })
  15. store := New(rdb, "oauth:test", time.Minute)
  16. ctx := context.Background()
  17. require.NoError(t, store.Set(ctx, "sid", map[string]string{"state": "state"}))
  18. var got map[string]string
  19. ok, err := store.Get(ctx, "sid", &got)
  20. require.NoError(t, err)
  21. require.True(t, ok)
  22. require.Equal(t, "state", got["state"])
  23. ok, err = store.TryConsume(ctx, "sid")
  24. require.NoError(t, err)
  25. require.True(t, ok)
  26. ok, err = store.TryConsume(ctx, "sid")
  27. require.NoError(t, err)
  28. require.False(t, ok)
  29. require.NoError(t, store.Delete(ctx, "sid"))
  30. ok, err = store.Get(ctx, "sid", &got)
  31. require.NoError(t, err)
  32. require.False(t, ok)
  33. }