parent
80fd27b7e4
commit
b0fb369290
@ -0,0 +1,59 @@
|
|||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Core.HealthCheck.Checks;
|
||||||
|
using NzbDrone.Core.Test.Framework;
|
||||||
|
using NzbDrone.Test.Common;
|
||||||
|
using static NzbDrone.Core.HealthCheck.Checks.MonoDebugCheck;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Test.HealthCheck.Checks
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class MonoDebugCheckFixture : CoreTest<MonoDebugCheck>
|
||||||
|
{
|
||||||
|
private void GivenHasStackFrame(bool hasStackFrame)
|
||||||
|
{
|
||||||
|
Mocker.GetMock<StackFrameHelper>()
|
||||||
|
.Setup(f => f.HasStackFrameInfo())
|
||||||
|
.Returns(hasStackFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_ok_if_windows()
|
||||||
|
{
|
||||||
|
WindowsOnly();
|
||||||
|
|
||||||
|
Subject.Check().ShouldBeOk();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_ok_if_not_debug()
|
||||||
|
{
|
||||||
|
MonoOnly();
|
||||||
|
|
||||||
|
GivenHasStackFrame(false);
|
||||||
|
|
||||||
|
Subject.Check().ShouldBeOk();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_log_warning_if_not_debug()
|
||||||
|
{
|
||||||
|
MonoOnly();
|
||||||
|
|
||||||
|
GivenHasStackFrame(false);
|
||||||
|
|
||||||
|
Subject.Check();
|
||||||
|
|
||||||
|
ExceptionVerification.ExpectedWarns(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_ok_if_debug()
|
||||||
|
{
|
||||||
|
MonoOnly();
|
||||||
|
|
||||||
|
GivenHasStackFrame(true);
|
||||||
|
|
||||||
|
Subject.Check().ShouldBeOk();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using NLog;
|
||||||
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.HealthCheck.Checks
|
||||||
|
{
|
||||||
|
public class MonoDebugCheck : HealthCheckBase
|
||||||
|
{
|
||||||
|
private readonly Logger _logger;
|
||||||
|
private readonly StackFrameHelper _stackFrameHelper;
|
||||||
|
|
||||||
|
public override bool CheckOnSchedule => false;
|
||||||
|
|
||||||
|
public MonoDebugCheck(Logger logger, StackFrameHelper stackFrameHelper)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_stackFrameHelper = stackFrameHelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class StackFrameHelper
|
||||||
|
{
|
||||||
|
public virtual bool HasStackFrameInfo()
|
||||||
|
{
|
||||||
|
var stackTrace = new StackTrace();
|
||||||
|
|
||||||
|
return stackTrace.FrameCount > 0 && stackTrace.GetFrame(0).GetFileColumnNumber() > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override HealthCheck Check()
|
||||||
|
{
|
||||||
|
if (!PlatformInfo.IsMono)
|
||||||
|
{
|
||||||
|
return new HealthCheck(GetType());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_stackFrameHelper.HasStackFrameInfo())
|
||||||
|
{
|
||||||
|
_logger.Warn("Mono is not running with --debug switch");
|
||||||
|
return new HealthCheck(GetType());
|
||||||
|
}
|
||||||
|
|
||||||
|
return new HealthCheck(GetType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue