cookie_test.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package state
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/stretchr/testify/assert"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestHMACCookieBaker_IssueCrackTTL(t *testing.T) {
  9. tests := []struct {
  10. name string
  11. ttl time.Duration
  12. wantErr string
  13. }{
  14. {
  15. name: "default TTL",
  16. ttl: DefaultCookieTTL,
  17. },
  18. {
  19. name: "year-long TTL",
  20. ttl: 365 * 24 * time.Hour,
  21. },
  22. {
  23. name: "already expired",
  24. ttl: -time.Second,
  25. wantErr: "HMAC cookie expired",
  26. },
  27. }
  28. for _, tc := range tests {
  29. t.Run(tc.name, func(t *testing.T) {
  30. baker, err := NewHMACCookieBaker()
  31. require.NoError(t, err)
  32. cookie, err := baker.Issue([]byte("the-payload"), tc.ttl)
  33. require.NoError(t, err)
  34. assert.Len(t, cookie, authCookieLen)
  35. payload, expiry, err := baker.Crack(cookie)
  36. if tc.wantErr != "" {
  37. assert.ErrorContains(t, err, tc.wantErr)
  38. return
  39. }
  40. require.NoError(t, err)
  41. assert.Equal(t, []byte("the-payload"), payload)
  42. // second-granularity in the wire format, so allow a second of slop
  43. assert.WithinDuration(t, time.Now().Add(tc.ttl), expiry, time.Second)
  44. })
  45. }
  46. }