public void TestCanStartAndStopNormally() { var monitor = new RedisMonitor(); monitor.Start(); Assert.IsTrue(monitor.Running); monitor.Stop(); Assert.IsFalse(monitor.Running); }
public void TestMonitorThreadStartsAndStopsNormally() { var monitor = new RedisMonitor(); monitor.Start(); Thread.Sleep(100); Assert.That(monitor.MonitorThread.ThreadState == ThreadState.Running); monitor.Stop(); Thread.Sleep(1000); Assert.That(monitor.MonitorThread.ThreadState != ThreadState.Running); }
public void TestMonitorCanRecoverFromRedisOutage() { var task = new TaskMessage { Parameters = "blah", Queue = "TestQueue" }; var task2 = new TaskMessage { Parameters = "blah", Queue = "TestQueue" }; var performerMock = new Mock <Performer>(); performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.Success, Reason = string.Empty }); performerMock.Setup(x => x.Perform(task.Parameters)); performerMock.Setup(x => x.Perform(task2.Parameters)); var monitor = new RedisMonitor(); monitor.Performer = performerMock.Object; monitor.Start(); Assert.IsTrue(monitor.Running); using (var client = new QueueClient()) client.Enqueue(task); Thread.Sleep(1500); RedisServer.Kill(); Thread.Sleep(100); RedisServer.Start(); Thread.Sleep(2000); using (var client = new QueueClient()) client.Enqueue(task2); Thread.Sleep(10000); monitor.Stop(); Assert.IsFalse(monitor.Running); }
public void TestProcessPendingTasksForMultipleTasksMockingPerformerOnly() { #region Prepare Tasks and mock Performer for processing var monitor = new RedisMonitor(); var performerMock = new Mock <Performer>(); using (var client = new QueueClient()) { for (var i = 0; i < 10; i++) { var task = new TaskMessage { Parameters = "Task " + i, Queue = "TestQueue" }; client.Enqueue(task); performerMock.Setup(x => x.Perform(task.Parameters)); } } // ensure all tasks will be successful. performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.Success, Reason = string.Empty }); #endregion monitor.Performer = performerMock.Object; monitor.Start(); Thread.Sleep(2000); monitor.Stop(); for (var i = 0; i < 10; i++) { performerMock.Verify(x => x.Perform("Task " + i)); } performerMock.VerifyGet(x => x.TaskStorage); performerMock.VerifyGet(x => x.Status); using (var client = new QueueClient()) Assert.AreEqual(client.PendingTasks("TestQueue").Count, 0); }
public void TestProcessTaskWhenTaskPerformerThrowsException() { var monitor = new RedisMonitor(); var task = new TaskMessage { Parameters = "Test Params", Queue = "TestQueue" }; // Setup the Performer mock. var performerMock = new Mock <Performer>(); var exception = new Exception("Test"); performerMock.Setup(x => x.Perform(task.Parameters)).Throws(exception); performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.Success, Reason = string.Empty }); // Setup the Client mock. var clientMock = new Mock <QueueClient>(); clientMock.SetupGet(x => x.RedisHost).Returns("127.0.0.1"); clientMock.SetupGet(x => x.RedisPort).Returns(6379); clientMock.Setup(x => x.Fail( "The performer raised an exception: " + exception.Message + "\n" + exception.StackTrace)); monitor.Performer = performerMock.Object; monitor.MonitorClient = clientMock.Object; monitor.ProcessTask(task); performerMock.Verify(x => x.Perform(task.Parameters)); performerMock.VerifyGet(x => x.TaskStorage); clientMock.Verify(x => x.Fail( "The performer raised an exception: " + exception.Message + "\n" + exception.StackTrace)); }
public void TestMonitorWakesUpOnMessageReceived() { var task = new TaskMessage { Parameters = "blah", Queue = "TestQueue" }; var performerMock = new Mock <Performer>(); performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.Success, Reason = string.Empty }); performerMock.Setup(x => x.Perform(task.Parameters)); var monitor = new RedisMonitor(); monitor.Performer = performerMock.Object; var start = DateTime.Now; monitor.Start(); Assert.IsTrue(monitor.Running); using (var client = new QueueClient()) client.Enqueue(task); monitor.Stop(); Assert.IsFalse(monitor.Running); var stop = DateTime.Now; Assert.Less((stop - start).TotalSeconds, 60); }
public void TestProcessTaskWithNullTaskStorageSucceeds() { var monitor = new RedisMonitor(); var task = new TaskMessage { Parameters = "Test Params", Queue = "TestQueue" }; // Setup the Performer mock. var performerMock = new Mock <Performer>(); performerMock.Setup(x => x.Perform(task.Parameters)); performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.Success, Reason = string.Empty }); // Setup the Client mock. var clientMock = new Mock <QueueClient>(); clientMock.Setup(x => x.Succeed()); clientMock.SetupGet(x => x.RedisHost).Returns("127.0.0.1"); clientMock.SetupGet(x => x.RedisPort).Returns(6379); monitor.Performer = performerMock.Object; monitor.MonitorClient = clientMock.Object; monitor.ProcessTask(task); Assert.That(performerMock.Object.TaskStorage == null); performerMock.Verify(x => x.Perform(task.Parameters)); performerMock.VerifyGet(x => x.TaskStorage); performerMock.VerifyGet(x => x.Status); clientMock.Verify(x => x.Succeed()); }
public void TestProcessTaskCriticalFailure() { var monitor = new RedisMonitor(); var task = new TaskMessage { Parameters = "Test Params", Queue = "TestQueue" }; // Setup the Performer mock. var performerMock = new Mock <Performer>(); performerMock.Setup(x => x.Perform(task.Parameters)); performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.CriticalFailure, Reason = "blah" }); // Setup the Client mock. var clientMock = new Mock <QueueClient>(); clientMock.Setup(x => x.CriticalFail("blah")); clientMock.SetupGet(x => x.RedisHost).Returns("127.0.0.1"); clientMock.SetupGet(x => x.RedisPort).Returns(6379); monitor.Performer = performerMock.Object; monitor.MonitorClient = clientMock.Object; monitor.ProcessTask(task); performerMock.Verify(x => x.Perform(task.Parameters)); performerMock.VerifyGet(x => x.TaskStorage); clientMock.Verify(x => x.CriticalFail("blah")); }
public void TestProcessTaskWithNullTaskStorageSucceeds() { var monitor = new RedisMonitor(); var task = new TaskMessage { Parameters = "Test Params", Queue = "TestQueue" }; // Setup the Performer mock. var performerMock =new Mock<Performer>(); performerMock.Setup(x => x.Perform(task.Parameters)); performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.Success, Reason = string.Empty }); // Setup the Client mock. var clientMock = new Mock<QueueClient>(); clientMock.Setup(x => x.Succeed()); clientMock.SetupGet(x => x.RedisHost).Returns("127.0.0.1"); clientMock.SetupGet(x => x.RedisPort).Returns(6379); monitor.Performer = performerMock.Object; monitor.MonitorClient = clientMock.Object; monitor.ProcessTask(task); Assert.That(performerMock.Object.TaskStorage == null); performerMock.Verify(x => x.Perform(task.Parameters)); performerMock.VerifyGet(x => x.TaskStorage); performerMock.VerifyGet(x => x.Status); clientMock.Verify(x => x.Succeed()); }
public void TestCanResolvePathToThisAssembly() { Assert.IsNotEmpty(RedisMonitor.ResolvePath("RedisQueue.Net.ServiceProvider.Tests.dll")); }
public void TestCantResolveNonexistentAssemly() { Assert.IsEmpty(RedisMonitor.ResolvePath("Blah.dll")); }
public void TestLoadsPerformerFixture() { var monitor = new RedisMonitor(); Assert.IsNotNull(monitor.Performer); }
public void TestMonitorCanRecoverFromRedisOutage() { var task = new TaskMessage { Parameters = "blah", Queue = "TestQueue" }; var task2 = new TaskMessage { Parameters = "blah", Queue = "TestQueue" }; var performerMock = new Mock<Performer>(); performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.Success, Reason = string.Empty }); performerMock.Setup(x => x.Perform(task.Parameters)); performerMock.Setup(x => x.Perform(task2.Parameters)); var monitor = new RedisMonitor(); monitor.Performer = performerMock.Object; monitor.Start(); Assert.IsTrue(monitor.Running); using (var client = new QueueClient()) client.Enqueue(task); Thread.Sleep(1500); RedisServer.Kill(); Thread.Sleep(100); RedisServer.Start(); Thread.Sleep(2000); using (var client = new QueueClient()) client.Enqueue(task2); Thread.Sleep(10000); monitor.Stop(); Assert.IsFalse(monitor.Running); }
public void TestMonitorWakesUpOnMessageReceived() { var task = new TaskMessage { Parameters = "blah", Queue = "TestQueue" }; var performerMock = new Mock<Performer>(); performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.Success, Reason = string.Empty }); performerMock.Setup(x => x.Perform(task.Parameters)); var monitor = new RedisMonitor(); monitor.Performer = performerMock.Object; var start = DateTime.Now; monitor.Start(); Assert.IsTrue(monitor.Running); using (var client = new QueueClient()) client.Enqueue(task); monitor.Stop(); Assert.IsFalse(monitor.Running); var stop = DateTime.Now; Assert.Less((stop - start).TotalSeconds, 60); }
public void TestProcessPendingTasksForMultipleTasksMockingPerformerOnly() { #region Prepare Tasks and mock Performer for processing var monitor = new RedisMonitor(); var performerMock = new Mock<Performer>(); using (var client = new QueueClient()) { for (var i = 0; i < 10; i++) { var task = new TaskMessage { Parameters = "Task " + i, Queue = "TestQueue" }; client.Enqueue(task); performerMock.Setup(x => x.Perform(task.Parameters)); } } // ensure all tasks will be successful. performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.Success, Reason = string.Empty }); #endregion monitor.Performer = performerMock.Object; monitor.Start(); Thread.Sleep(2000); monitor.Stop(); for (var i = 0; i < 10; i++) performerMock.Verify(x => x.Perform("Task " + i)); performerMock.VerifyGet(x => x.TaskStorage); performerMock.VerifyGet(x => x.Status); using(var client = new QueueClient()) Assert.AreEqual(client.PendingTasks("TestQueue").Count, 0); }
public void TestProcessTaskCriticalFailure() { var monitor = new RedisMonitor(); var task = new TaskMessage { Parameters = "Test Params", Queue = "TestQueue" }; // Setup the Performer mock. var performerMock = new Mock<Performer>(); performerMock.Setup(x => x.Perform(task.Parameters)); performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.CriticalFailure, Reason = "blah" }); // Setup the Client mock. var clientMock = new Mock<QueueClient>(); clientMock.Setup(x => x.CriticalFail("blah")); clientMock.SetupGet(x => x.RedisHost).Returns("127.0.0.1"); clientMock.SetupGet(x => x.RedisPort).Returns(6379); monitor.Performer = performerMock.Object; monitor.MonitorClient = clientMock.Object; monitor.ProcessTask(task); performerMock.Verify(x => x.Perform(task.Parameters)); performerMock.VerifyGet(x => x.TaskStorage); clientMock.Verify(x => x.CriticalFail("blah")); }
public void TestProcessTaskWhenTaskPerformerThrowsException() { var monitor = new RedisMonitor(); var task = new TaskMessage { Parameters = "Test Params", Queue = "TestQueue" }; // Setup the Performer mock. var performerMock =new Mock<Performer>(); var exception = new Exception("Test"); performerMock.Setup(x => x.Perform(task.Parameters)).Throws(exception); performerMock.SetupGet(x => x.Status).Returns(new PerformResult { Data = string.Empty, Outcome = Outcome.Success, Reason = string.Empty }); // Setup the Client mock. var clientMock = new Mock<QueueClient>(); clientMock.SetupGet(x => x.RedisHost).Returns("127.0.0.1"); clientMock.SetupGet(x => x.RedisPort).Returns(6379); clientMock.Setup(x => x.Fail( "The performer raised an exception: " + exception.Message + "\n" + exception.StackTrace)); monitor.Performer = performerMock.Object; monitor.MonitorClient = clientMock.Object; monitor.ProcessTask(task); performerMock.Verify(x => x.Perform(task.Parameters)); performerMock.VerifyGet(x => x.TaskStorage); clientMock.Verify(x => x.Fail( "The performer raised an exception: " + exception.Message + "\n" + exception.StackTrace)); }