package transport import ( "errors" "sync/atomic" "testing" ) // mockSender implements Sender for testing. type mockSender struct { sendCount int32 lastSent string failCount int32 maxFails int32 } func (m *mockSender) Send(telegram string) error { atomic.AddInt32(&m.sendCount, 1) m.lastSent = telegram if atomic.LoadInt32(&m.failCount) < atomic.LoadInt32(&m.maxFails) { atomic.AddInt32(&m.failCount, 1) return errors.New("mock send error") } return nil } func (m *mockSender) Close() error { return nil } func TestMultiSender_SendToAll(t *testing.T) { s1 := &mockSender{} s2 := &mockSender{} ms := NewMultiSender(s1, s2) err := ms.Send("ZCZC TEST NNNN") if err != nil { t.Fatalf("MultiSender.Send() failed: %v", err) } if s1.sendCount != 1 { t.Errorf("expected s1.sendCount=1, got %d", s1.sendCount) } if s2.sendCount != 1 { t.Errorf("expected s2.sendCount=1, got %d", s2.sendCount) } } func TestMultiSender_Empty(t *testing.T) { ms := NewMultiSender() err := ms.Send("ZCZC TEST NNNN") if err != nil { t.Fatalf("MultiSender.Send() with no senders failed: %v", err) } } func TestPulsarSender_Interface(t *testing.T) { var s Sender = &mockSender{} _ = s } func TestTCPSender_Interface(t *testing.T) { s := NewTCPSender("127.0.0.1:9999") var _ Sender = s }