77fa0cadd2
Co-authored-by: multica-agent <github@multica.ai>
75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
package user
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/alicebob/miniredis/v2"
|
|
"github.com/perfect-panel/server/internal/config"
|
|
"github.com/perfect-panel/server/internal/svc"
|
|
"github.com/redis/go-redis/v9"
|
|
)
|
|
|
|
func TestClearAllSessions(t *testing.T) {
|
|
redisServer, err := miniredis.Run()
|
|
if err != nil {
|
|
t.Fatalf("miniredis.Run() error = %v", err)
|
|
}
|
|
defer redisServer.Close()
|
|
|
|
rdb := redis.NewClient(&redis.Options{Addr: redisServer.Addr()})
|
|
defer rdb.Close()
|
|
|
|
svcCtx := &svc.ServiceContext{Redis: rdb}
|
|
ctx := context.Background()
|
|
|
|
userID := int64(42)
|
|
sessionID := "session-a"
|
|
otherSessionID := "session-b"
|
|
userSessionKey := config.SessionIdKey + ":" + sessionID
|
|
userDetailKey := config.SessionIdKey + ":detail:" + sessionID
|
|
otherSessionKey := config.SessionIdKey + ":" + otherSessionID
|
|
userSessionsZSet := config.UserSessionsKeyPrefix + "42"
|
|
deviceKey := config.DeviceCacheKeyKey + ":device-1"
|
|
unrelatedDeviceKey := config.DeviceCacheKeyKey + ":device-2"
|
|
|
|
setString(t, redisServer, userSessionKey, "42")
|
|
setString(t, redisServer, userDetailKey, "detail")
|
|
setString(t, redisServer, otherSessionKey, "99")
|
|
setString(t, redisServer, deviceKey, sessionID)
|
|
setString(t, redisServer, unrelatedDeviceKey, otherSessionID)
|
|
if _, err := redisServer.ZAdd(userSessionsZSet, 1, sessionID); err != nil {
|
|
t.Fatalf("seed session zset: %v", err)
|
|
}
|
|
|
|
if err := clearAllSessions(ctx, svcCtx, userID); err != nil {
|
|
t.Fatalf("clearAllSessions() error = %v", err)
|
|
}
|
|
|
|
assertMissing(t, redisServer, userSessionKey)
|
|
assertMissing(t, redisServer, userDetailKey)
|
|
assertMissing(t, redisServer, deviceKey)
|
|
assertMissing(t, redisServer, userSessionsZSet)
|
|
|
|
if !redisServer.Exists(otherSessionKey) {
|
|
t.Fatalf("unrelated session %q should remain", otherSessionKey)
|
|
}
|
|
if !redisServer.Exists(unrelatedDeviceKey) {
|
|
t.Fatalf("unrelated device mapping %q should remain", unrelatedDeviceKey)
|
|
}
|
|
}
|
|
|
|
func setString(t *testing.T, server *miniredis.Miniredis, key, value string) {
|
|
t.Helper()
|
|
if err := server.Set(key, value); err != nil {
|
|
t.Fatalf("set %q: %v", key, err)
|
|
}
|
|
}
|
|
|
|
func assertMissing(t *testing.T, server *miniredis.Miniredis, key string) {
|
|
t.Helper()
|
|
if server.Exists(key) {
|
|
t.Fatalf("expected key %q to be removed", key)
|
|
}
|
|
}
|