159 lines
3.5 KiB
Go
159 lines
3.5 KiB
Go
/*
|
|
* ============================================================================
|
|
* Projekt.....: rs2322tcp
|
|
* Datei.......: internal/client/device_test.go
|
|
* Copyright (C) 2026 Dieter Lang
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*
|
|
* Beschreibung:
|
|
* Tests für die Zuordnung lokaler virtueller Ports zu den vom Server
|
|
* gemeldeten Remote-Geräten.
|
|
* ============================================================================
|
|
*/
|
|
package client
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.lang-dieter.de/rs2322tcp/internal/config"
|
|
"git.lang-dieter.de/rs2322tcp/internal/transport"
|
|
)
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Test data
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
func testRemoteDevices() []transport.RemoteDeviceInfo {
|
|
return []transport.RemoteDeviceInfo{
|
|
{
|
|
ID: "radio",
|
|
Name: "Radio",
|
|
BaudRate: 9600,
|
|
DataBits: 8,
|
|
Parity: "none",
|
|
StopBits: 1,
|
|
DataPort: 50123,
|
|
},
|
|
{
|
|
ID: "rotor",
|
|
Name: "Rotor",
|
|
BaudRate: 4800,
|
|
DataBits: 8,
|
|
Parity: "none",
|
|
StopBits: 1,
|
|
DataPort: 50124,
|
|
},
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Tests
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
func TestFindRemoteDevice(t *testing.T) {
|
|
devices := testRemoteDevices()
|
|
|
|
virtualPort := config.VirtualPortConfig{
|
|
Port: "/dev/ttyUSB100",
|
|
RemoteDevice: "radio",
|
|
}
|
|
|
|
got, err := findRemoteDevice(virtualPort, devices)
|
|
if err != nil {
|
|
t.Fatalf("findRemoteDevice: %v", err)
|
|
}
|
|
|
|
if got.ID != "radio" {
|
|
t.Fatalf("ID = %q, want %q", got.ID, "radio")
|
|
}
|
|
|
|
if got.DataPort != 50123 {
|
|
t.Fatalf("DataPort = %d, want %d", got.DataPort, 50123)
|
|
}
|
|
}
|
|
|
|
func TestFindRemoteDeviceRotor(t *testing.T) {
|
|
devices := testRemoteDevices()
|
|
|
|
virtualPort := config.VirtualPortConfig{
|
|
Port: "/dev/ttyUSB101",
|
|
RemoteDevice: "rotor",
|
|
}
|
|
|
|
got, err := findRemoteDevice(virtualPort, devices)
|
|
if err != nil {
|
|
t.Fatalf("findRemoteDevice: %v", err)
|
|
}
|
|
|
|
if got.ID != "rotor" {
|
|
t.Fatalf("ID = %q, want %q", got.ID, "rotor")
|
|
}
|
|
|
|
if got.DataPort != 50124 {
|
|
t.Fatalf("DataPort = %d, want %d", got.DataPort, 50124)
|
|
}
|
|
}
|
|
|
|
func TestFindRemoteDeviceEmptyID(t *testing.T) {
|
|
devices := testRemoteDevices()
|
|
|
|
virtualPort := config.VirtualPortConfig{
|
|
Port: "/dev/ttyUSB100",
|
|
}
|
|
|
|
_, err := findRemoteDevice(virtualPort, devices)
|
|
if err == nil {
|
|
t.Fatal("expected error for empty remote device")
|
|
}
|
|
|
|
if !strings.Contains(err.Error(), "remote device is empty") {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestFindRemoteDeviceNotFound(t *testing.T) {
|
|
devices := testRemoteDevices()
|
|
|
|
virtualPort := config.VirtualPortConfig{
|
|
Port: "/dev/ttyUSB100",
|
|
RemoteDevice: "unknown",
|
|
}
|
|
|
|
_, err := findRemoteDevice(virtualPort, devices)
|
|
if err == nil {
|
|
t.Fatal("expected error for unknown remote device")
|
|
}
|
|
|
|
if !strings.Contains(err.Error(), `remote device "unknown" not found`) {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestFindRemoteDeviceAmbiguous(t *testing.T) {
|
|
devices := []transport.RemoteDeviceInfo{
|
|
{
|
|
ID: "radio",
|
|
DataPort: 50123,
|
|
},
|
|
{
|
|
ID: "radio",
|
|
DataPort: 50125,
|
|
},
|
|
}
|
|
|
|
virtualPort := config.VirtualPortConfig{
|
|
Port: "/dev/ttyUSB100",
|
|
RemoteDevice: "radio",
|
|
}
|
|
|
|
_, err := findRemoteDevice(virtualPort, devices)
|
|
if err == nil {
|
|
t.Fatal("expected error for ambiguous remote device")
|
|
}
|
|
|
|
if !strings.Contains(err.Error(), `remote device "radio" is ambiguous`) {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
}
|