Skip to content

Commit b80a652

Browse files
committed
fix(backend, transport, test): wire encoder for packet id 100 and wait for transport connection update in tests
1 parent 1ba5360 commit b80a652

1 file changed

Lines changed: 66 additions & 5 deletions

File tree

backend/pkg/transport/transport_test.go

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,17 @@ type MockBoardServer struct {
8989

9090
func NewMockBoardServer(address string) *MockBoardServer {
9191
logger := zerolog.Nop()
92+
93+
enc := presentation.NewEncoder(binary.BigEndian, logger)
94+
dec := presentation.NewDecoder(binary.BigEndian, logger)
95+
wireTestPacketCodec(enc, dec, abstraction.PacketId(100))
96+
9297
return &MockBoardServer{
9398
address: address,
9499
connections: make([]net.Conn, 0),
95100
packetsRecv: make([]abstraction.Packet, 0),
96-
encoder: presentation.NewEncoder(binary.BigEndian, logger),
97-
decoder: presentation.NewDecoder(binary.BigEndian, logger),
101+
encoder: enc,
102+
decoder: dec,
98103
}
99104
}
100105

@@ -224,9 +229,14 @@ func (s *MockBoardServer) GetConnectionCount() int {
224229
func createTestTransport(t *testing.T) (*Transport, *TestTransportAPI) {
225230
logger := zerolog.New(zerolog.NewTestWriter(t)).With().Timestamp().Logger()
226231

232+
enc := presentation.NewEncoder(binary.BigEndian, logger)
233+
dec := presentation.NewDecoder(binary.BigEndian, logger)
234+
wireTestPacketCodec(enc, dec, abstraction.PacketId(100))
235+
236+
227237
transport := NewTransport(logger).
228-
WithEncoder(presentation.NewEncoder(binary.BigEndian, logger)).
229-
WithDecoder(presentation.NewDecoder(binary.BigEndian, logger))
238+
WithEncoder(enc).
239+
WithDecoder(dec)
230240

231241
api := NewTestTransportAPI()
232242
transport.SetAPI(api)
@@ -255,6 +265,20 @@ func waitForCondition(condition func() bool, timeout time.Duration, message stri
255265
return fmt.Errorf("timeout waiting for condition: %s", message)
256266
}
257267

268+
// test wiring: register a trivial codec for a data packet id.
269+
func wireTestPacketCodec(enc *presentation.Encoder, dec *presentation.Decoder, id abstraction.PacketId) {
270+
dataEnc := data.NewEncoder(binary.BigEndian)
271+
dataDec := data.NewDecoder(binary.BigEndian)
272+
273+
// Empty descriptor = no payload values, just the id header.
274+
var desc data.Descriptor
275+
dataEnc.SetDescriptor(id, desc)
276+
dataDec.SetDescriptor(id, desc)
277+
278+
enc.SetPacketEncoder(id, dataEnc)
279+
dec.SetPacketDecoder(id, dataDec)
280+
}
281+
258282
// Unit Tests
259283
func TestTransport_Creation(t *testing.T) {
260284
logger := zerolog.Nop()
@@ -307,6 +331,42 @@ func TestTransport_SetTargetIp(t *testing.T) {
307331
}
308332
}
309333

334+
func TestTransport_InvalidInputs(t *testing.T) {
335+
transport, _ := createTestTransport(t)
336+
337+
// Test invalid ID input
338+
err := transport.SetIdTarget(0, "")
339+
if err == nil {
340+
t.Errorf("Expected error for invalid ID input, got nil")
341+
}
342+
343+
// Test invalid IP input
344+
err = transport.SetTargetIp("", "")
345+
if err == nil {
346+
t.Errorf("Expected error for invalid IP input, got nil")
347+
}
348+
}
349+
350+
func TestTransport_RemoveTargets(t *testing.T) {
351+
transport, _ := createTestTransport(t)
352+
353+
// Add entries
354+
transport.SetIdTarget(100, "TEST_BOARD")
355+
transport.SetTargetIp("192.168.1.100", "TEST_BOARD")
356+
357+
// Remove entries
358+
delete(transport.idToTarget, 100)
359+
delete(transport.ipToTarget, "192.168.1.100")
360+
361+
// Verify removal
362+
if _, exists := transport.idToTarget[100]; exists {
363+
t.Errorf("Expected ID 100 to be removed, but it still exists")
364+
}
365+
if _, exists := transport.ipToTarget["192.168.1.100"]; exists {
366+
t.Errorf("Expected IP 192.168.1.100 to be removed, but it still exists")
367+
}
368+
}
369+
310370
// Integration Tests
311371
func TestTransport_ClientServerConnection(t *testing.T) {
312372
transport, api := createTestTransport(t)
@@ -437,7 +497,8 @@ func TestTransport_PacketSending(t *testing.T) {
437497

438498
// Wait for connection
439499
err = waitForCondition(func() bool {
440-
return mockBoard.GetConnectionCount() > 0
500+
updates := api.GetConnectionUpdates()
501+
return len(updates) > 0 && updates[len(updates)-1].Target == target && updates[len(updates)-1].IsConnected
441502
}, 2*time.Second, "Should establish connection")
442503
if err != nil {
443504
t.Fatal(err)

0 commit comments

Comments
 (0)