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) } }