Expect(fakeEventEmitter.GetMessages()[0].Event.(*events.CounterEvent)).To(Equal(&events.CounterEvent{ Name: proto.String("TruncatingBuffer.totalDroppedMessages"), Delta: proto.Uint64(uint64(3)), })) }) Context("when the buffer fills once", func() { tracksDroppedMessagesAnd("drops all the messages", 3, 3) }) Context("when the buffer fills multiple times ", func() { var receiveEvents int var sendLog int JustBeforeEach(func() { outputChannel := buffer.GetOutputChannel() for i := 0; i < receiveEvents; i++ { Eventually(outputChannel).Should(Receive()) } for i := 0; i < sendLog; i++ { sendLogMessages("message X", inMessageChan) } }) Context("no event is read and buffer fills a second time", func() { BeforeEach(func() { receiveEvents = 0 sendLog = 1 })
}) It("keeps track of dropped messages", func() { Eventually(fakeEventEmitter.GetMessages).Should(HaveLen(1)) Expect(fakeEventEmitter.GetMessages()[0].Event.(*events.CounterEvent)).To(Equal(&events.CounterEvent{ Name: proto.String("TruncatingBuffer.totalDroppedMessages"), Delta: proto.Uint64(uint64(total)), })) }) } Context("when the buffer fills once", func() { JustBeforeEach(func() { Expect(buffer.GetDroppedMessageCount()).To(BeZero()) firstBuffer := buffer.GetOutputChannel() sendLogMessages("message 1", inMessageChan) sendLogMessages("message 2", inMessageChan) sendLogMessages("message 3", inMessageChan) sendLogMessages("message 4", inMessageChan) Eventually(buffer.GetOutputChannel).ShouldNot(Equal(firstBuffer)) }) tracksDroppedMessages("drops all the messages", 3, 3) Context("when the buffer fills multiple times", func() { var receiveEvents int var sendLog int JustBeforeEach(func() { outputChannel := buffer.GetOutputChannel()