refactor-for-testability #3
| @@ -24,7 +24,10 @@ func enterStateServer(data *peerData) peerState { | |||||||
|  |  | ||||||
| 	data.pingTimer.Reset(pingInterval) | 	data.pingTimer.Reset(pingInterval) | ||||||
|  |  | ||||||
| 	state := &stateServer{peerData: data} | 	state := &stateServer{ | ||||||
|  | 		peerData: data, | ||||||
|  | 		lastSeen: time.Now(), | ||||||
|  | 	} | ||||||
| 	state.logf("==> Server") | 	state.logf("==> Server") | ||||||
| 	return state | 	return state | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,9 @@ | |||||||
| package peer | package peer | ||||||
|  |  | ||||||
| import "testing" | import ( | ||||||
|  | 	"testing" | ||||||
|  | 	"time" | ||||||
|  | ) | ||||||
|  |  | ||||||
| func TestStateServer_peerUpdate(t *testing.T) { | func TestStateServer_peerUpdate(t *testing.T) { | ||||||
| 	h := NewPeerStateTestHarness() | 	h := NewPeerStateTestHarness() | ||||||
| @@ -80,3 +83,82 @@ func TestStateServer_onSynRelayed(t *testing.T) { | |||||||
| 		assertType[packetProbe](t, pkt.Packet) | 		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) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -59,10 +59,18 @@ func (h *PeerStateTestHarness) OnSyn(msg controlMsg[packetSyn]) { | |||||||
| 	h.State = h.State.OnMsg(msg) | 	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]) { | func (h *PeerStateTestHarness) OnProbe(msg controlMsg[packetProbe]) { | ||||||
| 	h.State = h.State.OnMsg(msg) | 	h.State = h.State.OnMsg(msg) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (h *PeerStateTestHarness) OnLocalDiscovery(msg controlMsg[packetLocalDiscovery]) { | ||||||
|  | 	h.State = h.State.OnMsg(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
| func (h *PeerStateTestHarness) OnPingTimer() { | func (h *PeerStateTestHarness) OnPingTimer() { | ||||||
| 	h.State = h.State.OnMsg(pingTimerMsg{}) | 	h.State = h.State.OnMsg(pingTimerMsg{}) | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user