Files
rdplib/plugin/rdpedisp/rdpedisp_test.go
T

64 lines
1.5 KiB
Go

package rdpedisp
import (
"encoding/binary"
"testing"
)
func TestRdpedispQueuesBeforeCaps(t *testing.T) {
h := NewHandler(1920, 1080)
var sent [][]byte
h.SetSendFunc(func(data []byte) {
copied := make([]byte, len(data))
copy(copied, data)
sent = append(sent, copied)
})
// OnChannelCreated should NOT send anything
h.OnChannelCreated()
if len(sent) != 0 {
t.Fatalf("expected 0 packets before CAPS, got %d", len(sent))
}
// Server sends CAPS PDU
capsData := make([]byte, 20)
binary.LittleEndian.PutUint32(capsData[0:], pduTypeCaps)
binary.LittleEndian.PutUint32(capsData[4:], 20)
binary.LittleEndian.PutUint32(capsData[8:], 16) // MaxNumMonitors = 16
binary.LittleEndian.PutUint32(capsData[12:], 4096)
binary.LittleEndian.PutUint32(capsData[16:], 2048)
h.Process(capsData)
if len(sent) != 1 {
t.Fatalf("expected 1 queued packet sent after CAPS, got %d", len(sent))
}
pdu := sent[0]
if len(pdu) < 16+monitorLayoutSize {
t.Fatalf("invalid pdu length: %d", len(pdu))
}
pduType := binary.LittleEndian.Uint32(pdu[0:])
if pduType != pduTypeMonitorLayout {
t.Fatalf("expected pduTypeMonitorLayout (2), got %d", pduType)
}
w := binary.LittleEndian.Uint32(pdu[16+12:])
hVal := binary.LittleEndian.Uint32(pdu[16+16:])
if w != 1920 || hVal != 1080 {
t.Fatalf("expected 1920x1080, got %dx%d", w, hVal)
}
// Subsequent SendMonitorLayout sends immediately
h.SendMonitorLayout([]Monitor{
{
Flags: MonitorFlagPrimary,
Width: 1280,
Height: 720,
},
})
if len(sent) != 2 {
t.Fatalf("expected 2 packets, got %d", len(sent))
}
}