diff --git a/src/NzbDrone.Core.Test/HealthCheck/Checks/SqliteVersionCheckFixture.cs b/src/NzbDrone.Core.Test/HealthCheck/Checks/SqliteVersionCheckFixture.cs new file mode 100644 index 000000000..c022ae9eb --- /dev/null +++ b/src/NzbDrone.Core.Test/HealthCheck/Checks/SqliteVersionCheckFixture.cs @@ -0,0 +1,57 @@ +using System; +using Moq; +using NUnit.Framework; +using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Core.Datastore; +using NzbDrone.Core.HealthCheck.Checks; +using NzbDrone.Core.Localization; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.HealthCheck.Checks +{ + [TestFixture] + public class SqliteVersionCheckFixture : CoreTest + { + [SetUp] + public void Setup() + { + Mocker.GetMock() + .Setup(s => s.GetLocalizedString(It.IsAny())) + .Returns("Some Warning Message"); + } + + private void GivenOutput(string version) + { + if (!OsInfo.IsLinux) + { + throw new IgnoreException("linux specific test"); + } + + Mocker.GetMock() + .SetupGet(s => s.Version) + .Returns(new Version(version)); + } + + [TestCase("3.9.0")] + [TestCase("3.9.1")] + [TestCase("3.26.0")] + [TestCase("3.34.0")] + public void should_return_ok(string version) + { + GivenOutput(version); + + Subject.Check().ShouldBeOk(); + } + + [TestCase("3.8.11.1")] + [TestCase("3.8.11")] + [TestCase("3.3.9")] + [TestCase("2.8.12")] + public void should_return_error(string version) + { + GivenOutput(version); + + Subject.Check().ShouldBeError(); + } + } +} diff --git a/src/NzbDrone.Core/HealthCheck/Checks/SqliteVersionCheck.cs b/src/NzbDrone.Core/HealthCheck/Checks/SqliteVersionCheck.cs new file mode 100644 index 000000000..9662bb9f4 --- /dev/null +++ b/src/NzbDrone.Core/HealthCheck/Checks/SqliteVersionCheck.cs @@ -0,0 +1,44 @@ +using System; +using NLog; +using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Core.Datastore; +using NzbDrone.Core.Localization; + +namespace NzbDrone.Core.HealthCheck.Checks +{ + public class SqliteVersionCheck : HealthCheckBase + { + private readonly IDatabase _database; + private readonly Logger _logger; + + public SqliteVersionCheck(IMainDatabase database, ILocalizationService localizationService, Logger logger) + : base(localizationService) + { + _database = database; + _logger = logger; + } + + public override HealthCheck Check() + { + if (!OsInfo.IsLinux) + { + return new HealthCheck(GetType()); + } + + var sqliteVersion = _database.Version; + var supportedVersion = new Version("3.9.0"); + + if (sqliteVersion >= supportedVersion) + { + return new HealthCheck(GetType()); + } + + return new HealthCheck(GetType(), + HealthCheckResult.Error, + string.Format(_localizationService.GetLocalizedString("SqliteVersionCheckUpgradeRequiredMessage"), sqliteVersion, supportedVersion), + "#currently_installed_sqlite_version_is_not_supported"); + } + + public override bool CheckOnSchedule => false; + } +} diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index f250c50a3..c6765b15c 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -894,6 +894,7 @@ "SourcePath": "Source Path", "SourceRelativePath": "Source Relative Path", "SourceTitle": "Source Title", + "SqliteVersionCheckUpgradeRequiredMessage": "Currently installed SQLite version {0} is no longer supported. Please upgrade SQLite to at least version {1}.", "SSLCertPassword": "SSL Cert Password", "SSLCertPasswordHelpText": "Password for pfx file", "SSLCertPath": "SSL Cert Path",