Co-authored-by: jdl <jdl@desktop> Co-authored-by: jdl <jdl@crumpington.com> Reviewed-on: #3
165 lines
3.8 KiB
Go
165 lines
3.8 KiB
Go
package peer
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|