New: Setting for absolute maximum size for a release (#2662)
* New: Setting for absolute maximum size for a release * Change to Advanced Settingpull/2/head
parent
80b698a749
commit
8ee71fd0fa
@ -0,0 +1,75 @@
|
|||||||
|
using FluentAssertions;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Core.Configuration;
|
||||||
|
using NzbDrone.Core.DecisionEngine.Specifications;
|
||||||
|
using NzbDrone.Core.Parser.Model;
|
||||||
|
using NzbDrone.Core.Test.Framework;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
|
{
|
||||||
|
public class MaximumSizeSpecificationFixture : CoreTest<MaximumSizeSpecification>
|
||||||
|
{
|
||||||
|
private RemoteMovie _remoteMovie;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
_remoteMovie = new RemoteMovie { Release = new ReleaseInfo() };
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WithMaximumSize(int size)
|
||||||
|
{
|
||||||
|
Mocker.GetMock<IConfigService>().SetupGet(c => c.MaximumSize).Returns(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WithSize(int size)
|
||||||
|
{
|
||||||
|
_remoteMovie.Release.Size = size * 1024 * 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_true_when_maximum_size_is_set_to_zero()
|
||||||
|
{
|
||||||
|
WithMaximumSize(0);
|
||||||
|
WithSize(1000);
|
||||||
|
|
||||||
|
Subject.IsSatisfiedBy(_remoteMovie, null).Accepted.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_true_when_size_is_smaller_than_maximum_size()
|
||||||
|
{
|
||||||
|
WithMaximumSize(2000);
|
||||||
|
WithSize(1999);
|
||||||
|
|
||||||
|
Subject.IsSatisfiedBy(_remoteMovie, null).Accepted.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_true_when_size_is_equals_to_maximum_size()
|
||||||
|
{
|
||||||
|
WithMaximumSize(2000);
|
||||||
|
WithSize(2000);
|
||||||
|
|
||||||
|
Subject.IsSatisfiedBy(_remoteMovie, null).Accepted.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_false_when_size_is_bigger_than_maximum_size()
|
||||||
|
{
|
||||||
|
WithMaximumSize(2000);
|
||||||
|
WithSize(2001);
|
||||||
|
|
||||||
|
Subject.IsSatisfiedBy(_remoteMovie, null).Accepted.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_true_when_size_is_zero()
|
||||||
|
{
|
||||||
|
WithMaximumSize(2000);
|
||||||
|
WithSize(0);
|
||||||
|
|
||||||
|
Subject.IsSatisfiedBy(_remoteMovie, null).Accepted.Should().BeTrue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
using NLog;
|
||||||
|
using NzbDrone.Common.Extensions;
|
||||||
|
using NzbDrone.Core.Configuration;
|
||||||
|
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||||
|
using NzbDrone.Core.Parser.Model;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||||
|
{
|
||||||
|
public class MaximumSizeSpecification : IDecisionEngineSpecification
|
||||||
|
{
|
||||||
|
private readonly IConfigService _configService;
|
||||||
|
private readonly Logger _logger;
|
||||||
|
|
||||||
|
public MaximumSizeSpecification(IConfigService configService, Logger logger)
|
||||||
|
{
|
||||||
|
_configService = configService;
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RejectionType Type => RejectionType.Permanent;
|
||||||
|
|
||||||
|
public Decision IsSatisfiedBy(RemoteMovie subject, SearchCriteriaBase searchCriteria)
|
||||||
|
{
|
||||||
|
var size = subject.Release.Size;
|
||||||
|
var maximumSize = _configService.MaximumSize.Megabytes();
|
||||||
|
|
||||||
|
if (maximumSize == 0)
|
||||||
|
{
|
||||||
|
_logger.Debug("Maximum size is not set.");
|
||||||
|
return Decision.Accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size == 0)
|
||||||
|
{
|
||||||
|
_logger.Debug("Release has unknown size, skipping size check.");
|
||||||
|
return Decision.Accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.Debug("Checking if release meets maximum size requirements. {0}", size.SizeSuffix());
|
||||||
|
|
||||||
|
if (size > maximumSize)
|
||||||
|
{
|
||||||
|
var message = $"{size.SizeSuffix()} is too big, maximum size is {maximumSize.SizeSuffix()}";
|
||||||
|
|
||||||
|
_logger.Debug(message);
|
||||||
|
return Decision.Reject(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Decision.Accept();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue