114 lines
3.2 KiB
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))
|
|
}
|
|
}
|