|
|
|
|
@ -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)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|