113 lines
2.6 KiB
Go
113 lines
2.6 KiB
Go
package peer
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestStateClient_peerUpdate(t *testing.T) {
|
|
h := NewPeerStateTestHarness()
|
|
h.ConfigClientDirect(t)
|
|
h.PeerUpdate(nil)
|
|
assertType[*stateDisconnected](t, h.State)
|
|
}
|
|
|
|
func TestStateClient_initialPackets(t *testing.T) {
|
|
h := NewPeerStateTestHarness()
|
|
h.ConfigClientDirect(t)
|
|
|
|
assertEqual(t, len(h.Sent), 2)
|
|
assertType[packetInit](t, h.Sent[0].Packet)
|
|
assertType[packetSyn](t, h.Sent[1].Packet)
|
|
}
|
|
|
|
func TestStateClient_onAck_incorrectTraceID(t *testing.T) {
|
|
h := NewPeerStateTestHarness()
|
|
h.ConfigClientDirect(t)
|
|
h.Sent = h.Sent[:0]
|
|
|
|
ack := controlMsg[packetAck]{
|
|
Packet: packetAck{TraceID: newTraceID()},
|
|
}
|
|
h.OnAck(ack)
|
|
|
|
// Nothing should have happened.
|
|
assertType[*stateClient](t, h.State)
|
|
assertEqual(t, len(h.Sent), 0)
|
|
}
|
|
|
|
func TestStateClient_onAck_direct_downToUp(t *testing.T) {
|
|
h := NewPeerStateTestHarness()
|
|
h.ConfigClientDirect(t)
|
|
|
|
assertEqual(t, len(h.Sent), 2)
|
|
syn := assertType[packetSyn](t, h.Sent[1].Packet)
|
|
h.Sent = h.Sent[:0]
|
|
|
|
assertEqual(t, h.Published.Up, false)
|
|
|
|
ack := controlMsg[packetAck]{
|
|
Packet: packetAck{TraceID: syn.TraceID},
|
|
}
|
|
|
|
h.OnAck(ack)
|
|
|
|
assertEqual(t, len(h.Sent), 0)
|
|
}
|
|
|
|
func TestStateClient_onAck_relayed_sendsProbes(t *testing.T) {
|
|
h := NewPeerStateTestHarness()
|
|
h.ConfigClientRelayed(t)
|
|
|
|
assertEqual(t, len(h.Sent), 2)
|
|
syn := assertType[packetSyn](t, h.Sent[1].Packet)
|
|
h.Sent = h.Sent[:0]
|
|
|
|
assertEqual(t, h.Published.Up, false)
|
|
|
|
ack := controlMsg[packetAck]{
|
|
Packet: packetAck{TraceID: syn.TraceID},
|
|
}
|
|
ack.Packet.PossibleAddrs[0] = addrPort4(1, 2, 3, 4, 100)
|
|
ack.Packet.PossibleAddrs[1] = addrPort4(2, 3, 4, 5, 200)
|
|
|
|
h.OnAck(ack)
|
|
|
|
assertEqual(t, len(h.Sent), 2)
|
|
assertType[packetProbe](t, h.Sent[0].Packet)
|
|
assertEqual(t, h.Sent[0].Peer.DirectAddr, ack.Packet.PossibleAddrs[0])
|
|
assertType[packetProbe](t, h.Sent[1].Packet)
|
|
assertEqual(t, h.Sent[1].Peer.DirectAddr, ack.Packet.PossibleAddrs[1])
|
|
}
|
|
|
|
func TestStateClient_onPing(t *testing.T) {
|
|
h := NewPeerStateTestHarness()
|
|
h.ConfigClientRelayed(t)
|
|
h.Sent = h.Sent[:0]
|
|
h.OnPingTimer()
|
|
assertEqual(t, len(h.Sent), 1)
|
|
assertType[*stateClient](t, h.State)
|
|
assertType[packetSyn](t, h.Sent[0].Packet)
|
|
}
|
|
|
|
func TestStateClient_onPing_timeout(t *testing.T) {
|
|
h := NewPeerStateTestHarness()
|
|
h.ConfigClientRelayed(t)
|
|
h.Sent = h.Sent[:0]
|
|
state := assertType[*stateClient](t, h.State)
|
|
state.lastSeen = time.Now().Add(-2 * timeoutInterval)
|
|
state.staged.Up = true
|
|
h.OnPingTimer()
|
|
|
|
newState := assertType[*stateClientInit](t, h.State)
|
|
assertEqual(t, newState.staged.Up, false)
|
|
assertEqual(t, len(h.Sent), 1)
|
|
assertType[packetInit](t, h.Sent[0].Packet)
|
|
}
|
|
|
|
// probe direct
|
|
|
|
// probe relayed - no match
|
|
|
|
// probe relayed - match
|