53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
|
|
package auth
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"testing"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/alicebob/miniredis/v2"
|
||
|
|
goredis "github.com/redis/go-redis/v9"
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestSessionStoreRotateRefreshSuccess(t *testing.T) {
|
||
|
|
mr := miniredis.RunT(t)
|
||
|
|
client := goredis.NewClient(&goredis.Options{Addr: mr.Addr()})
|
||
|
|
t.Cleanup(func() { _ = client.Close() })
|
||
|
|
|
||
|
|
store := NewSessionStore(client)
|
||
|
|
ctx := context.Background()
|
||
|
|
|
||
|
|
require.NoError(t, store.SaveRefresh(ctx, "old-jti", "old-hash", time.Minute))
|
||
|
|
require.NoError(t, store.RotateRefresh(ctx, "old-jti", "old-hash", "new-jti", "new-hash", 2*time.Minute))
|
||
|
|
|
||
|
|
_, err := store.GetRefresh(ctx, "old-jti")
|
||
|
|
assert.Error(t, err)
|
||
|
|
|
||
|
|
value, err := store.GetRefresh(ctx, "new-jti")
|
||
|
|
require.NoError(t, err)
|
||
|
|
assert.Equal(t, "new-hash", value)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestSessionStoreRotateRefreshRejectsMismatch(t *testing.T) {
|
||
|
|
mr := miniredis.RunT(t)
|
||
|
|
client := goredis.NewClient(&goredis.Options{Addr: mr.Addr()})
|
||
|
|
t.Cleanup(func() { _ = client.Close() })
|
||
|
|
|
||
|
|
store := NewSessionStore(client)
|
||
|
|
ctx := context.Background()
|
||
|
|
|
||
|
|
require.NoError(t, store.SaveRefresh(ctx, "old-jti", "old-hash", time.Minute))
|
||
|
|
|
||
|
|
err := store.RotateRefresh(ctx, "old-jti", "wrong-hash", "new-jti", "new-hash", 2*time.Minute)
|
||
|
|
require.ErrorIs(t, err, ErrRefreshTokenMismatch)
|
||
|
|
|
||
|
|
value, getErr := store.GetRefresh(ctx, "old-jti")
|
||
|
|
require.NoError(t, getErr)
|
||
|
|
assert.Equal(t, "old-hash", value)
|
||
|
|
|
||
|
|
_, getErr = store.GetRefresh(ctx, "new-jti")
|
||
|
|
assert.Error(t, getErr)
|
||
|
|
}
|