@@ -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)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user