fix: clean up stale active sessions on startup
After an unclean shutdown, sessions could be left with disconnected_at NULL, appearing permanently active. Add CloseActiveSessions to the Store interface and call it at startup to close any leftover sessions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -316,6 +316,51 @@ func TestSessionEvents(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestCloseActiveSessions(t *testing.T) {
|
||||
testStores(t, func(t *testing.T, newStore storeFactory) {
|
||||
t.Run("no active sessions", func(t *testing.T) {
|
||||
store := newStore(t)
|
||||
ctx := context.Background()
|
||||
|
||||
n, err := store.CloseActiveSessions(ctx, time.Now())
|
||||
if err != nil {
|
||||
t.Fatalf("CloseActiveSessions: %v", err)
|
||||
}
|
||||
if n != 0 {
|
||||
t.Errorf("closed %d, want 0", n)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("closes only active sessions", func(t *testing.T) {
|
||||
store := newStore(t)
|
||||
ctx := context.Background()
|
||||
|
||||
// Create 3 sessions: end one, leave two active.
|
||||
id1, _ := store.CreateSession(ctx, "10.0.0.1", "root", "bash")
|
||||
store.CreateSession(ctx, "10.0.0.2", "admin", "bash")
|
||||
store.CreateSession(ctx, "10.0.0.3", "test", "bash")
|
||||
store.EndSession(ctx, id1, time.Now())
|
||||
|
||||
n, err := store.CloseActiveSessions(ctx, time.Now())
|
||||
if err != nil {
|
||||
t.Fatalf("CloseActiveSessions: %v", err)
|
||||
}
|
||||
if n != 2 {
|
||||
t.Errorf("closed %d, want 2", n)
|
||||
}
|
||||
|
||||
// Verify no active sessions remain.
|
||||
active, err := store.GetRecentSessions(ctx, 10, true)
|
||||
if err != nil {
|
||||
t.Fatalf("GetRecentSessions: %v", err)
|
||||
}
|
||||
if len(active) != 0 {
|
||||
t.Errorf("active sessions = %d, want 0", len(active))
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestGetRecentSessions(t *testing.T) {
|
||||
testStores(t, func(t *testing.T, newStore storeFactory) {
|
||||
t.Run("empty", func(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user