lux/tests/lux_router_test.go

96 lines
2 KiB
Go

package tests
import (
"bytes"
"lux/crypto"
"lux/net"
"lux/proto"
"testing"
)
func TestDgramChannel(t *testing.T) {
ks := crypto.NewLuxKeyStore("/tmp/keystore.dat")
keyA, _ := crypto.NewLuxKey(proto.LuxTypeHost)
ks.Put(keyA)
r := net.NewLuxRouter(keyA, ks)
err := r.CreateInboundChannel(net.LuxChannelInterior, "127.0.0.2:9979")
if err != nil {
t.Fatal(err)
}
outbound, err := net.NewLuxOutboundChannel("127.0.0.2:9979", net.LuxChannelInterior)
if err != nil {
t.Fatal(err)
}
dgram := net.LuxDatagram{
Target: outbound.Address,
Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8},
}
r.Start()
defer r.Stop()
outbound.Send(dgram)
recv := r.RecvDgram()
if !bytes.Equal(dgram.Payload, recv.Payload) {
t.Log(dgram)
t.Log(recv)
t.Log("payloads are not equal!")
}
}
func TestRouterSendRecv(t *testing.T) {
ks := crypto.NewLuxKeyStore("/tmp/keystore.dat")
keyA, _ := crypto.NewLuxKey(proto.LuxTypeHost)
ks.Put(keyA)
routerA := net.NewLuxRouter(keyA, ks)
if err := routerA.CreateInboundChannel(net.LuxChannelInterior, "127.0.0.2:9979"); err != nil {
t.Fatal(err)
}
routerA.Start()
defer routerA.Stop()
t.Log("routerA routing table:")
t.Log(routerA.GetRoutes())
routerB := net.NewLuxRouter(keyA, ks)
if err := routerB.CreateOutboundRoute(keyA.Id, net.LuxChannelInterior, "127.0.0.2:9979"); err != nil {
t.Fatal(err)
}
routerB.Start()
defer routerB.Stop()
t.Log("routerB routing table:")
t.Log(routerB.GetRoutes())
payload := []byte{1, 2, 3, 4, 5, 6, 7, 8}
packet := net.LuxPacket{
Target: keyA.Id,
Type: 0x1234,
Buffer: proto.FromSlice(payload),
}
routerB.Send(packet)
newPacket, err := routerA.Recv()
if err != nil {
t.Fatal(err)
}
if newPacket.ChannelType != net.LuxChannelInterior {
t.Fatal("newPacket.ChannelType != net.LuxChannelInterior")
}
if newPacket.Type != packet.Type {
t.Fatal("newPacket.Type != packet.Type")
}
if !bytes.Equal(newPacket.Buffer.AllBytes(), payload) {
t.Log(payload)
t.Log(newPacket.Buffer.AllBytes())
t.Fatal("payloads aren't equal!")
}
}