92 lines
1.5 KiB
Go
92 lines
1.5 KiB
Go
package node
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"net/netip"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestPacketSyn(t *testing.T) {
|
|
in := synPacket{
|
|
TraceID: newTraceID(),
|
|
Direct: true,
|
|
ServerAddr: netip.AddrPortFrom(netip.AddrFrom4([4]byte{1, 2, 3, 4}), 34),
|
|
}
|
|
rand.Read(in.SharedKey[:])
|
|
|
|
out, err := parseSynPacket(in.Marshal(make([]byte, bufferSize)))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if !reflect.DeepEqual(in, out) {
|
|
t.Fatal("\n", in, "\n", out)
|
|
}
|
|
}
|
|
|
|
func TestPacketSynAck(t *testing.T) {
|
|
in := synAckPacket{
|
|
TraceID: newTraceID(),
|
|
}
|
|
|
|
out, err := parseSynAckPacket(in.Marshal(make([]byte, bufferSize)))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if !reflect.DeepEqual(in, out) {
|
|
t.Fatal("\n", in, "\n", out)
|
|
}
|
|
}
|
|
|
|
func TestPacketAck(t *testing.T) {
|
|
in := ackPacket{
|
|
TraceID: newTraceID(),
|
|
}
|
|
|
|
out, err := parseAckPacket(in.Marshal(make([]byte, bufferSize)))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if !reflect.DeepEqual(in, out) {
|
|
t.Fatal("\n", in, "\n", out)
|
|
}
|
|
}
|
|
|
|
func TestPacketPing(t *testing.T) {
|
|
sharedKey := make([]byte, 32)
|
|
rand.Read(sharedKey)
|
|
|
|
buf := make([]byte, bufferSize)
|
|
|
|
p := newPingPacket([32]byte(sharedKey))
|
|
out := p.Marshal(buf)
|
|
|
|
p2, err := parsePingPacket(out)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if !reflect.DeepEqual(p, p2) {
|
|
t.Fatal(p, p2)
|
|
}
|
|
}
|
|
|
|
func TestPacketPong(t *testing.T) {
|
|
buf := make([]byte, bufferSize)
|
|
|
|
p := newPongPacket(123566)
|
|
out := p.Marshal(buf)
|
|
|
|
p2, err := parsePongPacket(out)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if !reflect.DeepEqual(p, p2) {
|
|
t.Fatal(p, p2)
|
|
}
|
|
}
|