Files
gost-x/handler/tun/metadata_test.go
ginuerzh 1d42c2ec66 feat(tun): add device write-side self-probe
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.
2026-10-07 05:07:13 +00:00

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