Files
opsx-vpn/backend/internal/sessionmgr/sessionmgr_test.go
T

39 lines
1.1 KiB
Go

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)
}
}