public async Task ProduceNumersAsyncTest_PassNoData_ThrowException_ShouldLogException() { var loggerMock = new Mock <ILogger>(); loggerMock.Setup(s => s.LogException((It.IsAny <Exception>()))); var producerMock = new Mock <IProducer <Null, string> >(); producerMock .Setup(s => s.ProduceAsync(It.IsAny <string>(), It.IsAny <Message <Null, string> >(), It.IsAny <CancellationToken>())) .Throws(new KafkaException(new Error(ErrorCode.IllegalGeneration))); producerMock.Setup(s => s.Dispose()); var timeProviderMock = new Mock <ITimeProvider>(); timeProviderMock.Setup(s => s.GetMilisecondsForMinutes(It.IsAny <int>())).Returns(6); timeProviderMock.Setup(s => s.GetMilisecondsForSeconds(It.IsAny <int>())).Returns(6000); var producer = new NumberProducer(producerMock.Object, loggerMock.Object, timeProviderMock.Object, "TestTopic"); using (producer) { await producer.ProduceNumbersAsync(); } producerMock.Verify(v => v.ProduceAsync(It.IsAny <string>(), It.IsAny <Message <Null, string> >(), It.IsAny <CancellationToken>()), Times.Once); producerMock.Verify(v => v.Dispose(), Times.Once); timeProviderMock.Verify(v => v.GetMilisecondsForMinutes(It.IsAny <int>()), Times.Once); timeProviderMock.Verify(v => v.GetMilisecondsForSeconds(It.IsAny <int>()), Times.Once); loggerMock.Verify(v => v.LogException(It.IsAny <Exception>()), Times.Once); }
public async Task ProduceNumersAsyncTest_PassNoData_ShouldCompleteSuccessfully() { var loggerMock = new Mock <ILogger>(); loggerMock.Setup(s => s.LogException((It.IsAny <Exception>()))); var producerMock = new Mock <IProducer <Null, string> >(); producerMock.Setup(s => s.ProduceAsync(It.IsAny <string>(), It.IsAny <Message <Null, string> >(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(new DeliveryReport <Null, string>())); producerMock.Setup(s => s.Dispose()); var timeProviderMock = new Mock <ITimeProvider>(); timeProviderMock.Setup(s => s.GetMilisecondsForMinutes(It.IsAny <int>())).Returns(6); timeProviderMock.Setup(s => s.GetMilisecondsForSeconds(It.IsAny <int>())).Returns(6000); var producer = new NumberProducer(producerMock.Object, loggerMock.Object, timeProviderMock.Object, "TestTopic"); using (producer) { await producer.ProduceNumbersAsync(); } producerMock.Verify(v => v.ProduceAsync(It.IsAny <string>(), It.IsAny <Message <Null, string> >(), It.IsAny <CancellationToken>()), Times.AtLeastOnce); producerMock.Verify(v => v.Dispose(), Times.Once); timeProviderMock.Verify(v => v.GetMilisecondsForMinutes(It.IsAny <int>()), Times.Once); timeProviderMock.Verify(v => v.GetMilisecondsForSeconds(It.IsAny <int>()), Times.Once); loggerMock.Verify(v => v.LogException(It.IsAny <Exception>()), Times.Never); }
static async Task Main(string[] args) { Console.WriteLine("If you want to stop the application at any given type press the [Escape] key on the keyboard."); Console.WriteLine(); Console.WriteLine("If you have read the above information, please feel free to press any key to continue..."); Console.ReadLine(); var source = new CancellationTokenSource(); var token = source.Token; #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed Task.Run(() => { while (true) { var key = Console.ReadKey(); if (key.Key == ConsoleKey.Escape) { source.Cancel(); return; } } }); #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed var config = new ProducerConfig { BootstrapServers = "localhost:9092" }; var logger = new Logger(); var timeProvider = new TimeProvider(); Console.WriteLine("Producing numbers..."); using (var producer = new NumberProducer(new Producer <Null, string>(config), logger, timeProvider, "NumberStorage")) { try { await producer.ProduceNumbersAsync(token); Console.WriteLine("Numbers have been successfully produced."); } catch (OperationCanceledException ex) { logger.LogInfo(ex.Message); } catch (Exception ex) { Console.WriteLine($"Failed due to: {ex.Message}. Press any key to close the app..."); Console.ReadLine(); return; } } Console.WriteLine("Press any key to close the app..."); Console.ReadLine(); }
public async Task ProduceNumersAsyncTest_PassNoData_ShouldCancel() { var producerMock = new Mock <IProducer <Null, string> >(); producerMock.Setup(s => s.Dispose()); var timeProviderMock = new Mock <ITimeProvider>(); timeProviderMock.Setup(s => s.GetMilisecondsForMinutes(It.IsAny <int>())).Returns(6); timeProviderMock.Setup(s => s.GetMilisecondsForSeconds(It.IsAny <int>())).Returns(6000); var source = new CancellationTokenSource(); var token = source.Token; source.Cancel(); var producer = new NumberProducer(producerMock.Object, null, timeProviderMock.Object, "TestTopic"); using (producer) { await producer.ProduceNumbersAsync(token); } }