wg-portal/internal/domain/statistics_test.go
Christoph Haas 3c72a26e91
add webhook event for peer state change (#444)
new event types: connect and disconnect

example payload:

```json
{
  "event": "connect",
  "entity": "peer",
  "identifier": "Fb5TaziAs1WrPBjC/MFbWsIelVXvi0hDKZ3YQM9wmU8=",
  "payload": {
    "PeerId": "Fb5TaziAs1WrPBjC/MFbWsIelVXvi0hDKZ3YQM9wmU8=",
    "IsConnected": true,
    "IsPingable": false,
    "LastPing": null,
    "BytesReceived": 1860,
    "BytesTransmitted": 10824,
    "LastHandshake": "2025-06-26T23:04:33.325216659+02:00",
    "Endpoint": "10.55.66.77:33874",
    "LastSessionStart": "2025-06-26T22:50:40.10221606+02:00"
  }
}
```
2025-06-26 23:25:53 +02:00

76 lines
1.3 KiB
Go

package domain
import (
"testing"
"time"
)
func TestPeerStatus_IsConnected(t *testing.T) {
now := time.Now()
past := now.Add(-3 * time.Minute)
recent := now.Add(-1 * time.Minute)
tests := []struct {
name string
status PeerStatus
want bool
}{
{
name: "Pingable and recent handshake",
status: PeerStatus{
IsPingable: true,
LastHandshake: &recent,
},
want: true,
},
{
name: "Not pingable but recent handshake",
status: PeerStatus{
IsPingable: false,
LastHandshake: &recent,
},
want: true,
},
{
name: "Pingable but old handshake",
status: PeerStatus{
IsPingable: true,
LastHandshake: &past,
},
want: true,
},
{
name: "Not pingable and old handshake",
status: PeerStatus{
IsPingable: false,
LastHandshake: &past,
},
want: false,
},
{
name: "Pingable and no handshake",
status: PeerStatus{
IsPingable: true,
LastHandshake: nil,
},
want: true,
},
{
name: "Not pingable and no handshake",
status: PeerStatus{
IsPingable: false,
LastHandshake: nil,
},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tt.status.CalcConnected()
if got := tt.status.IsConnected; got != tt.want {
t.Errorf("IsConnected = %v, want %v", got, tt.want)
}
})
}
}