package sessionmgr import ( "testing" "vpn-platform/backend/internal/model" "vpn-platform/backend/internal/store" ) func TestDisconnectLoggedOnceWhenTunnelHasNoClients(t *testing.T) { previous := store.DB t.Cleanup(func() { if store.DB != nil { if db, err := store.DB.DB(); err == nil { _ = db.Close() } } store.DB = previous }) if err := store.Init(t.TempDir()); err != nil { t.Fatal(err) } tunnel := model.Tunnel{Name: "audit-test", Protocol: "openvpn"} if err := store.DB.Create(&tunnel).Error; err != nil { t.Fatal(err) } client := ClientInfo{Username: "tenant:ou_123", RealAddress: "203.0.113.1:1234", RxBytes: 42, TxBytes: 84} SyncSessions(tunnel.ID, "openvpn", []ClientInfo{client}) SyncSessions(tunnel.ID, "openvpn", nil) SyncSessions(tunnel.ID, "openvpn", nil) var logs []model.ConnectionLog if err := store.DB.Where("tunnel_id = ?", tunnel.ID).Order("id").Find(&logs).Error; err != nil { t.Fatal(err) } if len(logs) != 2 || logs[0].Event != "connect" || logs[1].Event != "disconnect" || logs[1].Username != client.Username { t.Fatalf("expected one connect and one disconnect with stable subject, got %+v", logs) } }