public void FirstErrorDelayIsSameAsSlotDelay() { var policy = new ErrorHandlingTransmissionPolicy(); policy.ConsecutiveErrors = 1; TimeSpan delay = policy.GetBackOffTime(); Assert.Equal(TimeSpan.FromSeconds(10), delay); }
public void UpperBoundOfDelayIsMaxDelay() { var policy = new ErrorHandlingTransmissionPolicy(); policy.ConsecutiveErrors = int.MaxValue; TimeSpan delay = policy.GetBackOffTime(); Assert.InRange(delay, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(3600)); }
public void CatchesAndLogsSynchronousExceptionsThrownByTransmitterWhenPausingTransmission() { var policy = new ErrorHandlingTransmissionPolicy(); var exception = CreateException(statusCode: 408); var transmitter = new StubTransmitter { OnApplyPolicies = () => { throw exception; } }; CatchesAndLogsExceptionThrownByTransmitter(policy, transmitter, exception); }
public void ResumesTransmissionSenderAfterPauseDuration() { var policyApplied = new AutoResetEvent(false); var transmitter = new StubTransmitter(new TestableBackoffLogicManager(TimeSpan.FromMilliseconds(1))); transmitter.OnApplyPolicies = () => { policyApplied.Set(); }; var policy = new ErrorHandlingTransmissionPolicy(); policy.Initialize(transmitter); transmitter.OnTransmissionSent(new TransmissionProcessedEventArgs(new StubTransmission(), CreateException(statusCode: 408))); Assert.True(policyApplied.WaitOne(100)); Assert.True(policyApplied.WaitOne(100)); Assert.Null(policy.MaxSenderCapacity); }
public void DoesNotRetrySuccessfulTransmission() { Transmission enqueuedTransmission = null; var transmitter = new StubTransmitter(); transmitter.OnEnqueue = transmission => { enqueuedTransmission = transmission; }; var policy = new ErrorHandlingTransmissionPolicy(); policy.Initialize(transmitter); var successfulTransmission = new StubTransmission(); transmitter.OnTransmissionSent(new TransmissionProcessedEventArgs(successfulTransmission)); Assert.IsNull(enqueuedTransmission); Assert.AreEqual(0, transmitter.BackoffLogicManager.ConsecutiveErrors); }
public void RetriesFailedTransmissionInfinitely() { Transmission enqueuedTransmission = null; var transmitter = new StubTransmitter(new TestableBackoffLogicManager(TimeSpan.FromMilliseconds(10))); transmitter.OnEnqueue = transmission => { enqueuedTransmission = transmission; }; var policy = new ErrorHandlingTransmissionPolicy(); policy.Initialize(transmitter); var failedTransmission = new StubTransmission(); transmitter.OnTransmissionSent(new TransmissionProcessedEventArgs(failedTransmission, CreateException(statusCode: 408))); transmitter.OnTransmissionSent(new TransmissionProcessedEventArgs(failedTransmission, CreateException(statusCode: 408))); transmitter.OnTransmissionSent(new TransmissionProcessedEventArgs(failedTransmission, CreateException(statusCode: 408))); Assert.AreSame(failedTransmission, enqueuedTransmission); }
private void ResumesTransmissionSenderAfterPauseDuration(int responseStatusCode) { var policyApplied = new AutoResetEvent(false); var transmitter = new StubTransmitter(new TestableBackoffLogicManager(TimeSpan.FromMilliseconds(1))); transmitter.OnApplyPolicies = () => { policyApplied.Set(); }; var policy = new ErrorHandlingTransmissionPolicy(); policy.Initialize(transmitter); transmitter.OnTransmissionSent(new TransmissionProcessedEventArgs(new StubTransmission(), new Exception("Error"), new HttpWebResponseWrapper() { StatusCode = responseStatusCode })); Assert.IsTrue(policyApplied.WaitOne(100)); Assert.IsTrue(policyApplied.WaitOne(100)); Assert.IsNull(policy.MaxSenderCapacity); }
public void RetriesFailedTransmissionIfItsNumberOfAttemptsDidNotReachMaximum() { Transmission enqueuedTransmission = null; var transmitter = new StubTransmitter(); transmitter.OnEnqueue = transmission => { enqueuedTransmission = transmission; }; var policy = new ErrorHandlingTransmissionPolicy(); policy.Initialize(transmitter); var failedTransmission = new StubTransmission(); transmitter.OnTransmissionSent(new TransmissionProcessedEventArgs(failedTransmission, new Exception("Error"), new HttpWebResponseWrapper() { StatusCode = ResponseStatusCodes.InternalServerError })); Assert.AreSame(failedTransmission, enqueuedTransmission); }
private static void CatchesAndLogsExceptionThrownByTransmitter(ErrorHandlingTransmissionPolicy policy, StubTransmitter transmitter, Exception exception) { policy.Initialize(transmitter); using (var listener = new TestEventListener()) { const long AllKeywords = -1; listener.EnableEvents(TelemetryChannelEventSource.Log, EventLevel.Warning, (EventKeywords)AllKeywords); transmitter.OnTransmissionSent(new TransmissionProcessedEventArgs(new StubTransmission(), CreateException(statusCode: 408))); EventWrittenEventArgs error = listener.Messages.First(args => args.EventId == 23); Assert.Contains(exception.Message, (string)error.Payload[1], StringComparison.Ordinal); } }
public void DoesNotRetrySuccessfulTransmission() { Transmission enqueuedTransmission = null; var transmitter = new StubTransmitter(); transmitter.OnEnqueue = transmission => { enqueuedTransmission = transmission; }; var policy = new ErrorHandlingTransmissionPolicy(); policy.Initialize(transmitter); var successfulTransmission = new StubTransmission(); transmitter.OnTransmissionSent(new TransmissionProcessedEventArgs(successfulTransmission)); Assert.Null(enqueuedTransmission); Assert.Equal(0, policy.ConsecutiveErrors); }
public void RetriesFailedTransmissionIfItsNumberOfAttemptsDidNotReachMaximum() { Transmission enqueuedTransmission = null; var transmitter = new StubTransmitter(); transmitter.OnEnqueue = transmission => { enqueuedTransmission = transmission; }; var policy = new ErrorHandlingTransmissionPolicy(); policy.Initialize(transmitter); var failedTransmission = new StubTransmission(); transmitter.OnTransmissionSent(new TransmissionProcessedEventArgs(failedTransmission, CreateException(statusCode: 408))); Assert.Same(failedTransmission, enqueuedTransmission); }