Files
hodu/packet_test.go

114 lines
3.2 KiB
Go

package hodu
import (
"bytes"
"testing"
)
func TestMakeRouteStartPacket(t *testing.T) {
var option RouteOption
var pkt *Packet
var route *RouteDesc
option = RouteOption(ROUTE_OPTION_TCP4 | ROUTE_OPTION_SSH)
pkt = MakeRouteStartPacket(7, option, "127.0.0.1:22", "ssh", "0.0.0.0:0", "0.0.0.0/0")
if pkt.Kind != PACKET_KIND_ROUTE_START {
t.Fatalf("unexpected packet kind %v", pkt.Kind)
}
route = pkt.GetRoute()
if route == nil {
t.Fatal("expected route payload")
}
if route.RouteId != 7 {
t.Fatalf("unexpected route id %d", route.RouteId)
}
if route.ServiceOption != uint32(option) {
t.Fatalf("unexpected route option %d", route.ServiceOption)
}
if route.TargetAddrStr != "127.0.0.1:22" || route.TargetName != "ssh" {
t.Fatalf("unexpected target route payload: %+v", route)
}
}
func TestMakePeerDataPacket(t *testing.T) {
var payload []byte
var pkt *Packet
var data *PeerData
payload = []byte("hello-peer")
pkt = MakePeerDataPacket(3, 9, payload)
if pkt.Kind != PACKET_KIND_PEER_DATA {
t.Fatalf("unexpected packet kind %v", pkt.Kind)
}
data = pkt.GetData()
if data == nil {
t.Fatal("expected peer data payload")
}
if data.RouteId != 3 || data.PeerId != 9 {
t.Fatalf("unexpected ids: route=%d peer=%d", data.RouteId, data.PeerId)
}
if !bytes.Equal(data.Data, payload) {
t.Fatalf("unexpected payload %q", string(data.Data))
}
}
func TestMakeConnPackets(t *testing.T) {
var desc *Packet
var err_pkt *Packet
var notice *Packet
desc = MakeConnDescPacket("client-1")
if desc.Kind != PACKET_KIND_CONN_DESC || desc.GetConn() == nil || desc.GetConn().Token != "client-1" {
t.Fatalf("unexpected conn desc packet: %+v", desc)
}
err_pkt = MakeConnErrorPacket(42, "boom")
if err_pkt.Kind != PACKET_KIND_CONN_ERROR || err_pkt.GetConnErr() == nil {
t.Fatalf("unexpected conn error packet: %+v", err_pkt)
}
if err_pkt.GetConnErr().ErrorId != 42 || err_pkt.GetConnErr().Text != "boom" {
t.Fatalf("unexpected conn error payload: %+v", err_pkt.GetConnErr())
}
notice = MakeConnNoticePacket("hello")
if notice.Kind != PACKET_KIND_CONN_NOTICE || notice.GetConnNoti() == nil || notice.GetConnNoti().Text != "hello" {
t.Fatalf("unexpected conn notice packet: %+v", notice)
}
}
func TestMakeRptyAndRpxPackets(t *testing.T) {
var rpty *Packet
var req []byte
var rpx *Packet
var eof *Packet
rpty = MakeRptyStopPacket(88, "session ended")
if rpty.Kind != PACKET_KIND_RPTY_STOP || rpty.GetRptyEvt() == nil {
t.Fatalf("unexpected rpty packet: %+v", rpty)
}
if rpty.GetRptyEvt().Id != 88 || string(rpty.GetRptyEvt().Data) != "session ended" {
t.Fatalf("unexpected rpty payload: %+v", rpty.GetRptyEvt())
}
req = []byte("GET / HTTP/1.1\r\n\r\n")
rpx = MakeRpxStartPacket(12, req)
if rpx.Kind != PACKET_KIND_RPX_START || rpx.GetRpxEvt() == nil {
t.Fatalf("unexpected rpx packet: %+v", rpx)
}
if rpx.GetRpxEvt().Id != 12 || !bytes.Equal(rpx.GetRpxEvt().Data, req) {
t.Fatalf("unexpected rpx payload: %+v", rpx.GetRpxEvt())
}
eof = MakeRpxEofPacket(12)
if eof.Kind != PACKET_KIND_RPX_EOF || eof.GetRpxEvt() == nil || eof.GetRpxEvt().Id != 12 {
t.Fatalf("unexpected rpx eof packet: %+v", eof)
}
if len(eof.GetRpxEvt().Data) != 0 {
t.Fatalf("expected empty eof payload, got %q", string(eof.GetRpxEvt().Data))
}
}