package main import ( "github.com/stretchr/testify/assert" "sync" "testing" "time" ) type MockSender struct { messages []GenericMessage } func (self *MockSender) Send(msg GenericMessage) error { self.messages = append(self.messages, msg) return nil } func TestMessageThrottling(t *testing.T) { testEvents := make(chan GenericMessage) wg := sync.WaitGroup{} mockSender := MockSender{make([]GenericMessage, 0)} go tg_sender_worker(testEvents, &mockSender, &wg, time.Millisecond) testEvents <- GenericMessage{123, "test1"} testEvents <- GenericMessage{124, "test3"} testEvents <- GenericMessage{123, "test2"} testEvents <- GenericMessage{124, "test4"} time.Sleep(time.Millisecond * 10) testEvents <- GenericMessage{123, "test5"} time.Sleep(time.Millisecond * 10) close(testEvents) assert.Len(t, mockSender.messages, 3) assert.Contains(t, mockSender.messages, GenericMessage{123, "test1\ntest2\n"}) wg.Wait() }