Skip to content

Commit 555c46f

Browse files
committed
Handle TX_ACK with nil payload (no error).
1 parent 485fbe8 commit 555c46f

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

gateway/backend.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,11 @@ func (b *Backend) handleTXACK(addr *net.UDPAddr, data []byte) error {
378378
if p.Payload != nil {
379379
txAck := newTXAckFromTXPKACK(p.GatewayMAC, p.RandomToken, p.Payload.TXPKACK)
380380
b.txAckChan <- txAck
381+
} else {
382+
b.txAckChan <- gw.TXAck{
383+
MAC: p.GatewayMAC,
384+
Token: p.RandomToken,
385+
}
381386
}
382387

383388
return nil

gateway/backend_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,67 @@ func TestBackend(t *testing.T) {
5454
})
5555
})
5656

57+
Convey("When sending a TX_ACK packet (no error)", func() {
58+
p := TXACKPacket{
59+
ProtocolVersion: ProtocolVersion2,
60+
RandomToken: 12345,
61+
GatewayMAC: [8]byte{1, 2, 3, 4, 5, 6, 7, 8},
62+
}
63+
b, err := p.MarshalBinary()
64+
So(err, ShouldBeNil)
65+
_, err = gwConn.WriteToUDP(b, backendAddr)
66+
So(err, ShouldBeNil)
67+
68+
Convey("Then the ack is returned by the ack channel", func() {
69+
ack := <-backend.TXAckChan()
70+
So(ack, ShouldResemble, gw.TXAck{MAC: p.GatewayMAC, Token: p.RandomToken})
71+
})
72+
})
73+
74+
Convey("When sending a TX_ACK packet (with error)", func() {
75+
p := TXACKPacket{
76+
ProtocolVersion: ProtocolVersion2,
77+
RandomToken: 12345,
78+
GatewayMAC: [8]byte{1, 2, 3, 4, 5, 6, 7, 8},
79+
Payload: &TXACKPayload{
80+
TXPKACK: TXPKACK{
81+
Error: gw.ErrGPSUnlocked,
82+
},
83+
},
84+
}
85+
b, err := p.MarshalBinary()
86+
So(err, ShouldBeNil)
87+
_, err = gwConn.WriteToUDP(b, backendAddr)
88+
So(err, ShouldBeNil)
89+
90+
Convey("Then the ack is returned by the ack channel", func() {
91+
ack := <-backend.TXAckChan()
92+
So(ack, ShouldResemble, gw.TXAck{MAC: p.GatewayMAC, Token: p.RandomToken, Error: gw.ErrGPSUnlocked})
93+
})
94+
})
95+
96+
Convey("When sending a TX_ACK packet (with error 'NONE')", func() {
97+
p := TXACKPacket{
98+
ProtocolVersion: ProtocolVersion2,
99+
RandomToken: 12345,
100+
GatewayMAC: [8]byte{1, 2, 3, 4, 5, 6, 7, 8},
101+
Payload: &TXACKPayload{
102+
TXPKACK: TXPKACK{
103+
Error: "NONE",
104+
},
105+
},
106+
}
107+
b, err := p.MarshalBinary()
108+
So(err, ShouldBeNil)
109+
_, err = gwConn.WriteToUDP(b, backendAddr)
110+
So(err, ShouldBeNil)
111+
112+
Convey("Then the ack is returned by the ack channel", func() {
113+
ack := <-backend.TXAckChan()
114+
So(ack, ShouldResemble, gw.TXAck{MAC: p.GatewayMAC, Token: p.RandomToken})
115+
})
116+
})
117+
57118
Convey("When sending a PUSH_DATA packet with stats", func() {
58119
p := PushDataPacket{
59120
ProtocolVersion: ProtocolVersion2,

0 commit comments

Comments
 (0)