net/netmon: add tests for the events over the eventbus (#16382)

Updates #15160

Signed-off-by: Claus Lensbøl <claus@tailscale.com>
This commit is contained in:
Claus Lensbøl 2025-06-25 14:44:01 -04:00 committed by GitHub
parent 35b11e7be5
commit 37eca1785c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -12,6 +12,7 @@ import (
"time" "time"
"tailscale.com/util/eventbus" "tailscale.com/util/eventbus"
"tailscale.com/util/eventbus/eventbustest"
"tailscale.com/util/mak" "tailscale.com/util/mak"
) )
@ -68,6 +69,23 @@ func TestMonitorInjectEvent(t *testing.T) {
} }
} }
func TestMonitorInjectEventOnBus(t *testing.T) {
bus := eventbustest.NewBus(t)
mon, err := New(bus, t.Logf)
if err != nil {
t.Fatal(err)
}
defer mon.Close()
tw := eventbustest.NewWatcher(t, bus)
mon.Start()
mon.InjectEvent()
if err := eventbustest.Expect(tw, eventbustest.Type[*ChangeDelta]()); err != nil {
t.Error(err)
}
}
var ( var (
monitor = flag.String("monitor", "", `go into monitor mode like 'route monitor'; test never terminates. Value can be either "raw" or "callback"`) monitor = flag.String("monitor", "", `go into monitor mode like 'route monitor'; test never terminates. Value can be either "raw" or "callback"`)
monitorDuration = flag.Duration("monitor-duration", 0, "if non-zero, how long to run TestMonitorMode. Zero means forever.") monitorDuration = flag.Duration("monitor-duration", 0, "if non-zero, how long to run TestMonitorMode. Zero means forever.")
@ -77,13 +95,13 @@ func TestMonitorMode(t *testing.T) {
switch *monitor { switch *monitor {
case "": case "":
t.Skip("skipping non-test without --monitor") t.Skip("skipping non-test without --monitor")
case "raw", "callback": case "raw", "callback", "eventbus":
default: default:
t.Skipf(`invalid --monitor value: must be "raw" or "callback"`) t.Skipf(`invalid --monitor value: must be "raw", "callback" or "eventbus"`)
} }
bus := eventbus.New() bus := eventbustest.NewBus(t)
defer bus.Close() tw := eventbustest.NewWatcher(t, bus)
mon, err := New(bus, t.Logf) mon, err := New(bus, t.Logf)
if err != nil { if err != nil {
@ -124,6 +142,16 @@ func TestMonitorMode(t *testing.T) {
mon.Start() mon.Start()
<-done <-done
t.Logf("%v callbacks", n) t.Logf("%v callbacks", n)
case "eventbus":
tw.TimeOut = *monitorDuration
n := 0
mon.Start()
eventbustest.Expect(tw, func(event *ChangeDelta) (bool, error) {
n++
t.Logf("cb: changed=%v, ifSt=%v", event.Major, event.New)
return false, nil // Return false, indicating we wanna look for more events
})
t.Logf("%v events", n)
} }
} }