public void Stop_MessageQueueWorker_StopIsCalled() { // Arrange // Arrange var agentCoordinationService = new Mock <IAgentCoordinationService>(); var messageQueueFeeder = new Mock <IMessageQueueFeeder>(); var messageQueueWorker = new Mock <IMessageQueueWorker>(); var agentCoordinationServiceFactory = new Mock <IAgentCoordinationServiceFactory>(); agentCoordinationServiceFactory.Setup(f => f.GetAgentCoordinationService(It.IsAny <Action>(), It.IsAny <Action>())).Returns(agentCoordinationService.Object); var messageQueueFeederFactory = new Mock <IMessageQueueFeederFactory>(); messageQueueFeederFactory.Setup(f => f.GetMessageQueueFeeder()).Returns(messageQueueFeeder.Object); var messageQueueWorkerFactory = new Mock <IMessageQueueWorkerFactory>(); messageQueueWorkerFactory.Setup(f => f.GetMessageQueueWorker()).Returns(messageQueueWorker.Object); var workQueue = new Mock <IMessageQueue <SystemInformation> >(); var errorQueue = new Mock <IMessageQueue <SystemInformation> >(); var messageQueueProvider = new Mock <IMessageQueueProvider <SystemInformation> >(); messageQueueProvider.Setup(m => m.WorkQueue).Returns(workQueue.Object); messageQueueProvider.Setup(m => m.ErrorQueue).Returns(errorQueue.Object); var messageQueuePersistence = new Mock <IMessageQueuePersistence <SystemInformation> >(); var systemInformationDispatchingService = new SystemInformationDispatchingService( agentCoordinationServiceFactory.Object, messageQueueFeederFactory.Object, messageQueueWorkerFactory.Object, messageQueueProvider.Object, messageQueuePersistence.Object); // Act systemInformationDispatchingService.Stop(); // Assert messageQueueWorker.Verify(f => f.Stop(), Times.Once()); }
public void Constructor_AllParametersAreSet_ObjectIsInstantiated() { // Arrange var agentCoordinationServiceFactory = new Mock <IAgentCoordinationServiceFactory>(); var messageQueueFeederFactory = new Mock <IMessageQueueFeederFactory>(); var messageQueueWorkerFactory = new Mock <IMessageQueueWorkerFactory>(); var messageQueueProvider = new Mock <IMessageQueueProvider <SystemInformation> >(); var messageQueuePersistence = new Mock <IMessageQueuePersistence <SystemInformation> >(); // Act var systemInformationDispatchingService = new SystemInformationDispatchingService( agentCoordinationServiceFactory.Object, messageQueueFeederFactory.Object, messageQueueWorkerFactory.Object, messageQueueProvider.Object, messageQueuePersistence.Object); // Assert Assert.IsNotNull(systemInformationDispatchingService); }
public void RunFor10Seconds_SendFailsForAllItems_DispatcherStopsOnlyIfTheQueueIsEmptyAndAllRetryAttempsHaveFailed() { // Arrange int runtimeInMilliseconds = 10 * 1000; int itemsReturnedFromSystemInformationProvider = 0; int attemptsToSend = 0; // prepare system information provider var provider = new Mock <ISystemInformationProvider>(); provider.Setup(p => p.GetSystemInfo()).Returns(() => { itemsReturnedFromSystemInformationProvider++; return(new SystemInformation { MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow }); }); // prepare sender var sender = new Mock <ISystemInformationSender>(); sender.Setup(s => s.Send(It.IsAny <SystemInformation>())).Callback(() => { attemptsToSend++; }).Throws(new SendSystemInformationFailedException("Send failed.", null)); IMessageQueue <SystemInformation> workQueue = new SystemInformationMessageQueue(); IMessageQueue <SystemInformation> errorQueue = new SystemInformationMessageQueue(); IMessageQueueProvider <SystemInformation> messageQueueProvider = new SystemInformationMessageQueueProvider(workQueue, errorQueue); IMessageQueueFeeder messageQueueFeeder = new SystemInformationMessageQueueFeeder(provider.Object, workQueue); IMessageQueueWorker messageQueueWorker = new SystemInformationMessageQueueWorker(sender.Object, workQueue, errorQueue); var agentCoordinationService = new Mock <IAgentCoordinationService>(); var agentCoordinationServiceFactory = new Mock <IAgentCoordinationServiceFactory>(); agentCoordinationServiceFactory.Setup(f => f.GetAgentCoordinationService(It.IsAny <Action>(), It.IsAny <Action>())).Returns( agentCoordinationService.Object); var messageQueueFeederFactory = new Mock <IMessageQueueFeederFactory>(); messageQueueFeederFactory.Setup(f => f.GetMessageQueueFeeder()).Returns(messageQueueFeeder); var messageQueueWorkerFactory = new Mock <IMessageQueueWorkerFactory>(); messageQueueWorkerFactory.Setup(f => f.GetMessageQueueWorker()).Returns(messageQueueWorker); IMessageQueuePersistence <SystemInformation> messageQueuePersistence = new JSONSystemInformationMessageQueuePersistence(this.jsonMessageQueuePersistenceConfigurationProvider, this.encodingProvider); var systemInformationDispatchingService = new SystemInformationDispatchingService( agentCoordinationServiceFactory.Object, messageQueueFeederFactory.Object, messageQueueWorkerFactory.Object, messageQueueProvider, messageQueuePersistence); // Act var stopwatch = new Stopwatch(); stopwatch.Start(); var dispatcher = new Task(systemInformationDispatchingService.Start); dispatcher.Start(); Thread.Sleep(runtimeInMilliseconds); systemInformationDispatchingService.Stop(); Task.WaitAll(new[] { dispatcher }); stopwatch.Stop(); // Assert int queueSize = workQueue.GetSize(); Console.WriteLine( "After a runtime of {0} milliseconds the dispatcher has been stopped with {1} items in queue. It took {2} milliseconds until the queue worker stopped sending out all queue items (Attempts To Send: {3}).", runtimeInMilliseconds, itemsReturnedFromSystemInformationProvider, stopwatch.ElapsedMilliseconds, attemptsToSend); Assert.AreEqual(0, queueSize); }