public void OldEventsAreResentAfterFailure() { var firstEventGroup = new[] { new Event("TEST1", new List <KeyValuePair <string, object> >()) }; var secondEventGroup = new[] { new Event("TEST2", new List <KeyValuePair <string, object> >()) }; var senderMock = new Mock <IEventSender>(); var storageMock = new InMemoryStorage <IList <Event> >(); var storingEventSenderProxy = new StoringEventSenderProxy(senderMock.Object, storageMock); senderMock.Setup(s => s.SendEvents(firstEventGroup, It.IsAny <Action <bool> >())).Callback <IList <Event>, Action <bool> >((e, c) => c(false)); storingEventSenderProxy.SendEvents(firstEventGroup, isSuccess => { Assert.False(isSuccess); }); var successfullySent = new List <IList <Event> >(); senderMock.Setup(s => s.SendEvents(It.IsAny <IList <Event> >(), It.IsAny <Action <bool> >())) .Callback <IList <Event>, Action <bool> >((e, c) => { successfullySent.Add(e); c(true); }); storingEventSenderProxy.SendEvents(secondEventGroup, isSuccess => { Assert.True(isSuccess); }); Assert.Contains(firstEventGroup, successfullySent); Assert.Contains(secondEventGroup, successfullySent); Assert.Equal(2, successfullySent.Count); }
public void StoreIsCalledOnSuccessSend() { var firstEvent = new Event("TEST1", new List <KeyValuePair <string, object> >()); var senderMock = new Mock <IEventSender>(); senderMock.Setup(s => s.SendEvents(It.IsAny <IList <Event> >(), It.IsAny <Action <bool> >())) .Callback <IList <Event>, Action <bool> >((e, c) => c(false)); var storageMock = new InMemoryStorage <IList <Event> >(); var storingEventSenderProxy = new StoringEventSenderProxy(senderMock.Object, storageMock); storingEventSenderProxy.SendEvents(new List <Event>() { firstEvent }, isSuccess => { }); Assert.True(storageMock.HasData); }
public void AllItemsAreEitherSentOrInStorage() { var eventsToSend = Enumerable.Range(1, 1000) .Select(i => new Event("TEST_" + i, new List <KeyValuePair <string, object> >())) .ToList(); var eventsThatWereSent = new List <Event>(); var rnd = new Random(); var sender = new DelegateEventSender((e, callback) => { if (rnd.Next(100) < 5) // 5% of events are sent successfuly { eventsThatWereSent.AddRange(e); callback(true); } else { callback(false); } }); var storage = new InMemoryStorage <IList <Event> >(); var proxy = new StoringEventSenderProxy(sender, storage); var dispatcher = new BufferingEventDispatcher(proxy) { MaxQueueSize = 1 }; foreach (var e in eventsToSend) { dispatcher.Dispatch(e); } Assert.Equal(1000, eventsThatWereSent.Count + storage.Load().Count); }