mirror of
https://github.com/go-gost/x.git
synced 2026-10-20 08:18:33 +00:00
A running tun entrypoint cannot tell a dead device fd from an idle link: both look like frozen stats. The probe writes a self-addressed IPv4/UDP packet (spokeIP->spokeIP, magic+seq) into the device every 30s and reads it back on its own bound socket; sent/acked deltas go to the caller through the metadata probeReport callback. Enabled by metadata probe (default off, gost path unchanged); new probeSent/probeAcked counters (101/102) in x stats.
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package tun
|
|
|
|
import (
|
|
"testing"
|
|
|
|
xmd "github.com/go-gost/x/metadata"
|
|
)
|
|
|
|
func TestParseMetadataProbeDefaultOff(t *testing.T) {
|
|
h := &tunHandler{}
|
|
if err := h.parseMetadata(xmd.NewMetadata(map[string]any{})); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if h.md.probe {
|
|
t.Fatal("probe defaults off")
|
|
}
|
|
if h.md.probeReport != nil {
|
|
t.Fatal("probeReport defaults nil")
|
|
}
|
|
}
|
|
|
|
func TestParseMetadataProbeOn(t *testing.T) {
|
|
called := false
|
|
report := func(sentDelta, ackedDelta uint64) { called = true }
|
|
h := &tunHandler{}
|
|
if err := h.parseMetadata(xmd.NewMetadata(map[string]any{
|
|
"probe": true,
|
|
"probeReport": report,
|
|
})); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !h.md.probe {
|
|
t.Fatal("probe not enabled")
|
|
}
|
|
if h.md.probeReport == nil {
|
|
t.Fatal("probeReport not plumbed")
|
|
}
|
|
h.md.probeReport(1, 0)
|
|
if !called {
|
|
t.Fatal("probeReport is not the func from metadata")
|
|
}
|
|
}
|
|
|
|
func TestParseMetadataProbeBadReportIgnored(t *testing.T) {
|
|
h := &tunHandler{}
|
|
if err := h.parseMetadata(xmd.NewMetadata(map[string]any{
|
|
"probe": true,
|
|
"probeReport": "not-a-func",
|
|
})); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !h.md.probe {
|
|
t.Fatal("probe not enabled")
|
|
}
|
|
if h.md.probeReport != nil {
|
|
t.Fatal("bad probeReport must stay nil, not panic")
|
|
}
|
|
}
|