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);
 }
Beispiel #4
0
        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
        }
Beispiel #5
0
        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
        }
Beispiel #6
0
        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,
                };
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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();
 }