Files
opsxdb/server/internal/db/redis_mode_test.go
logan 2c0bfafd8d 同步完整源码至远程:扁平化重构现状 + 未入库源文件
- 补入库:server/internal/db/dump.go、redis 分页/扫描预算测试、opsxdb-mcp main_test、
  packages/opsxdb-mcp package-lock、docs 审计与对比文档等 37 个新文件
- 含结构扁平化进行中的 80 处修改与 155 处旧结构删除(server/ src/ src-tauri/ 为当前有效源)
- 构建产物(bin/target/dist)与签名私钥仍按规则排除
2026-10-16 03:47:33 +08:00

60 lines
1.9 KiB
Go

package db
import (
"errors"
"strings"
"testing"
"time"
)
func TestParseRedisAddrs(t *testing.T) {
got := parseRedisAddrs("127.0.0.1:26379\n127.0.0.1:26380, 10.0.0.1:26379")
if len(got) != 3 {
t.Fatalf("want 3 addrs, got %#v", got)
}
}
func TestOpenRedisModeValidation(t *testing.T) {
_, err := openRedis(ConnReq{Driver: "redis", RedisMode: "sentinel"})
if err == nil || !strings.Contains(err.Error(), "Sentinel") {
t.Fatalf("sentinel without nodes: %v", err)
}
_, err = openRedis(ConnReq{Driver: "redis", RedisMode: "sentinel", RedisNodes: "127.0.0.1:26379"})
if err == nil || !strings.Contains(err.Error(), "masterName") {
t.Fatalf("sentinel without master: %v", err)
}
_, err = openRedis(ConnReq{Driver: "redis", RedisMode: "cluster"})
if err == nil || !strings.Contains(err.Error(), "Cluster") {
t.Fatalf("cluster without nodes: %v", err)
}
}
func TestNormalizeRedisModeInfersClusterFromNodes(t *testing.T) {
cases := []struct {
name string
c ConnReq
want string
}{
{"空配置回单机", ConnReq{}, "standalone"},
{"显式 sentinel 保留", ConnReq{RedisMode: "Sentinel", RedisNodes: "127.0.0.1:26379"}, "sentinel"},
{"多节点未选模式推断 cluster", ConnReq{RedisNodes: "127.0.0.1:7101,127.0.0.1:7102"}, "cluster"},
{"单节点未选模式保持单机", ConnReq{Host: "127.0.0.1", Port: 6379, RedisNodes: "127.0.0.1:6379"}, "standalone"},
}
for _, tc := range cases {
if got := normalizeRedisMode(tc.c); got != tc.want {
t.Fatalf("%s: want %s, got %s", tc.name, tc.want, got)
}
}
}
func TestRedisErrMovedHint(t *testing.T) {
res := redisErr(time.Now(), errors.New("MOVED 12503 127.0.0.1:7103"))
if !strings.Contains(res.Error, "部署模式切为 Cluster") {
t.Fatalf("MOVED 错误应带模式切换提示: %q", res.Error)
}
res = redisErr(time.Now(), errors.New("WRONGTYPE Operation against"))
if strings.Contains(res.Error, "Cluster") {
t.Fatalf("普通错误不应带集群提示: %q", res.Error)
}
}