public void Should_Accept_And_Schedule_A_Valid_Request() { var sender = new FakeMessageSender(); var regularRequestForFullDate = new JobRequest {IsEmergency = false, RequestedByDate = _dateWithTooManyScheduledJobs, RequestedTask = GetKnownTaskId()}; var sut = new JobRequestController(new EmergencyRequestValidator(), new RegularRequestValidator(), new EmergencyJobScheduler(sender), new JobScheduler()); var result = sut.Handle(regularRequestForFullDate); result.Accepted.ShouldBeTrue(); result.ScheduledToStart.ShouldEqual(regularRequestForFullDate.RequestedByDate.AddDays(1)); }
public void Should_Send_Message_Including_Scheduled_Date() { var sender = new FakeMessageSender(); var request = new JobRequest {IsEmergency = true, RequestedByDate = DateTime.Now.AddDays(1), RequestedTask = GetKnownTaskId()}; var sut = new EmergencyJobScheduler(sender); sut.Schedule(request); var message = sender.SentMessage as EmergencyJobScheduled; message.ScheduledOn.ShouldEqual(request.RequestedByDate); }
public void Should_Accept_And_Schedule_A_Valid_Emergency_Request() { var sender = new FakeMessageSender(); var emergencyRequest = new JobRequest {IsEmergency = true, RequestedByDate = DateTime.Now.AddDays(1), RequestedTask = GetKnownTaskId()}; var sut = new JobRequestController(new EmergencyRequestValidator(), new RegularRequestValidator(), new EmergencyJobScheduler(sender), new JobScheduler()); var result = sut.Handle(emergencyRequest); result.Accepted.ShouldBeTrue(); result.ScheduledToStart.ShouldEqual(emergencyRequest.RequestedByDate); }
public async Task Server_busy_exceptions_will_not_bubble_up_after_successfull_retry() { var sender = new FakeMessageSender(); sender.ExceptionToThrow = i => { if (i < 4) { throw new ServerBusyException("Sorry, don't feel like serving you right now"); } }; await sender.RetryOnThrottleAsync(s => s.Send(new BrokeredMessage()), s => s.Send(new BrokeredMessage()), TimeSpan.FromSeconds(1), 5); Assert.IsTrue(sender.IsInvoked); Assert.AreEqual(4, sender.InvocationCount); // 4 = initial invocation + 3 retries }
public void Server_busy_exceptions_will_bubble_up_with_retry() { var sender = new FakeMessageSender(); sender.ExceptionToThrow = i => { throw new ServerBusyException("Sorry, don't feel like serving you right now"); }; Assert.ThrowsAsync<ServerBusyException>(async () => await sender.RetryOnThrottleAsync(s => s.Send(new BrokeredMessage()), s => s.Send(new BrokeredMessage()), TimeSpan.FromSeconds(1), 5)); Assert.IsTrue(sender.IsInvoked); Assert.AreEqual(6, sender.InvocationCount); // 6 = initial invocation + 5 retries }
public void Non_server_busy_exceptions_will_bubble_up_without_retry() { var sender = new FakeMessageSender(); sender.ExceptionToThrow = i => { throw new NotSupportedException(); }; //validate Assert.ThrowsAsync<NotSupportedException>(async () => await sender.RetryOnThrottleAsync(s => s.Send(new BrokeredMessage()), s => s.Send(new BrokeredMessage()), TimeSpan.FromSeconds(10), 5)); Assert.IsTrue(sender.IsInvoked); Assert.AreEqual(1, sender.InvocationCount); }
public void Setup() { Address.InitializeLocalAddress("MyEndpoint"); Configure.GetEndpointNameAction = () => "MyEndpoint"; messageSender = new FakeMessageSender(); manager = new DefaultTimeoutManager { MessageSender = messageSender, }; }
public async Task Can_send_brokered_messages() { var sender = new FakeMessageSender(); var tasks = new List <Task>(); tasks.Add(sender.RetryOnThrottleAsync(s => s.Send(new BrokeredMessage()), s => s.Send(new BrokeredMessage()), TimeSpan.FromSeconds(10), 5)); await Task.WhenAll(tasks); //validate Assert.IsTrue(sender.IsInvoked); Assert.AreEqual(1, sender.InvocationCount); }
public void Server_busy_exceptions_will_delay_retry() { var sender = new FakeMessageSender(); sender.ExceptionToThrow = i => { throw new ServerBusyException("Sorry, don't feel like serving you right now"); }; var sw = new Stopwatch(); sw.Start(); Assert.ThrowsAsync<ServerBusyException>(async () => await sender.RetryOnThrottleAsync(s => s.Send(new BrokeredMessage()), s => s.Send(new BrokeredMessage()), TimeSpan.FromSeconds(5), 1)); sw.Stop(); Assert.IsTrue(sender.IsInvoked); Assert.AreEqual(2, sender.InvocationCount); // 2 = initial invocation + 1 retries Assert.IsTrue(sw.ElapsedMilliseconds > TimeSpan.FromSeconds(4).TotalMilliseconds); }
public void Setup() { Address.InitializeLocalAddress("MyEndpoint"); Configure.GetEndpointNameAction = () => "MyEndpoint"; persister = CreateTimeoutPersister(); messageSender = new FakeMessageSender(); manager = new DefaultTimeoutManager { TimeoutsPersister = persister, MessageSender = messageSender, }; receiver = new TimeoutPersisterReceiver(manager) { TimeoutsPersister = persister, MessageSender = messageSender, SecondsToSleepBetweenPolls = 1, }; }
public void Should_Reject_An_Invalid_Request() { var sender = new FakeMessageSender(); var unkownTaskRequst = new JobRequest {IsEmergency = false, RequestedByDate = DateTime.Now.AddDays(5), RequestedTask = 12345678}; var sut = new JobRequestController(new EmergencyRequestValidator(), new RegularRequestValidator(), new EmergencyJobScheduler(sender), new JobScheduler()); var result = sut.Handle(unkownTaskRequst); result.Accepted.ShouldBeFalse(); result.Errors.Any(x => x.GetType() == typeof (UnknownJobValidationError)).ShouldBeTrue(); }