Esempio n. 1
0
        public async Task GivenOneMessageInQueue_WhenReceivedAndProcessingStopped_ThenExpectExceptionLogged()
        {
            //arrange
            string testMessageId            = "1";
            string expectedExceptionMessage = $"Processing of message: 1, UOWId:  has been cancelled.";

            var testBatch = new MessageBatchResult <RingbaUOW>
            {
                Messages = new List <MessageWrapper <RingbaUOW> > {
                    new MessageWrapper <RingbaUOW> {
                        Id = testMessageId, Body = new RingbaUOW()
                    }
                }
            };

            ImplementMeService service = null;

            var logService = Substitute.For <ILogService>();

            logService.LogAsync(Arg.Any <string>(),
                                Arg.Any <string>(),
                                Arg.Any <LOG_LEVEL>(),
                                Arg.Any <object[]>())
            .Returns(Task.CompletedTask);

            var subMessageQueService = Substitute.For <IMessageQueService>();

            subMessageQueService.GetMessagesFromQueAsync <RingbaUOW>(
                Arg.Any <int>(),
                Arg.Any <int>(),
                Arg.Any <int>())
            .Returns(Task.FromResult(testBatch))
            .AndDoes(p => service.Stop());

            subMessageQueService.UpdateMessagesAsync(Arg.Any <IEnumerable <UpdateBatchRequest> >())
            .Returns(Task.FromResult(new ActionResult()));

            var subMessageProcessingService = Substitute.For <IMessageProcessService>();

            subMessageProcessingService.ProccessMessageAsync(Arg.Any <RingbaUOW>())
            .Returns(new ActionResult());

            service = new ImplementMeService(
                Substitute.For <IUOWStatusService>(),
                logService,
                subMessageProcessingService,
                subMessageQueService);

            //act
            await service.DoWork();

            //assert
            await logService.Received().LogAsync(
                Arg.Any <string>(),
                Arg.Is <string>(exceptionMessage => exceptionMessage.Contains(expectedExceptionMessage)),
                Arg.Is <LOG_LEVEL>(logLevel => logLevel == LOG_LEVEL.WARNING),
                Arg.Any <object[]>());

            await subMessageProcessingService.DidNotReceive().ProccessMessageAsync(Arg.Any <RingbaUOW>());
        }
Esempio n. 2
0
        public async Task GivenOneMessageInQueue_WhenReceivedAndProcessingAndCancellationRequested_ThenExpect10LoggedMessages()
        {
            //arrange
            var updateFinishedEvent = new ManualResetEventSlim();

            var testBatch = new MessageBatchResult <RingbaUOW>
            {
                Messages = new List <MessageWrapper <RingbaUOW> > {
                    new MessageWrapper <RingbaUOW> {
                        Id = "1", Body = new RingbaUOW()
                    }
                }
            };

            ImplementMeService service = null;

            var logService = Substitute.For <ILogService>();

            logService.LogAsync(
                Arg.Any <string>(),
                Arg.Any <string>(),
                Arg.Any <LOG_LEVEL>(),
                Arg.Any <object[]>())
            .Returns(Task.CompletedTask);

            var subMessageQueService = Substitute.For <IMessageQueService>();

            subMessageQueService.GetMessagesFromQueAsync <RingbaUOW>(
                Arg.Any <int>(),
                Arg.Any <int>(),
                Arg.Any <int>())
            .Returns(Task.FromResult(testBatch))
            .AndDoes(p => { service.Stop(); });

            subMessageQueService.UpdateMessagesAsync(Arg.Any <IEnumerable <UpdateBatchRequest> >())
            .Returns(Task.FromResult(new ActionResult()));

            var subMessageProcessingService = Substitute.For <IMessageProcessService>();

            subMessageProcessingService.ProccessMessageAsync(Arg.Any <RingbaUOW>())
            .Returns(new ActionResult {
                IsSuccessfull = true
            });

            //act
            service = new ImplementMeService(
                Substitute.For <IUOWStatusService>(),
                logService,
                subMessageProcessingService,
                subMessageQueService);
            await service.DoWork();

            //assert
            await logService.Received(11).LogAsync(
                Arg.Any <string>(),
                Arg.Any <string>(),
                Arg.Any <LOG_LEVEL>(),
                Arg.Any <object[]>());
        }
        public void SampleTestOk()
        {
            //this is a fake test to show some general usage
            var service = new ImplementMeService(Substitute.For <IKVRepository>(),
                                                 _logService,
                                                 Substitute.For <IMessageProcessService>(),
                                                 Substitute.For <IMessageQueService>());

            ;
            Assert.Throws(typeof(NotImplementedException), () => service.Stop());
        }
Esempio n. 4
0
        public async Task GivenOneMessageInQueue_WhenReceivedAndProcessingFails_ThenExpectExceptionLogged()
        {
            //arrange
            string expectedExceptionMessage = "exceptionMessage";
            var    updateFinishedEvent      = new ManualResetEventSlim();

            var testBatch = new MessageBatchResult <RingbaUOW>
            {
                Messages = new List <MessageWrapper <RingbaUOW> > {
                    new MessageWrapper <RingbaUOW> {
                        Id = "1", Body = new RingbaUOW()
                    }
                }
            };

            ImplementMeService service = null;

            var subMessageQueService = Substitute.For <IMessageQueService>();

            subMessageQueService.GetMessagesFromQueAsync <RingbaUOW>(
                Arg.Any <int>(),
                Arg.Any <int>(),
                Arg.Any <int>())
            .Returns(Task.FromResult(testBatch));
            subMessageQueService.UpdateMessagesAsync(Arg.Any <IEnumerable <UpdateBatchRequest> >())
            .Returns(Task.FromResult(new ActionResult()))
            .AndDoes(p => service.Stop());

            var subMessageProcessingService = Substitute.For <IMessageProcessService>();

            subMessageProcessingService.ProccessMessageAsync(Arg.Any <RingbaUOW>())
            .Returns <ActionResult>(x => throw new ArgumentNullException("someParam", expectedExceptionMessage));

            var subUOWStatusService = Substitute.For <IUOWStatusService>();

            subUOWStatusService.TrySetInProcessing(Arg.Any <string>())
            .Returns(Task.FromResult(true));

            service = new ImplementMeService(
                subUOWStatusService,
                _logService,
                subMessageProcessingService,
                subMessageQueService);

            //act
            await service.DoWork();

            //assert
            await _logService.Received().LogAsync(
                Arg.Any <string>(),
                Arg.Is <string>(exceptionMessage => exceptionMessage.Contains(expectedExceptionMessage)),
                Arg.Is <LOG_LEVEL>(logLevel => logLevel == LOG_LEVEL.EXCEPTION),
                Arg.Any <object[]>());
        }
Esempio n. 5
0
        public async Task GivenOneMessageInQueue_WhenReceivedAndProcessingFails_ThenExpectOneMessageUpdated()
        {
            //arrange
            var updateFinishedEvent = new ManualResetEventSlim();

            var testBatch = new MessageBatchResult <RingbaUOW>
            {
                Messages = new List <MessageWrapper <RingbaUOW> > {
                    new MessageWrapper <RingbaUOW> {
                        Id = "1", Body = new RingbaUOW()
                    }
                }
            };

            ImplementMeService service = null;

            var subMessageQueService = Substitute.For <IMessageQueService>();

            subMessageQueService.GetMessagesFromQueAsync <RingbaUOW>(
                Arg.Any <int>(),
                Arg.Any <int>(),
                Arg.Any <int>())
            .Returns(Task.FromResult(testBatch));
            subMessageQueService.UpdateMessagesAsync(Arg.Any <IEnumerable <UpdateBatchRequest> >())
            .Returns(Task.FromResult(new ActionResult()))
            .AndDoes(p => service.Stop());

            var subMessageProcessingService = Substitute.For <IMessageProcessService>();

            subMessageProcessingService.ProccessMessageAsync(Arg.Any <RingbaUOW>())
            .Returns <ActionResult>(x => throw new ArgumentNullException());

            var subUOWStatusService = Substitute.For <IUOWStatusService>();

            subUOWStatusService.TrySetInProcessing(Arg.Any <string>())
            .Returns(Task.FromResult(true));

            //act
            service = new ImplementMeService(
                subUOWStatusService,
                _logService,
                subMessageProcessingService,
                subMessageQueService);
            await service.DoWork();

            //assert
            await subMessageQueService.Received().UpdateMessagesAsync(Arg.Is <IEnumerable <UpdateBatchRequest> >(p =>
                                                                                                                 p.Count() == 1 &&
                                                                                                                 p.First().Id == "1" &&
                                                                                                                 p.First().MessageCompleted == false));
        }
Esempio n. 6
0
        public async Task GivenOneMessageInQueue_WhenOneRingbaUOWWithSameIdInProcessing_ThenExpectMessageNotProcessed()
        {
            //arrange
            var updateFinishedEvent = new ManualResetEventSlim();

            var testBatch = new MessageBatchResult <RingbaUOW>
            {
                Messages = new List <MessageWrapper <RingbaUOW> > {
                    new MessageWrapper <RingbaUOW> {
                        Id = "1", Body = new RingbaUOW()
                    }
                }
            };

            ImplementMeService service = null;

            var subMessageQueService = Substitute.For <IMessageQueService>();

            subMessageQueService.GetMessagesFromQueAsync <RingbaUOW>(
                Arg.Any <int>(),
                Arg.Any <int>(),
                Arg.Any <int>())
            .Returns(Task.FromResult(testBatch));
            subMessageQueService.UpdateMessagesAsync(Arg.Is <IEnumerable <UpdateBatchRequest> >(p => p.Count() == 0))
            .Returns(Task.FromResult(new ActionResult()));

            var subUOWStatusService = Substitute.For <IUOWStatusService>();

            subUOWStatusService.TrySetInProcessing(Arg.Any <string>())
            .Returns(Task.FromResult(false))
            .AndDoes(p => service.Stop());

            var subMessageProcessingService = Substitute.For <IMessageProcessService>();

            subMessageProcessingService.ProccessMessageAsync(Arg.Any <RingbaUOW>())
            .Returns(Task.FromResult(new ActionResult {
                IsSuccessfull = true
            }));

            //act
            service = new ImplementMeService(
                subUOWStatusService,
                _logService,
                subMessageProcessingService,
                subMessageQueService);
            await service.DoWork();

            //assert
            await subMessageQueService.Received().UpdateMessagesAsync(Arg.Is <IEnumerable <UpdateBatchRequest> >(p => p.Count() == 0));
        }
Esempio n. 7
0
        public async Task GivenOneMessageInQueue_WhenExpirySet_ThenSetMessageCompletedAccordingly(
            bool hasExpiredAge,
            bool hasExpiredRetries,
            bool expectedMessageCompleted)
        {
            //arrange
            var updateFinishedEvent = new ManualResetEventSlim();

            var testBatch = new MessageBatchResult <RingbaUOW>
            {
                Messages = new List <MessageWrapper <RingbaUOW> > {
                    new MessageWrapper <RingbaUOW> {
                        Id = "1", Body = new RingbaUOW()
                    }
                }
            };

            ImplementMeService service = null;

            var subMessageQueService = Substitute.For <IMessageQueService>();

            subMessageQueService.GetMessagesFromQueAsync <RingbaUOW>(
                Arg.Any <int>(),
                Arg.Any <int>(),
                Arg.Any <int>())
            .Returns(Task.FromResult(testBatch));
            subMessageQueService.UpdateMessagesAsync(Arg.Is <IEnumerable <UpdateBatchRequest> >(p => p.First().MessageCompleted == true))
            .Returns(Task.FromResult(new ActionResult()));

            var subUOWStatusService = Substitute.For <IUOWStatusService>();

            subUOWStatusService.TrySetInProcessing(Arg.Any <string>())
            .Returns(Task.FromResult(true));

            subUOWStatusService.HasExpiredAge(
                Arg.Any <string>(),
                Arg.Any <long>(),
                Arg.Any <int>())
            .Returns(Task.FromResult(hasExpiredAge))
            .AndDoes(p => service.Stop());
            subUOWStatusService.HasExpiredRetries(
                Arg.Any <string>(),
                Arg.Any <int>())
            .Returns(Task.FromResult(hasExpiredRetries))
            .AndDoes(p => service.Stop());

            var subMessageProcessingService = Substitute.For <IMessageProcessService>();

            subMessageProcessingService.ProccessMessageAsync(Arg.Any <RingbaUOW>())
            .Returns(Task.FromResult(new ActionResult {
                IsSuccessfull = true
            }));

            //act
            service = new ImplementMeService(
                subUOWStatusService,
                _logService,
                subMessageProcessingService,
                subMessageQueService);
            await service.DoWork();

            //assert
            await subMessageQueService.Received().UpdateMessagesAsync(Arg.Is <IEnumerable <UpdateBatchRequest> >(p => p.First().MessageCompleted == expectedMessageCompleted));
        }
Esempio n. 8
0
        public async Task GivenOneMessageInQueue_WhenProcessed_ThenExpectOneMessageUpdated(bool isActionResultSuccessful)
        {
            //arrange
            var testBatch = new MessageBatchResult <RingbaUOW>
            {
                Messages = new List <MessageWrapper <RingbaUOW> > {
                    new MessageWrapper <RingbaUOW> {
                        Id = "1", Body = new RingbaUOW()
                    }
                }
            };

            ImplementMeService service = null;

            var subMessageQueService = Substitute.For <IMessageQueService>();

            subMessageQueService.GetMessagesFromQueAsync <RingbaUOW>(
                Arg.Any <int>(),
                Arg.Any <int>(),
                Arg.Any <int>())
            .Returns(Task.FromResult(testBatch));
            subMessageQueService.UpdateMessagesAsync(Arg.Any <IEnumerable <UpdateBatchRequest> >())
            .Returns(Task.FromResult(new ActionResult()))
            .AndDoes(p => service.Stop());

            var subUOWStatusService = Substitute.For <IUOWStatusService>();

            subUOWStatusService.TrySetInProcessing(Arg.Any <string>())
            .Returns(Task.FromResult(true));
            subUOWStatusService.ClearStatusMetadata(
                Arg.Any <string>())
            .Returns(Task.CompletedTask);
            subUOWStatusService.ResetInProcessing(
                Arg.Any <string>())
            .Returns(Task.CompletedTask);

            var subMessageProcessingService = Substitute.For <IMessageProcessService>();

            subMessageProcessingService.ProccessMessageAsync(Arg.Any <RingbaUOW>())
            .Returns(Task.FromResult(new ActionResult {
                IsSuccessfull = isActionResultSuccessful
            }));

            //act
            service = new ImplementMeService(
                subUOWStatusService,
                _logService,
                subMessageProcessingService,
                subMessageQueService);
            await service.DoWork();

            //assert
            await subMessageQueService.Received().UpdateMessagesAsync(Arg.Is <IEnumerable <UpdateBatchRequest> >(p =>
                                                                                                                 p.Count() == 1 &&
                                                                                                                 p.First().Id == "1" &&
                                                                                                                 p.First().MessageCompleted == isActionResultSuccessful));

            await subUOWStatusService.Received(isActionResultSuccessful? 1 : 0).ClearStatusMetadata(Arg.Any <string>());

            await subUOWStatusService.Received(isActionResultSuccessful? 0 : 1).ResetInProcessing(Arg.Any <string>());
        }