Files
wg-portal/internal/adapters/metrics_test.go
T

78 lines
3.1 KiB
Go

package adapters
import (
"testing"
"github.com/h44z/wg-portal/internal/domain"
"github.com/prometheus/client_golang/prometheus"
)
func TestDeletePeerMetricsRemovesAllPeerSeries(t *testing.T) {
labels := []string{"interface", "addresses", "id", "name", "user"}
m := &MetricsServer{
peerIsConnected: prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: "peer_up_test"}, labels),
peerLastHandshakeSeconds: prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: "peer_handshake_test"}, labels),
peerReceivedBytesTotal: prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: "peer_received_test"}, labels),
peerSendBytesTotal: prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: "peer_sent_test"}, labels),
}
addr, err := domain.CidrFromString("10.0.0.2/32")
if err != nil {
t.Fatal(err)
}
peer := &domain.Peer{
Identifier: "peer-id",
InterfaceIdentifier: "wg0",
DisplayName: "peer",
UserIdentifier: "user",
Interface: domain.PeerInterfaceConfig{Addresses: []domain.Cidr{addr}},
}
m.UpdatePeerMetrics(peer, domain.PeerStatus{PeerId: peer.Identifier, IsConnected: true})
m.DeletePeerMetrics(*peer)
for name, collector := range map[string]prometheus.Collector{
"up": m.peerIsConnected, "handshake": m.peerLastHandshakeSeconds,
"received": m.peerReceivedBytesTotal, "sent": m.peerSendBytesTotal,
} {
ch := make(chan prometheus.Metric, 1)
collector.Collect(ch)
close(ch)
if _, ok := <-ch; ok {
t.Errorf("%s metric remained after peer deletion", name)
}
}
}
func TestDeletePeerMetricsLeavesRetainedPeerSeries(t *testing.T) {
labels := []string{"interface", "addresses", "id", "name", "user"}
m := &MetricsServer{
peerIsConnected: prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: "peer_up_retained_test"}, labels),
peerLastHandshakeSeconds: prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: "peer_handshake_retained_test"}, labels),
peerReceivedBytesTotal: prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: "peer_received_retained_test"}, labels),
peerSendBytesTotal: prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: "peer_sent_retained_test"}, labels),
}
deletedAddr, err := domain.CidrFromString("10.0.0.2/32")
if err != nil {
t.Fatal(err)
}
retainedAddr, err := domain.CidrFromString("10.0.0.3/32")
if err != nil {
t.Fatal(err)
}
deleted := &domain.Peer{Identifier: "deleted", InterfaceIdentifier: "wg0", DisplayName: "deleted", UserIdentifier: "user", Interface: domain.PeerInterfaceConfig{Addresses: []domain.Cidr{deletedAddr}}}
retained := &domain.Peer{Identifier: "retained", InterfaceIdentifier: "wg0", DisplayName: "retained", UserIdentifier: "user", Interface: domain.PeerInterfaceConfig{Addresses: []domain.Cidr{retainedAddr}}}
m.UpdatePeerMetrics(deleted, domain.PeerStatus{PeerId: deleted.Identifier, IsConnected: false})
m.UpdatePeerMetrics(retained, domain.PeerStatus{PeerId: retained.Identifier, IsConnected: false})
m.DeletePeerMetrics(*deleted)
ch := make(chan prometheus.Metric, 2)
m.peerIsConnected.Collect(ch)
close(ch)
count := 0
for range ch {
count++
}
if count != 1 {
t.Fatalf("expected one retained peer series, got %d", count)
}
}