Fixed: Don't attempt to fetch a release if the download client is disabled

pull/6/head
Qstick 7 years ago
parent bff3a55ff3
commit d3aa032cf5

@ -180,7 +180,7 @@ namespace NzbDrone.Core.Test.Download
} }
[Test] [Test]
public void should_not_attempt_download_if_client_isnt_configure() public void should_not_attempt_download_if_client_isnt_configured()
{ {
Assert.Throws<DownloadClientUnavailableException>(() => Subject.DownloadReport(_parseResult)); Assert.Throws<DownloadClientUnavailableException>(() => Subject.DownloadReport(_parseResult));
@ -188,6 +188,21 @@ namespace NzbDrone.Core.Test.Download
VerifyEventNotPublished<AlbumGrabbedEvent>(); VerifyEventNotPublished<AlbumGrabbedEvent>();
} }
[Test]
public void should_not_attempt_download_if_client_is_disabled()
{
WithUsenetClient();
Mocker.GetMock<IDownloadClientStatusService>()
.Setup(v => v.IsDisabled(It.IsAny<int>()))
.Returns(true);
Assert.Throws<DownloadClientUnavailableException>(() => Subject.DownloadReport(_parseResult));
Mocker.GetMock<IDownloadClient>().Verify(c => c.Download(It.IsAny<RemoteAlbum>()), Times.Never());
VerifyEventNotPublished<AlbumGrabbedEvent>();
}
[Test] [Test]
public void should_send_download_to_correct_usenet_client() public void should_send_download_to_correct_usenet_client()
{ {

@ -55,6 +55,11 @@ namespace NzbDrone.Core.Download
throw new DownloadClientUnavailableException($"{remoteAlbum.Release.DownloadProtocol} Download client isn't configured yet"); throw new DownloadClientUnavailableException($"{remoteAlbum.Release.DownloadProtocol} Download client isn't configured yet");
} }
if (_downloadClientStatusService.IsDisabled(downloadClient.Definition.Id))
{
throw new DownloadClientUnavailableException($"{downloadClient.Name} is disabled due to recent failues");
}
// Limit grabs to 2 per second. // Limit grabs to 2 per second.
if (remoteAlbum.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteAlbum.Release.DownloadUrl.StartsWith("magnet:")) if (remoteAlbum.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteAlbum.Release.DownloadUrl.StartsWith("magnet:"))
{ {

@ -10,6 +10,7 @@ namespace NzbDrone.Core.ThingiProvider.Status
public interface IProviderStatusServiceBase<TModel> public interface IProviderStatusServiceBase<TModel>
where TModel : ProviderStatusBase, new() where TModel : ProviderStatusBase, new()
{ {
bool IsDisabled(int providerId);
List<TModel> GetBlockedProviders(); List<TModel> GetBlockedProviders();
void RecordSuccess(int providerId); void RecordSuccess(int providerId);
void RecordFailure(int providerId, TimeSpan minimumBackOff = default(TimeSpan)); void RecordFailure(int providerId, TimeSpan minimumBackOff = default(TimeSpan));
@ -37,6 +38,11 @@ namespace NzbDrone.Core.ThingiProvider.Status
_logger = logger; _logger = logger;
} }
public bool IsDisabled(int providerId)
{
return GetProviderStatus(providerId).IsDisabled();
}
public virtual List<TModel> GetBlockedProviders() public virtual List<TModel> GetBlockedProviders()
{ {
return _providerStatusRepository.All().Where(v => v.IsDisabled()).ToList(); return _providerStatusRepository.All().Where(v => v.IsDisabled()).ToList();

Loading…
Cancel
Save