rs2322tcp/internal/client/pty_linux_test.go
2026-08-10 12:42:22 +02:00

112 lines
2.2 KiB
Go

//go:build linux
package client
import (
"bytes"
"testing"
"golang.org/x/sys/unix"
)
func TestVirtualSerialPTYByteStream(t *testing.T) {
serial, err := newVirtualSerial()
if err != nil {
t.Fatalf("newVirtualSerial() failed: %v", err)
}
defer serial.Close()
path := serial.Path()
if path == "" {
t.Fatal("virtual serial returned an empty path")
}
t.Logf("virtual serial path: %s", path)
// Die externe Software wird durch diesen direkten Zugriff
// auf den PTY-Slave simuliert.
slaveFD, err := unix.Open(
path,
unix.O_RDWR|unix.O_NOCTTY,
0,
)
if err != nil {
t.Fatalf("open PTY slave %s: %v", path, err)
}
defer unix.Close(slaveFD)
expected := make([]byte, 256)
for i := range expected {
expected[i] = byte(i)
}
// ------------------------------------------------------------
// Slave -> Client
// ------------------------------------------------------------
n, err := unix.Write(slaveFD, expected)
if err != nil {
t.Fatalf("write to PTY slave failed: %v", err)
}
if n != len(expected) {
t.Fatalf(
"write to PTY slave incomplete: got %d, want %d",
n,
len(expected),
)
}
received := make([]byte, len(expected))
offset := 0
for offset < len(received) {
n, err := serial.Read(received[offset:])
if err != nil {
t.Fatalf("read from virtual serial failed: %v", err)
}
offset += n
}
if !bytes.Equal(received, expected) {
t.Fatalf("Slave -> Client data mismatch")
}
// ------------------------------------------------------------
// Client -> Slave
// ------------------------------------------------------------
n, err = serial.Write(expected)
if err != nil {
t.Fatalf("write to virtual serial failed: %v", err)
}
if n != len(expected) {
t.Fatalf(
"write from virtual serial incomplete: got %d, want %d",
n,
len(expected),
)
}
received = make([]byte, len(expected))
offset = 0
for offset < len(received) {
n, err := unix.Read(slaveFD, received[offset:])
if err != nil {
t.Fatalf("read from PTY slave failed: %v", err)
}
offset += n
}
if !bytes.Equal(received, expected) {
t.Fatalf("Client -> Slave data mismatch")
}
t.Log("256-byte bidirectional PTY test successful")
}