package peer import "testing" func TestStateServer_peerUpdate(t *testing.T) { h := NewPeerStateTestHarness() h.ConfigServer_Public(t) h.PeerUpdate(nil) assertType[*stateDisconnected](t, h.State) } func TestStateServer_onInit(t *testing.T) { h := NewPeerStateTestHarness() h.ConfigServer_Public(t) msg := controlMsg[packetInit]{ SrcIP: 3, SrcAddr: addrPort4(1, 2, 3, 4, 1000), Packet: packetInit{ TraceID: newTraceID(), Direct: true, Version: 4, }, } h.OnInit(msg) assertEqual(t, len(h.Sent), 1) assertEqual(t, h.Sent[0].Peer.DirectAddr, msg.SrcAddr) resp := assertType[packetInit](t, h.Sent[0].Packet) 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) } }