public async void GivenEventConsumer_WhenEventConsumerThrowsException_ThenRetryEventConsumer_Test() { var retries = 0; var initialBatch = new List <EventMessage>() { new EventMessage("0", new ReadOnlyMemory <byte>(), 1, 1, new DateTime(2020, 12, 31, 5, 10, 20), new Dictionary <string, object>(), new ReadOnlyDictionary <string, object>(new Dictionary <string, object>())) }; var logger = Substitute.For <ITelemetryLogger>(); var eventConsumer = Substitute.For <IEventConsumer>(); // fail to consume events 3 times in a row, then succeed eventConsumer.When(x => x.ConsumeAsync(initialBatch)) .Do(x => { if (retries < 3) { retries++; throw new Exception("failure"); } }); var eventEventConsumers = new List <IEventConsumer>() { eventConsumer }; var eventConsumerService = new EventConsumerService(eventEventConsumers, logger); // 3 retries followed by a successful call await eventConsumerService.ConsumeEvents(initialBatch); await eventConsumer.Received(4).ConsumeAsync(initialBatch); }
public async void GivenEventConsumer_WhenEventConsumerThrowsException_ThenExceptionIsLogged_() { var initialBatch = new List <EventMessage>() { new EventMessage("0", new ReadOnlyMemory <byte>(), 1, 1, new DateTime(2020, 12, 31, 5, 10, 20), new Dictionary <string, object>(), new ReadOnlyDictionary <string, object>(new Dictionary <string, object>())) }; var logger = Substitute.For <ITelemetryLogger>(); var eventConsumer = Substitute.For <IEventConsumer>(); eventConsumer.ConsumeAsync(Arg.Any <IEnumerable <IEventMessage> >()).ReturnsForAnyArgs(Task.FromException(new Exception("failure"))); var eventEventConsumers = new List <IEventConsumer>() { eventConsumer }; var eventConsumerService = new EventConsumerService(eventEventConsumers, logger); await eventConsumerService.ConsumeEvents(initialBatch); logger.Received(1).LogError(Arg.Is <Exception>(ex => ex.Message == "failure")); await eventConsumer.Received(1).ConsumeAsync(initialBatch); }