45 lines
990 B
Go
45 lines
990 B
Go
package sessions_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"git.tavo.one/tavo/axiom/sessions"
|
|
)
|
|
|
|
type DummyData struct {
|
|
UserID string
|
|
}
|
|
|
|
func TestMaxSessionLimit(t *testing.T) {
|
|
const max = 10
|
|
|
|
store := sessions.NewStore[DummyData](24, max)
|
|
|
|
// Try creating maxSessions
|
|
for i := 0; i < max; i++ {
|
|
_, _, err := store.New(30*time.Minute, DummyData{UserID: "user"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error on session %d: %v", i, err)
|
|
}
|
|
}
|
|
|
|
// Now create one more, which should fail
|
|
_, _, err := store.New(30*time.Minute, DummyData{UserID: "extra"})
|
|
if err == nil {
|
|
t.Fatal("expected error when exceeding max sessions, but got nil")
|
|
}
|
|
}
|
|
|
|
func BenchmarkSessionCreation(b *testing.B) {
|
|
const maxSessions = 1_000_000
|
|
store := sessions.NewStore[DummyData](24, maxSessions)
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
_, _, err := store.New(10*time.Minute, DummyData{UserID: "u"})
|
|
if err != nil {
|
|
b.Fatalf("failed to create session at iteration %d: %v", i, err)
|
|
}
|
|
}
|
|
}
|