parent
37c621dcdb
commit
b59175a87c
|
@ -14,7 +14,18 @@ namespace NzbDrone.Common.Http
|
||||||
{
|
{
|
||||||
if (response.Headers.ContainsKey("Retry-After"))
|
if (response.Headers.ContainsKey("Retry-After"))
|
||||||
{
|
{
|
||||||
RetryAfter = TimeSpan.FromSeconds(int.Parse(response.Headers["Retry-After"].ToString()));
|
var retryAfter = response.Headers["Retry-After"].ToString();
|
||||||
|
int seconds;
|
||||||
|
DateTime date;
|
||||||
|
|
||||||
|
if (int.TryParse(retryAfter, out seconds))
|
||||||
|
{
|
||||||
|
RetryAfter = TimeSpan.FromSeconds(seconds);
|
||||||
|
}
|
||||||
|
else if (DateTime.TryParse(retryAfter, out date))
|
||||||
|
{
|
||||||
|
RetryAfter = date.ToUniversalTime() - DateTime.UtcNow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,7 +143,28 @@ namespace NzbDrone.Core.Test.Download
|
||||||
Assert.Throws<ReleaseDownloadException>(() => Subject.DownloadReport(_parseResult));
|
Assert.Throws<ReleaseDownloadException>(() => Subject.DownloadReport(_parseResult));
|
||||||
|
|
||||||
Mocker.GetMock<IIndexerStatusService>()
|
Mocker.GetMock<IIndexerStatusService>()
|
||||||
.Verify(v => v.RecordFailure(It.IsAny<int>(), TimeSpan.FromMinutes(5)), Times.Once());
|
.Verify(v => v.RecordFailure(It.IsAny<int>(), TimeSpan.FromMinutes(5.0)), Times.Once());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Download_report_should_trigger_indexer_backoff_on_http429_based_on_date()
|
||||||
|
{
|
||||||
|
var request = new HttpRequest("http://my.indexer.com");
|
||||||
|
var response = new HttpResponse(request, new HttpHeader(), new byte[0], (HttpStatusCode)429);
|
||||||
|
response.Headers["Retry-After"] = DateTime.UtcNow.AddSeconds(300).ToString("r");
|
||||||
|
|
||||||
|
var mock = WithUsenetClient();
|
||||||
|
mock.Setup(s => s.Download(It.IsAny<RemoteEpisode>()))
|
||||||
|
.Callback<RemoteEpisode>(v =>
|
||||||
|
{
|
||||||
|
throw new ReleaseDownloadException(v.Release, "Error", new TooManyRequestsException(request, response));
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.Throws<ReleaseDownloadException>(() => Subject.DownloadReport(_parseResult));
|
||||||
|
|
||||||
|
Mocker.GetMock<IIndexerStatusService>()
|
||||||
|
.Verify(v => v.RecordFailure(It.IsAny<int>(),
|
||||||
|
It.IsInRange<TimeSpan>(TimeSpan.FromMinutes(4.9), TimeSpan.FromMinutes(5.1), Range.Inclusive)), Times.Once());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
|
Loading…
Reference in New Issue