修复跨区间缓存串数据与会话回收泄漏,收敛网关重试
CI / test (push) Successful in 29s

This commit is contained in:
2026-07-17 12:19:21 +08:00
parent 7019d4c5a6
commit 882eeade1e
6 changed files with 121 additions and 68 deletions
+41
View File
@@ -116,3 +116,44 @@ func TestCreateConsoleSession(t *testing.T) {
})
}
}
// TestConsoleSessionExpire 验证过期回收:在用会话跳过本轮,断开后下一轮回收。
func TestConsoleSessionExpire(t *testing.T) {
tests := []struct {
name string
inUse bool
wantAlive bool
}{
{name: "在用会话跳过回收", inUse: true, wantAlive: true},
{name: "空闲会话回收并删云端连接", inUse: false, wantAlive: false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
client := &consoleFakeClient{}
console, cfgID := newConsoleTestService(t, client)
sess, err := console.CreateSession(context.Background(), cfgID, "ocid1.instance.i", "", ConsoleTypeSerial)
if err != nil {
t.Fatalf("CreateSession: %v", err)
}
sess.MarkUse(tt.inUse)
console.expire(sess.ID)
if alive := console.Get(sess.ID) != nil; alive != tt.wantAlive {
t.Fatalf("session alive = %v, want %v", alive, tt.wantAlive)
}
if wantDel := !tt.wantAlive; (len(client.deleted) == 1) != wantDel {
t.Errorf("cloud connection deleted %v, want %v", client.deleted, wantDel)
}
if tt.inUse {
// 断开后下一轮回收(此前的缺陷:跳过后不再检查,会话常驻)
sess.MarkUse(false)
console.expire(sess.ID)
if console.Get(sess.ID) != nil {
t.Fatal("session still alive after idle expire round")
}
if len(client.deleted) != 1 {
t.Errorf("cloud connection not deleted after idle expire: %v", client.deleted)
}
}
})
}
}