117 lines
2.6 KiB
Go
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)
|
|
}
|
|
}
|