| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package state
- import (
- "testing"
- "time"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- )
- func TestHMACCookieBaker_IssueCrackTTL(t *testing.T) {
- tests := []struct {
- name string
- ttl time.Duration
- wantErr string
- }{
- {
- name: "default TTL",
- ttl: DefaultCookieTTL,
- },
- {
- name: "year-long TTL",
- ttl: 365 * 24 * time.Hour,
- },
- {
- name: "already expired",
- ttl: -time.Second,
- wantErr: "HMAC cookie expired",
- },
- }
- for _, tc := range tests {
- t.Run(tc.name, func(t *testing.T) {
- baker, err := NewHMACCookieBaker()
- require.NoError(t, err)
- cookie, err := baker.Issue([]byte("the-payload"), tc.ttl)
- require.NoError(t, err)
- assert.Len(t, cookie, authCookieLen)
- payload, expiry, err := baker.Crack(cookie)
- if tc.wantErr != "" {
- assert.ErrorContains(t, err, tc.wantErr)
- return
- }
- require.NoError(t, err)
- assert.Equal(t, []byte("the-payload"), payload)
- // second-granularity in the wire format, so allow a second of slop
- assert.WithinDuration(t, time.Now().Add(tc.ttl), expiry, time.Second)
- })
- }
- }
|