control/controlclient,health: add tests for control health tracking
Updates tailscale/corp#27759 Signed-off-by: James Sanderson <jsanderson@tailscale.com>
This commit is contained in:
committed by
James 'zofrex' Sanderson
parent
ac1215c7e0
commit
1f1c323eeb
@@ -451,3 +451,88 @@ func TestNoDERPHomeWarnableManual(t *testing.T) {
|
||||
t.Fatalf("got unexpected noDERPHomeWarnable warnable: %v", ws)
|
||||
}
|
||||
}
|
||||
|
||||
func TestControlHealth(t *testing.T) {
|
||||
ht := Tracker{}
|
||||
ht.SetIPNState("NeedsLogin", true)
|
||||
ht.GotStreamedMapResponse()
|
||||
|
||||
ht.SetControlHealth([]string{"Test message"})
|
||||
state := ht.CurrentState()
|
||||
warning, ok := state.Warnings["control-health"]
|
||||
|
||||
if !ok {
|
||||
t.Fatal("no warning found in current state with code 'control-health'")
|
||||
}
|
||||
if got, want := warning.Title, "Coordination server reports an issue"; got != want {
|
||||
t.Errorf("warning.Title = %q, want %q", got, want)
|
||||
}
|
||||
if got, want := warning.Severity, SeverityMedium; got != want {
|
||||
t.Errorf("warning.Severity = %s, want %s", got, want)
|
||||
}
|
||||
if got, want := warning.Text, "The coordination server is reporting an health issue: Test message"; got != want {
|
||||
t.Errorf("warning.Text = %q, want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestControlHealthNotifiesOnChange(t *testing.T) {
|
||||
ht := Tracker{}
|
||||
ht.SetIPNState("NeedsLogin", true)
|
||||
ht.GotStreamedMapResponse()
|
||||
|
||||
gotNotified := false
|
||||
ht.registerSyncWatcher(func(_ *Warnable, _ *UnhealthyState) {
|
||||
gotNotified = true
|
||||
})
|
||||
|
||||
ht.SetControlHealth([]string{"Test message"})
|
||||
|
||||
if !gotNotified {
|
||||
t.Errorf("watcher did not get called, want it to be called")
|
||||
}
|
||||
}
|
||||
|
||||
func TestControlHealthNoNotifyOnUnchanged(t *testing.T) {
|
||||
ht := Tracker{}
|
||||
ht.SetIPNState("NeedsLogin", true)
|
||||
ht.GotStreamedMapResponse()
|
||||
|
||||
// Set up an existing control health issue
|
||||
ht.SetControlHealth([]string{"Test message"})
|
||||
|
||||
// Now register our watcher
|
||||
gotNotified := false
|
||||
ht.registerSyncWatcher(func(_ *Warnable, _ *UnhealthyState) {
|
||||
gotNotified = true
|
||||
})
|
||||
|
||||
// Send the same control health message again - should not notify
|
||||
ht.SetControlHealth([]string{"Test message"})
|
||||
|
||||
if gotNotified {
|
||||
t.Errorf("watcher got called, want it to not be called")
|
||||
}
|
||||
}
|
||||
|
||||
func TestControlHealthIgnoredOutsideMapPoll(t *testing.T) {
|
||||
ht := Tracker{}
|
||||
ht.SetIPNState("NeedsLogin", true)
|
||||
|
||||
gotNotified := false
|
||||
ht.registerSyncWatcher(func(_ *Warnable, _ *UnhealthyState) {
|
||||
gotNotified = true
|
||||
})
|
||||
|
||||
ht.SetControlHealth([]string{"Test message"})
|
||||
|
||||
state := ht.CurrentState()
|
||||
_, ok := state.Warnings["control-health"]
|
||||
|
||||
if ok {
|
||||
t.Error("got a warning with code 'control-health', want none")
|
||||
}
|
||||
|
||||
if gotNotified {
|
||||
t.Error("watcher got called, want it to not be called")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user