Files
OpsLog/catlink_test.go
rouggy bd540ef18b feat(cat): three transports for Kenwood/Elecraft, chosen not inferred
USB, RS-232-to-Ethernet, and the radio's own network protocol are three
different things, so they are three entries in one dropdown — and the
transport is now a stored setting rather than something deduced from
which field happened to be filled in. The old rule (a host wins whenever
it is not empty) is invisible from the settings page: someone who typed a
host months ago and later set a COM port had a radio that never answered
and nothing on screen to say why.

The third entry is named and refused, with the reason. It is a session
with its own framing and login, not the CAT byte stream over a socket, so
it has to be written per radio and against one — and a K4 owner reading
this list should be told that, not left wondering whether the empty
address field was the problem.

The upgrade reads an older install from what it has: a configured host
means the bridge, which is what the previous code used it for. Pinned by
a test, including the case that matters after the fact — choosing USB
with a stale host still stored gives the COM port.
2026-08-25 17:46:14 +02:00

34 lines
1.4 KiB
Go

package main
import "testing"
// The transport is a stored choice now, but installs exist that predate it and
// hold only a host. Reading those as "bridge" is what keeps a working station
// working across the upgrade — the old code used a host for exactly that.
func TestTheLinkIsReadFromAnOlderInstall(t *testing.T) {
cases := []struct {
link, host, want string
}{
{"", "", kenwoodLinkUSB}, // nothing configured
{"", "192.168.1.50:4999", kenwoodLinkBridge}, // upgraded: host only
{kenwoodLinkUSB, "192.168.1.50:4999", kenwoodLinkUSB}, // chose USB, host left behind
{kenwoodLinkBridge, "", kenwoodLinkBridge},
{kenwoodLinkNative, "", kenwoodLinkNative},
{"nonsense", "", kenwoodLinkUSB}, // a value nobody wrote: fall back, don't guess
}
for _, c := range cases {
if got := kenwoodLinkOr(c.link, c.host); got != c.want {
t.Errorf("link=%q host=%q → %q, want %q", c.link, c.host, got, c.want)
}
}
}
// The one that matters after the fact: an operator who picks USB while an old
// host is still stored must get the COM port. The previous code preferred the
// host whenever it was non-empty, which is invisible from the settings page.
func TestChoosingUSBBeatsALeftoverHost(t *testing.T) {
if got := kenwoodLinkOr(kenwoodLinkUSB, "10.0.0.9:4999"); got != kenwoodLinkUSB {
t.Fatalf("a leftover host overrode the operator's choice: %q", got)
}
}