package antgenius import "testing" // Which antenna a port SHOWS. // // Reported on an 8x2: port A was correctly on the 80 m vertical, then a few // seconds later both A and B were drawn on the same beam. The cause is that only // ONE port can hold the transmit antenna, so the device reports the same txant // on both — and the display preferred txant. The RX antenna is the per-port // selection, and the only thing Activate sets, so it has to win. func TestPortShowsRXAntenna(t *testing.T) { cases := []struct { name string msg string wantPort int wantAnt int }{ { // The reported case: port A listening on antenna 2 while the shared TX // antenna is 1. Before the fix this drew port A on antenna 1. name: "rx and tx disagree — rx wins", msg: "port 1 rxant=2 txant=1 tx=0", wantPort: 1, wantAnt: 2, }, { name: "they agree", msg: "port 2 rxant=3 txant=3 tx=0", wantPort: 2, wantAnt: 3, }, { // A port with no RX antenna still shows something meaningful. name: "no rx antenna — fall back to tx", msg: "port 1 rxant=0 txant=4 tx=1", wantPort: 1, wantAnt: 4, }, { name: "nothing selected", msg: "port 2 rxant=0 txant=0 tx=0", wantPort: 2, wantAnt: 0, }, } for _, c := range cases { cl := New("host", 0, "") cl.parsePort(c.msg) st := cl.GetStatus() got := st.PortA if c.wantPort == 2 { got = st.PortB } if got != c.wantAnt { t.Errorf("%s: port %d shows antenna %d, want %d (%q)", c.name, c.wantPort, got, c.wantAnt, c.msg) } } } // The two ports must stay independent: a message about one must never move the // other, which is the shape the operator actually saw on screen. func TestPortsAreIndependent(t *testing.T) { c := New("host", 0, "") c.parsePort("port 1 rxant=2 txant=0 tx=0") c.parsePort("port 2 rxant=1 txant=1 tx=1") st := c.GetStatus() if st.PortA != 2 { t.Errorf("port A = %d, want 2 — port B's message moved it", st.PortA) } if st.PortB != 1 { t.Errorf("port B = %d, want 1", st.PortB) } if !st.TxB || st.TxA { t.Errorf("transmit flags crossed: TxA=%v TxB=%v", st.TxA, st.TxB) } }