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"
"tailscale.com/util/eventbus"
"tailscale.com/util/eventbus/eventbustest"
"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 (
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.")
@ -77,13 +95,13 @@ func TestMonitorMode(t *testing.T) {
switch *monitor {
case "":
t.Skip("skipping non-test without --monitor")
case "raw", "callback":
case "raw", "callback", "eventbus":
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()
defer bus.Close()
bus := eventbustest.NewBus(t)
tw := eventbustest.NewWatcher(t, bus)
mon, err := New(bus, t.Logf)
if err != nil {
@ -124,6 +142,16 @@ func TestMonitorMode(t *testing.T) {
mon.Start()
<-done
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)
}
}