using System; using System.Collections.Generic; using Moq; using NUnit.Framework; using NzbDrone.Core.HealthCheck.Checks; using NzbDrone.Core.Indexers; using NzbDrone.Core.Localization; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.HealthCheck.Checks { [TestFixture] public class IndexerLongTermStatusCheckFixture : CoreTest { private List _indexers = new List(); private List _blockedIndexers = new List(); [SetUp] public void SetUp() { Mocker.GetMock() .Setup(v => v.GetAvailableProviders()) .Returns(_indexers); Mocker.GetMock() .Setup(v => v.GetBlockedProviders()) .Returns(_blockedIndexers); Mocker.GetMock() .Setup(s => s.GetLocalizedString(It.IsAny())) .Returns("Some Warning Message"); } private Mock GivenIndexer(int id, double backoffHours, double failureHours) { var mockIndexer = new Mock(); mockIndexer.SetupGet(s => s.Definition).Returns(new IndexerDefinition { Id = id }); mockIndexer.SetupGet(s => s.SupportsSearch).Returns(true); _indexers.Add(mockIndexer.Object); if (backoffHours != 0.0) { _blockedIndexers.Add(new IndexerStatus { ProviderId = id, InitialFailure = DateTime.UtcNow.AddHours(-failureHours), MostRecentFailure = DateTime.UtcNow.AddHours(-0.1), EscalationLevel = 5, DisabledTill = DateTime.UtcNow.AddHours(backoffHours) }); } return mockIndexer; } [Test] public void should_not_return_error_when_no_indexers() { Subject.Check().ShouldBeOk(); } [Test] public void should_return_warning_if_indexer_unavailable() { GivenIndexer(1, 10.0, 24.0); GivenIndexer(2, 0.0, 0.0); Subject.Check().ShouldBeWarning(); } [Test] public void should_return_error_if_all_indexers_unavailable() { GivenIndexer(1, 10.0, 24.0); Subject.Check().ShouldBeError(); } [Test] public void should_return_warning_if_few_indexers_unavailable() { GivenIndexer(1, 10.0, 24.0); GivenIndexer(2, 10.0, 24.0); GivenIndexer(3, 0.0, 0.0); Subject.Check().ShouldBeWarning(); } } }