64 lines
1.5 KiB
Go
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))
|
|
}
|
|
}
|