Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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();
        }
Example #4
0
        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);
            }
        }