refactor-for-testability #3
| @@ -30,3 +30,53 @@ func TestStateServer_onInit(t *testing.T) { | |||||||
| 	assertEqual(t, msg.Packet.TraceID, resp.TraceID) | 	assertEqual(t, msg.Packet.TraceID, resp.TraceID) | ||||||
| 	assertEqual(t, resp.Version, version) | 	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) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -9,6 +9,13 @@ func addrPort4(a, b, c, d byte, port uint16) netip.AddrPort { | |||||||
| 	return netip.AddrPortFrom(netip.AddrFrom4([4]byte{a, b, c, d}), port) | 	return netip.AddrPortFrom(netip.AddrFrom4([4]byte{a, b, c, d}), port) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func assertNil(t *testing.T, err error) { | ||||||
|  | 	t.Helper() | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| func assertType[T any](t *testing.T, obj any) T { | func assertType[T any](t *testing.T, obj any) T { | ||||||
| 	t.Helper() | 	t.Helper() | ||||||
| 	x, ok := obj.(T) | 	x, ok := obj.(T) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user