diff --git a/src/NzbDrone.Common/NzbDrone.Common.csproj b/src/NzbDrone.Common/NzbDrone.Common.csproj
index c5ebd8d90..e5ef0d4e7 100644
--- a/src/NzbDrone.Common/NzbDrone.Common.csproj
+++ b/src/NzbDrone.Common/NzbDrone.Common.csproj
@@ -112,6 +112,7 @@
+
diff --git a/src/NzbDrone.Common/Processes/IRuntimeProvider.cs b/src/NzbDrone.Common/Processes/IRuntimeProvider.cs
new file mode 100644
index 000000000..96f7a1e62
--- /dev/null
+++ b/src/NzbDrone.Common/Processes/IRuntimeProvider.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace NzbDrone.Common.Processes
+{
+ public interface IRuntimeProvider
+ {
+ String GetVersion();
+ }
+}
diff --git a/src/NzbDrone.Core.Test/HealthCheck/Checks/MonoVersionCheckFixture.cs b/src/NzbDrone.Core.Test/HealthCheck/Checks/MonoVersionCheckFixture.cs
index 8a0bbf7da..3184496ef 100644
--- a/src/NzbDrone.Core.Test/HealthCheck/Checks/MonoVersionCheckFixture.cs
+++ b/src/NzbDrone.Core.Test/HealthCheck/Checks/MonoVersionCheckFixture.cs
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
using NUnit.Framework;
using NzbDrone.Common.Processes;
using NzbDrone.Core.HealthCheck.Checks;
@@ -18,16 +17,9 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
private void GivenOutput(string version)
{
- Mocker.GetMock()
- .Setup(s => s.StartAndCapture("mono", "--version"))
- .Returns(new ProcessOutput
- {
- Standard = new List
- {
- String.Format("Mono JIT compiler version {0} (Debian {0}-8)", version),
- "Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com"
- }
- });
+ Mocker.GetMock()
+ .Setup(s => s.GetVersion())
+ .Returns(String.Format("{0} (tarball Wed Sep 25 16:35:44 CDT 2013)", version));
}
[Test]
@@ -46,6 +38,14 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
Subject.Check().ShouldBeWarning();
}
+ [Test]
+ public void should_return_warning_when_mono_2_10_2()
+ {
+ GivenOutput("2.10.2");
+
+ Subject.Check().ShouldBeWarning();
+ }
+
[Test]
public void should_return_ok_when_mono_3_2()
{
@@ -85,22 +85,5 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
Subject.Check().ShouldBeOk();
}
-
- [Test]
- public void should_return_ok_when_mono_3_6_1_with_custom_output()
- {
- Mocker.GetMock()
- .Setup(s => s.StartAndCapture("mono", "--version"))
- .Returns(new ProcessOutput
- {
- Standard = new List
- {
- "Mono JIT compiler version 3.6.1 (master/fce3972 Fri Jul 4 01:12:43 CEST 2014)",
- "Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com"
- }
- });
-
- Subject.Check().ShouldBeOk();
- }
}
}
diff --git a/src/NzbDrone.Core/HealthCheck/Checks/MonoVersionCheck.cs b/src/NzbDrone.Core/HealthCheck/Checks/MonoVersionCheck.cs
index 733d5e61a..52944faa1 100644
--- a/src/NzbDrone.Core/HealthCheck/Checks/MonoVersionCheck.cs
+++ b/src/NzbDrone.Core/HealthCheck/Checks/MonoVersionCheck.cs
@@ -8,13 +8,13 @@ namespace NzbDrone.Core.HealthCheck.Checks
{
public class MonoVersionCheck : HealthCheckBase
{
- private readonly IProcessProvider _processProvider;
+ private readonly IRuntimeProvider _runtimeProvider;
private readonly Logger _logger;
private static readonly Regex VersionRegex = new Regex(@"(?<=\W)(?\d+\.\d+\.\d+(\.\d+)?)(?=\W)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
- public MonoVersionCheck(IProcessProvider processProvider, Logger logger)
+ public MonoVersionCheck(IRuntimeProvider runtimeProvider, Logger logger)
{
- _processProvider = processProvider;
+ _runtimeProvider = runtimeProvider;
_logger = logger;
}
@@ -25,21 +25,16 @@ namespace NzbDrone.Core.HealthCheck.Checks
return new HealthCheck(GetType());
}
- var output = _processProvider.StartAndCapture("mono", "--version");
+ var versionMatch = VersionRegex.Match(_runtimeProvider.GetVersion());
- foreach (var line in output.Standard)
+ if (versionMatch.Success)
{
- var versionMatch = VersionRegex.Match(line);
+ var version = new Version(versionMatch.Groups["version"].Value);
- if (versionMatch.Success)
+ if (version >= new Version(3, 2))
{
- var version = new Version(versionMatch.Groups["version"].Value);
-
- if (version >= new Version(3, 2))
- {
- _logger.Debug("mono version is 3.2 or better: {0}", version.ToString());
- return new HealthCheck(GetType());
- }
+ _logger.Debug("mono version is 3.2 or better: {0}", version.ToString());
+ return new HealthCheck(GetType());
}
}
diff --git a/src/NzbDrone.Mono/MonoRuntimeProvider.cs b/src/NzbDrone.Mono/MonoRuntimeProvider.cs
new file mode 100644
index 000000000..af0fe4115
--- /dev/null
+++ b/src/NzbDrone.Mono/MonoRuntimeProvider.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Reflection;
+using NLog;
+using NzbDrone.Common.Processes;
+
+namespace NzbDrone.Mono
+{
+ public class MonoRuntimeProvider : IRuntimeProvider
+ {
+ private readonly Logger _logger;
+
+ public MonoRuntimeProvider(Logger logger)
+ {
+ _logger = logger;
+ }
+
+ public String GetVersion()
+ {
+ try
+ {
+ var type = Type.GetType("Mono.Runtime");
+
+ if (type != null)
+ {
+ var displayName = type.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static);
+
+ if (displayName != null)
+ {
+ return displayName.Invoke(null, null).ToString();
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Unable to get mono version: " + ex.Message, ex);
+ }
+
+ return String.Empty;
+ }
+ }
+}
diff --git a/src/NzbDrone.Mono/NzbDrone.Mono.csproj b/src/NzbDrone.Mono/NzbDrone.Mono.csproj
index 91d0efeb3..fa37ac15e 100644
--- a/src/NzbDrone.Mono/NzbDrone.Mono.csproj
+++ b/src/NzbDrone.Mono/NzbDrone.Mono.csproj
@@ -70,6 +70,7 @@
+