mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-03-17 14:16:58 +00:00
152 lines
4.9 KiB
Go
152 lines
4.9 KiB
Go
package checks
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/DeBrosOfficial/network/pkg/inspector"
|
|
)
|
|
|
|
func TestCheckNetwork_HealthyNode(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.Network = &inspector.NetworkData{
|
|
InternetReachable: true,
|
|
DefaultRoute: true,
|
|
WGRouteExists: true,
|
|
TCPEstablished: 100,
|
|
TCPTimeWait: 50,
|
|
TCPRetransRate: 0.1,
|
|
PingResults: map[string]bool{"10.0.0.2": true, "10.0.0.3": true},
|
|
}
|
|
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckNetwork(data)
|
|
|
|
expectStatus(t, results, "network.internet", inspector.StatusPass)
|
|
expectStatus(t, results, "network.default_route", inspector.StatusPass)
|
|
expectStatus(t, results, "network.wg_route", inspector.StatusPass)
|
|
expectStatus(t, results, "network.tcp_established", inspector.StatusPass)
|
|
expectStatus(t, results, "network.tcp_timewait", inspector.StatusPass)
|
|
expectStatus(t, results, "network.tcp_retrans", inspector.StatusPass)
|
|
expectStatus(t, results, "network.wg_mesh_ping", inspector.StatusPass)
|
|
}
|
|
|
|
func TestCheckNetwork_InternetUnreachable(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.Network = &inspector.NetworkData{InternetReachable: false}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckNetwork(data)
|
|
expectStatus(t, results, "network.internet", inspector.StatusFail)
|
|
}
|
|
|
|
func TestCheckNetwork_MissingRoutes(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.Network = &inspector.NetworkData{DefaultRoute: false, WGRouteExists: false}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckNetwork(data)
|
|
expectStatus(t, results, "network.default_route", inspector.StatusFail)
|
|
expectStatus(t, results, "network.wg_route", inspector.StatusFail)
|
|
}
|
|
|
|
func TestCheckNetwork_TCPConnections(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
estab int
|
|
status inspector.Status
|
|
}{
|
|
{"normal", 100, inspector.StatusPass},
|
|
{"high", 6000, inspector.StatusWarn},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.Network = &inspector.NetworkData{TCPEstablished: tt.estab}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckNetwork(data)
|
|
expectStatus(t, results, "network.tcp_established", tt.status)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCheckNetwork_TCPTimeWait(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
tw int
|
|
status inspector.Status
|
|
}{
|
|
{"normal", 50, inspector.StatusPass},
|
|
{"high", 15000, inspector.StatusWarn},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.Network = &inspector.NetworkData{TCPTimeWait: tt.tw}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckNetwork(data)
|
|
expectStatus(t, results, "network.tcp_timewait", tt.status)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCheckNetwork_TCPRetransmission(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
rate float64
|
|
status inspector.Status
|
|
}{
|
|
{"low", 0.5, inspector.StatusPass},
|
|
{"elevated", 6.0, inspector.StatusWarn},
|
|
{"high", 12.0, inspector.StatusFail},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.Network = &inspector.NetworkData{TCPRetransRate: tt.rate}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckNetwork(data)
|
|
expectStatus(t, results, "network.tcp_retrans", tt.status)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCheckNetwork_WGMeshPing(t *testing.T) {
|
|
t.Run("all ok", func(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.Network = &inspector.NetworkData{
|
|
PingResults: map[string]bool{"10.0.0.2": true, "10.0.0.3": true},
|
|
}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckNetwork(data)
|
|
expectStatus(t, results, "network.wg_mesh_ping", inspector.StatusPass)
|
|
})
|
|
|
|
t.Run("some fail", func(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.Network = &inspector.NetworkData{
|
|
PingResults: map[string]bool{"10.0.0.2": true, "10.0.0.3": false},
|
|
}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckNetwork(data)
|
|
expectStatus(t, results, "network.wg_mesh_ping", inspector.StatusFail)
|
|
})
|
|
|
|
t.Run("no pings", func(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.Network = &inspector.NetworkData{PingResults: map[string]bool{}}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckNetwork(data)
|
|
// No ping results → no wg_mesh_ping check
|
|
if findCheck(results, "network.wg_mesh_ping") != nil {
|
|
t.Error("should not emit wg_mesh_ping when no ping results")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestCheckNetwork_NilData(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckNetwork(data)
|
|
if len(results) != 0 {
|
|
t.Errorf("expected 0 results for nil Network data, got %d", len(results))
|
|
}
|
|
}
|