security_policy_session_store_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package repository
  2. import (
  3. "context"
  4. "testing"
  5. "time"
  6. "github.com/alicebob/miniredis/v2"
  7. "github.com/redis/go-redis/v9"
  8. "github.com/stretchr/testify/require"
  9. )
  10. func newSecurityPolicySessionStoreTest(t *testing.T) *securityPolicySessionStore {
  11. t.Helper()
  12. mr, err := miniredis.Run()
  13. require.NoError(t, err)
  14. t.Cleanup(mr.Close)
  15. return &securityPolicySessionStore{rdb: redis.NewClient(&redis.Options{Addr: mr.Addr()})}
  16. }
  17. func TestSecurityPolicySessionStoreRoundTrip(t *testing.T) {
  18. ctx := context.Background()
  19. store := newSecurityPolicySessionStoreTest(t)
  20. scope := "secpol:scope:9:11"
  21. found, err := store.FindBlockedSessionField(ctx, scope, []string{"k:aaa"})
  22. require.NoError(t, err)
  23. require.Empty(t, found)
  24. require.NoError(t, store.MarkSessionBlocked(ctx, scope, []string{"k:aaa", "k:bbb"}, time.Hour))
  25. found, err = store.FindBlockedSessionField(ctx, scope, []string{"k:zzz", "k:bbb"})
  26. require.NoError(t, err)
  27. require.Equal(t, "k:bbb", found)
  28. unblocked, err := store.UnblockSessionScope(ctx, scope)
  29. require.NoError(t, err)
  30. require.True(t, unblocked)
  31. found, err = store.FindBlockedSessionField(ctx, scope, []string{"k:aaa"})
  32. require.NoError(t, err)
  33. require.Empty(t, found)
  34. unblocked, err = store.UnblockSessionScope(ctx, scope)
  35. require.NoError(t, err)
  36. require.False(t, unblocked)
  37. }
  38. func TestSecurityPolicySessionStoreNilSafe(t *testing.T) {
  39. ctx := context.Background()
  40. var store *securityPolicySessionStore
  41. require.NoError(t, store.MarkSessionBlocked(ctx, "s", []string{"k"}, time.Hour))
  42. found, err := store.FindBlockedSessionField(ctx, "s", []string{"k"})
  43. require.NoError(t, err)
  44. require.Empty(t, found)
  45. unblocked, err := store.UnblockSessionScope(ctx, "s")
  46. require.NoError(t, err)
  47. require.False(t, unblocked)
  48. }