From 17ffc01be264ca13b2da8152975d60e85e5f4134 Mon Sep 17 00:00:00 2001 From: jdl Date: Wed, 26 Feb 2025 07:56:09 +0100 Subject: [PATCH] wip: cleanup and testing --- peer/state-server_test.go | 50 +++++++++++++++++++++++++++++++++++++++ peer/util_test.go | 7 ++++++ 2 files changed, 57 insertions(+) diff --git a/peer/state-server_test.go b/peer/state-server_test.go index ad9f1cd..4d517a1 100644 --- a/peer/state-server_test.go +++ b/peer/state-server_test.go @@ -30,3 +30,53 @@ func TestStateServer_onInit(t *testing.T) { assertEqual(t, msg.Packet.TraceID, resp.TraceID) assertEqual(t, resp.Version, version) } + +func TestStateServer_onSynDirect(t *testing.T) { + h := NewPeerStateTestHarness() + h.ConfigServer_Public(t) + + msg := controlMsg[packetSyn]{ + SrcIP: 3, + SrcAddr: addrPort4(1, 2, 3, 4, 1000), + Packet: packetSyn{ + TraceID: newTraceID(), + Direct: true, + }, + } + + msg.Packet.PossibleAddrs[0] = addrPort4(1, 1, 1, 1, 1000) + msg.Packet.PossibleAddrs[1] = addrPort4(1, 1, 1, 2, 2000) + + h.OnSyn(msg) + assertEqual(t, len(h.Sent), 1) + assertEqual(t, h.Sent[0].Peer.DirectAddr, msg.SrcAddr) + resp := assertType[packetAck](t, h.Sent[0].Packet) + assertEqual(t, msg.Packet.TraceID, resp.TraceID) +} + +func TestStateServer_onSynRelayed(t *testing.T) { + h := NewPeerStateTestHarness() + h.ConfigServer_Relayed(t) + + msg := controlMsg[packetSyn]{ + SrcIP: 3, + SrcAddr: addrPort4(1, 2, 3, 4, 1000), + Packet: packetSyn{ + TraceID: newTraceID(), + }, + } + + msg.Packet.PossibleAddrs[0] = addrPort4(1, 1, 1, 1, 1000) + msg.Packet.PossibleAddrs[1] = addrPort4(1, 1, 1, 2, 2000) + + h.OnSyn(msg) + assertEqual(t, len(h.Sent), 3) + assertEqual(t, h.Sent[0].Peer.DirectAddr, msg.SrcAddr) + resp := assertType[packetAck](t, h.Sent[0].Packet) + assertEqual(t, msg.Packet.TraceID, resp.TraceID) + + for i, pkt := range h.Sent[1:] { + assertEqual(t, pkt.Peer.DirectAddr, msg.Packet.PossibleAddrs[i]) + assertType[packetProbe](t, pkt.Packet) + } +} diff --git a/peer/util_test.go b/peer/util_test.go index 56b9d6f..9703a97 100644 --- a/peer/util_test.go +++ b/peer/util_test.go @@ -9,6 +9,13 @@ func addrPort4(a, b, c, d byte, port uint16) netip.AddrPort { return netip.AddrPortFrom(netip.AddrFrom4([4]byte{a, b, c, d}), port) } +func assertNil(t *testing.T, err error) { + t.Helper() + if err != nil { + t.Fatal(err) + } +} + func assertType[T any](t *testing.T, obj any) T { t.Helper() x, ok := obj.(T)