From 1d18d297ed67a8d7744f36de87d310f537d71476 Mon Sep 17 00:00:00 2001 From: jdl Date: Wed, 26 Feb 2025 12:45:43 +0100 Subject: [PATCH] wip: testing --- peer/state-server.go | 5 ++- peer/state-server_test.go | 84 ++++++++++++++++++++++++++++++++++++++- peer/state-util_test.go | 8 ++++ 3 files changed, 95 insertions(+), 2 deletions(-) diff --git a/peer/state-server.go b/peer/state-server.go index 723af5c..aba9c84 100644 --- a/peer/state-server.go +++ b/peer/state-server.go @@ -24,7 +24,10 @@ func enterStateServer(data *peerData) peerState { data.pingTimer.Reset(pingInterval) - state := &stateServer{peerData: data} + state := &stateServer{ + peerData: data, + lastSeen: time.Now(), + } state.logf("==> Server") return state } diff --git a/peer/state-server_test.go b/peer/state-server_test.go index 4d517a1..b367786 100644 --- a/peer/state-server_test.go +++ b/peer/state-server_test.go @@ -1,6 +1,9 @@ package peer -import "testing" +import ( + "testing" + "time" +) func TestStateServer_peerUpdate(t *testing.T) { h := NewPeerStateTestHarness() @@ -80,3 +83,82 @@ func TestStateServer_onSynRelayed(t *testing.T) { assertType[packetProbe](t, pkt.Packet) } } + +func TestStateServer_onProbe(t *testing.T) { + h := NewPeerStateTestHarness() + h.ConfigServer_Relayed(t) + + msg := controlMsg[packetProbe]{ + SrcIP: 3, + Packet: packetProbe{ + TraceID: newTraceID(), + }, + } + h.Sent = h.Sent[:0] + + h.OnProbe(msg) + assertEqual(t, len(h.Sent), 0) +} + +func TestStateServer_onProbe_valid(t *testing.T) { + h := NewPeerStateTestHarness() + h.ConfigServer_Relayed(t) + + msg := controlMsg[packetProbe]{ + SrcIP: 3, + SrcAddr: addrPort4(1, 2, 3, 4, 100), + Packet: packetProbe{ + TraceID: newTraceID(), + }, + } + h.Sent = h.Sent[:0] + + h.OnProbe(msg) + assertEqual(t, len(h.Sent), 1) + assertType[packetProbe](t, h.Sent[0].Packet) + assertEqual(t, h.Sent[0].Peer.DirectAddr, msg.SrcAddr) +} + +func TestStateServer_onPing(t *testing.T) { + h := NewPeerStateTestHarness() + h.ConfigServer_Relayed(t) + h.Sent = h.Sent[:0] + h.OnPingTimer() + assertEqual(t, len(h.Sent), 0) + assertType[*stateServer](t, h.State) +} + +func TestStateServer_onPing_timeout(t *testing.T) { + h := NewPeerStateTestHarness() + h.ConfigServer_Relayed(t) + + h.Sent = h.Sent[:0] + state := assertType[*stateServer](t, h.State) + state.staged.Up = true + state.lastSeen = time.Now().Add(-2 * timeoutInterval) + + h.OnPingTimer() + state = assertType[*stateServer](t, h.State) + assertEqual(t, len(h.Sent), 0) + assertEqual(t, state.staged.Up, false) +} + +func TestStateServer_onLocalDiscovery(t *testing.T) { + h := NewPeerStateTestHarness() + h.ConfigServer_Relayed(t) + + msg := controlMsg[packetLocalDiscovery]{ + SrcIP: 3, + SrcAddr: addrPort4(1, 2, 3, 4, 100), + } + h.OnLocalDiscovery(msg) + assertType[*stateServer](t, h.State) +} + +func TestStateServer_onAck(t *testing.T) { + h := NewPeerStateTestHarness() + h.ConfigServer_Relayed(t) + msg := controlMsg[packetAck]{} + h.OnAck(msg) + assertType[*stateServer](t, h.State) +} diff --git a/peer/state-util_test.go b/peer/state-util_test.go index f1dafb8..8bb2904 100644 --- a/peer/state-util_test.go +++ b/peer/state-util_test.go @@ -59,10 +59,18 @@ func (h *PeerStateTestHarness) OnSyn(msg controlMsg[packetSyn]) { h.State = h.State.OnMsg(msg) } +func (h *PeerStateTestHarness) OnAck(msg controlMsg[packetAck]) { + h.State = h.State.OnMsg(msg) +} + func (h *PeerStateTestHarness) OnProbe(msg controlMsg[packetProbe]) { h.State = h.State.OnMsg(msg) } +func (h *PeerStateTestHarness) OnLocalDiscovery(msg controlMsg[packetLocalDiscovery]) { + h.State = h.State.OnMsg(msg) +} + func (h *PeerStateTestHarness) OnPingTimer() { h.State = h.State.OnMsg(pingTimerMsg{}) }