Files
RemoteDesk/transport/hysteria2-agent/windows_agent_control_test.go
T
曾志威 19a8e03a83
ci / rust (push) Canceled after 0s
ci / web (push) Canceled after 0s
ci / package-preview (push) Canceled after 0s
ci / package-installer (push) Canceled after 0s
ci / linux-agent (push) Canceled after 0s
ci / edge-service (push) Canceled after 0s
ci / coturn-pop (push) Canceled after 0s
ci / package-windows-host (push) Canceled after 0s
Document all-Rust migration and extend native media stack
2026-08-14 14:31:57 +08:00

112 lines
3.5 KiB
Go

package main
import (
"bufio"
"encoding/base64"
"encoding/json"
"net"
"path/filepath"
"testing"
)
func TestOpenWindowsEncodedSessionBindsDescriptorToRequest(t *testing.T) {
listener, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatal(err)
}
defer listener.Close()
serverError := make(chan error, 1)
go func() {
connection, err := listener.Accept()
if err != nil {
serverError <- err
return
}
defer connection.Close()
if _, err := connection.Write([]byte("{\"kind\":\"windows_agent_hello\"}\n")); err != nil {
serverError <- err
return
}
var request struct {
Kind string `json:"kind"`
SessionID string `json:"session_id"`
FramesPerSecond uint8 `json:"frames_per_second"`
AllowSoftwareFallback bool `json:"allow_software_fallback"`
}
if err := readBoundedAgentJSON(bufio.NewReader(connection), &request); err != nil {
serverError <- err
return
}
if request.Kind != "open_encoded_desktop" || request.SessionID != "session-1" || request.FramesPerSecond != 60 || !request.AllowSoftwareFallback {
serverError <- &testControlError{"encoded desktop request mismatch"}
return
}
response := encodedDesktopOpened{
Kind: "encoded_desktop_opened", VideoCodec: "h264",
MediaTransport: "shared_memory_encoded_access_units",
Ring: mediaRingDescriptor{
SchemaVersion: 1, SessionID: "session-1", Generation: 7, OwnerPID: 42,
RingPath: filepath.Join(t.TempDir(), "media.ring"), SlotCount: 16,
SlotBytes: 8 * 1024 * 1024, VideoTransport: "shared_memory_encoded_access_units",
AudioTransport: "separate_transport",
},
}
encoded, err := json.Marshal(response)
if err == nil {
encoded = append(encoded, '\n')
_, err = connection.Write(encoded)
}
serverError <- err
}()
connection, descriptor, err := openWindowsEncodedSession(listener.Addr().String(), "session-1", 60, true)
if err != nil {
t.Fatal(err)
}
defer connection.Close()
if descriptor.Generation != 7 || descriptor.SessionID != "session-1" {
t.Fatalf("unexpected descriptor: %+v", descriptor)
}
if err := <-serverError; err != nil {
t.Fatal(err)
}
}
func TestWindowsAgentControlRejectsRemoteAndMismatchedDescriptor(t *testing.T) {
if validateAgentControlAddress("192.0.2.10:39501") == nil {
t.Fatal("remote Windows Agent control address was accepted")
}
descriptor := mediaRingDescriptor{
SchemaVersion: 1, SessionID: "other", Generation: 1, OwnerPID: 1,
RingPath: filepath.Join(t.TempDir(), "media.ring"), SlotCount: 16,
SlotBytes: 1024, VideoTransport: "shared_memory_encoded_access_units",
AudioTransport: "separate_transport",
}
if validateMediaRingDescriptor(descriptor, "session-1") == nil {
t.Fatal("descriptor for another session was accepted")
}
}
func TestWindowsAgentPipeAuthenticationMatchesRustWireVector(t *testing.T) {
key := make([]byte, 32)
nonce := make([]byte, 32)
for index := range key {
key[index] = byte(index)
nonce[index] = byte(index + 32)
}
actual := base64.RawURLEncoding.EncodeToString(windowsAgentPipeMAC(key, nonce))
const expected = "KinBDOBvVhz0eRv37iahq8BO0z8QdiI0Qnx7HZmcxIk"
if actual != expected {
t.Fatalf("unexpected Agent Pipe MAC: %s", actual)
}
if validateAgentControlAddress(`\\.\pipe\RemoteDesk\windows-agent`) != nil {
t.Fatal("RemoteDesk Agent Pipe was rejected")
}
if validateAgentControlAddress(`\\.\pipe\Other\windows-agent`) == nil {
t.Fatal("Pipe outside the RemoteDesk namespace was accepted")
}
}
type testControlError struct{ message string }
func (e *testControlError) Error() string { return e.message }