Initial commit
This commit is contained in:
commit
542ebdea34
40 changed files with 4592 additions and 0 deletions
79
checker/rules_reachability_test.go
Normal file
79
checker/rules_reachability_test.go
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
// This file is part of the happyDomain (R) project.
|
||||
// Copyright (c) 2020-2026 happyDomain
|
||||
// Authors: Pierre-Olivier Mercier, et al.
|
||||
|
||||
package checker
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
sdk "git.happydns.org/checker-sdk-go/checker"
|
||||
)
|
||||
|
||||
func TestReachabilityRule_NoProbes(t *testing.T) {
|
||||
r := &reachabilityRule{scheme: "https", code: "https.tcp_reachable"}
|
||||
states := runRule(t, r, &HTTPData{}, nil)
|
||||
mustStatus(t, states, sdk.StatusUnknown)
|
||||
if !hasCode(states, "https.tcp_reachable.no_probes") {
|
||||
t.Errorf("expected no_probes code: %+v", states)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReachabilityRule_AllOK(t *testing.T) {
|
||||
r := &reachabilityRule{scheme: "https", code: "https.tcp_reachable"}
|
||||
data := &HTTPData{Probes: []HTTPProbe{httpsProbe("a:443"), httpsProbe("b:443")}}
|
||||
states := runRule(t, r, data, nil)
|
||||
mustStatus(t, states, sdk.StatusOK)
|
||||
if !hasCode(states, "https.tcp_reachable.ok") {
|
||||
t.Errorf("expected ok code: %+v", states)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReachabilityRule_Unreachable(t *testing.T) {
|
||||
p := httpsProbe("a:443")
|
||||
p.TCPConnected = false
|
||||
p.StatusCode = 0
|
||||
p.Error = "i/o timeout"
|
||||
r := &reachabilityRule{scheme: "https", code: "https.tcp_reachable"}
|
||||
states := runRule(t, r, &HTTPData{Probes: []HTTPProbe{p}}, nil)
|
||||
mustStatus(t, states, sdk.StatusCrit)
|
||||
if !hasCode(states, "https.tcp_reachable.unreachable") {
|
||||
t.Errorf("expected unreachable: %+v", states)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReachabilityRule_NoResponse(t *testing.T) {
|
||||
p := httpsProbe("a:443")
|
||||
p.StatusCode = 0
|
||||
p.Error = "EOF"
|
||||
// TCPConnected stays true (connection accepted, no HTTP response).
|
||||
r := &reachabilityRule{scheme: "https", code: "https.tcp_reachable"}
|
||||
states := runRule(t, r, &HTTPData{Probes: []HTTPProbe{p}}, nil)
|
||||
mustStatus(t, states, sdk.StatusCrit)
|
||||
if !hasCode(states, "https.tcp_reachable.no_response") {
|
||||
t.Errorf("expected no_response: %+v", states)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReachabilityRule_5xx(t *testing.T) {
|
||||
p := httpsProbe("a:443")
|
||||
p.StatusCode = 502
|
||||
r := &reachabilityRule{scheme: "https", code: "https.tcp_reachable"}
|
||||
states := runRule(t, r, &HTTPData{Probes: []HTTPProbe{p}}, nil)
|
||||
mustStatus(t, states, sdk.StatusWarn)
|
||||
if !hasCode(states, "https.tcp_reachable.server_error") {
|
||||
t.Errorf("expected server_error: %+v", states)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReachabilityRule_FiltersByScheme(t *testing.T) {
|
||||
// An HTTP failure should not surface in the HTTPS reachability rule.
|
||||
pHTTPS := httpsProbe("a:443")
|
||||
pHTTP := httpProbe("a:80")
|
||||
pHTTP.TCPConnected = false
|
||||
pHTTP.StatusCode = 0
|
||||
|
||||
r := &reachabilityRule{scheme: "https", code: "https.tcp_reachable"}
|
||||
states := runRule(t, r, &HTTPData{Probes: []HTTPProbe{pHTTPS, pHTTP}}, nil)
|
||||
mustStatus(t, states, sdk.StatusOK)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue