Files
hi-server/internal/logic/admin/user/session_test.go
2026-06-16 06:28:47 -07:00

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)
}
}