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 newPayload, _ := newPacket.Buffer.ReadNext(8); !bytes.Equal(newPayload, payload) { t.Log(payload) t.Log(newPacket.Buffer.AllBytes()) t.Fatal("payloads aren't equal!") } if len(routerA.GetRoutes()) != 1 { t.Fatal("routerA does not contain new inbound route") } }