rs2322tcp/internal/client/virtual_port_test.go
2026-08-10 16:20:28 +02:00

117 lines
2.6 KiB
Go

/*
* ============================================================================
* Projekt.....: rs2322tcp
* Datei.......: internal/client/virtual_port_test.go
* Copyright (C) 2026 Dieter Lang
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* Beschreibung:
* Tests für die lokale virtuelle seriellen Schnittstelle.
* ============================================================================
*/
package client
import "testing"
///////////////////////////////////////////////////////////////////////////////
// Tests
///////////////////////////////////////////////////////////////////////////////
func TestNewVirtualPort(t *testing.T) {
serial := newTestVirtualSerial(nil)
port := NewVirtualPort("/dev/ttyUSB100", serial)
if port == nil {
t.Fatal("NewVirtualPort() returned nil")
}
if port.Path() != "/dev/ttyUSB100" {
t.Errorf("Path() = %q, want %q",
port.Path(), "/dev/ttyUSB100")
}
}
func TestVirtualPortRead(t *testing.T) {
expected := []byte{0x46, 0x41, 0x00, 0x10, 0x0D}
serial := newTestVirtualSerial(expected)
port := NewVirtualPort("/dev/ttyUSB100", serial)
buffer := make([]byte, len(expected))
n, err := port.Read(buffer)
if err != nil {
t.Fatalf("Read() failed: %v", err)
}
if n != len(expected) {
t.Fatalf("Read() returned %d bytes, want %d",
n, len(expected))
}
for i := range expected {
if buffer[i] != expected[i] {
t.Errorf("buffer[%d] = %02X, want %02X",
i, buffer[i], expected[i])
}
}
}
func TestVirtualPortWrite(t *testing.T) {
serial := newTestVirtualSerial(nil)
port := NewVirtualPort("/dev/ttyUSB100", serial)
data := []byte{0x46, 0x41, 0x00, 0x10, 0x0D}
n, err := port.Write(data)
if err != nil {
t.Fatalf("Write() failed: %v", err)
}
if n != len(data) {
t.Fatalf("Write() returned %d, want %d",
n, len(data))
}
written := serial.Written()
if len(written) != len(data) {
t.Fatalf("underlying serial received %d bytes, want %d",
len(written), len(data))
}
for i := range data {
if written[i] != data[i] {
t.Errorf("written[%d] = %02X, want %02X",
i, written[i], data[i])
}
}
}
func TestVirtualPortClose(t *testing.T) {
serial := newTestVirtualSerial(nil)
port := NewVirtualPort("/dev/ttyUSB100", serial)
if err := port.Close(); err != nil {
t.Fatalf("Close() failed: %v", err)
}
// Ein zweiter Close darf keinen Fehler erzeugen.
if err := port.Close(); err != nil {
t.Fatalf("second Close() failed: %v", err)
}
}
func TestVirtualPortNil(t *testing.T) {
var port *VirtualPort
if port.Path() != "" {
t.Errorf("nil Path() = %q, want empty string", port.Path())
}
if err := port.Close(); err != nil {
t.Errorf("nil Close() failed: %v", err)
}
}