diff --git a/.gitignore b/.gitignore index 5efc0ad..31dca38 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ bin obj *.suo +/UpgradeLog.htm +/winsw.csproj.DotSettings.user +/winsw.csproj.user diff --git a/LogAppenders.cs b/LogAppenders.cs index 5c1a61d..bc6875b 100644 --- a/LogAppenders.cs +++ b/LogAppenders.cs @@ -163,6 +163,22 @@ namespace winsw private string pattern; private int period; + public string Pattern + { + get + { + return pattern; + } + } + + public int Period + { + get + { + return period; + } + } + public TimeBasedRollingLogAppender(string logDirectory, string baseName, string pattern, int period) : base(logDirectory, baseName) { @@ -241,6 +257,22 @@ namespace winsw private int sizeThreshold; private int filesToKeep; + public int SizeTheshold + { + get + { + return sizeThreshold; + } + } + + public int FilesToKeep + { + get + { + return filesToKeep; + } + } + public SizeBasedRollingLogAppender(string logDirectory, string baseName, int sizeThreshold, int filesToKeep) : base(logDirectory, baseName) { diff --git a/SigIntHelper.cs b/SigIntHelper.cs index 3d770b9..a6b9a1a 100644 --- a/SigIntHelper.cs +++ b/SigIntHelper.cs @@ -51,12 +51,10 @@ namespace winsw process.WaitForExit((int)shutdownTimeout.TotalMilliseconds); - return process.HasExited; - } - else - { - return false; + return process.HasExited; } + + return false; } } } diff --git a/Tests/winswTests/ServiceDescriptorTests.cs b/Tests/winswTests/ServiceDescriptorTests.cs index c7a7f1d..0418850 100644 --- a/Tests/winswTests/ServiceDescriptorTests.cs +++ b/Tests/winswTests/ServiceDescriptorTests.cs @@ -1,63 +1,65 @@ -using NUnit.Framework; +using NUnit.Framework; using winsw; using System.Diagnostics; -using System.Xml; - -namespace winswTests -{ - [TestFixture] - public class ServiceDescriptorTests - { - - private ServiceDescriptor extendedServiceDescriptor; - - private const string ExpectedWorkingDirectory = @"Z:\Path\SubPath"; - private const string Username = "User"; - private const string Password = "Password"; - private const string Domain = "Domain"; - - [SetUp] - public void SetUp() - { - const string SeedXml = "" - + "service.exe" - + "Service" - + "The service." - + "node.exe" - + "My Arguments" - + "rotate" - + "" - + "" + Domain + "" - + "" + Username + "" - + "" + Password + "" - + "" - + "" - + ExpectedWorkingDirectory - + "" - + @"C:\logs" +using System.Xml; + +namespace winswTests +{ + using System; + + [TestFixture] + public class ServiceDescriptorTests + { + + private ServiceDescriptor extendedServiceDescriptor; + + private const string ExpectedWorkingDirectory = @"Z:\Path\SubPath"; + private const string Username = "User"; + private const string Password = "Password"; + private const string Domain = "Domain"; + + [SetUp] + public void SetUp() + { + const string SeedXml = "" + + "service.exe" + + "Service" + + "The service." + + "node.exe" + + "My Arguments" + + "rotate" + + "" + + "" + Domain + "" + + "" + Username + "" + + "" + Password + "" + + "" + + "" + + ExpectedWorkingDirectory + + "" + + @"C:\logs" + ""; - extendedServiceDescriptor = ServiceDescriptor.FromXML(SeedXml); - } - - [Test] - public void VerifyWorkingDirectory() - { - System.Diagnostics.Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + extendedServiceDescriptor.WorkingDirectory); - Assert.That(extendedServiceDescriptor.WorkingDirectory, Is.EqualTo(ExpectedWorkingDirectory)); - } - - [Test] - public void VerifyUsername() - { - System.Diagnostics.Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + extendedServiceDescriptor.WorkingDirectory); - Assert.That(extendedServiceDescriptor.ServiceAccountUser, Is.EqualTo(Domain + "\\" + Username)); - } - - [Test] - public void VerifyPassword() - { - System.Diagnostics.Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + extendedServiceDescriptor.WorkingDirectory); - Assert.That(extendedServiceDescriptor.ServiceAccountPassword, Is.EqualTo(Password)); + extendedServiceDescriptor = ServiceDescriptor.FromXML(SeedXml); + } + + [Test] + public void VerifyWorkingDirectory() + { + System.Diagnostics.Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + extendedServiceDescriptor.WorkingDirectory); + Assert.That(extendedServiceDescriptor.WorkingDirectory, Is.EqualTo(ExpectedWorkingDirectory)); + } + + [Test] + public void VerifyUsername() + { + System.Diagnostics.Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + extendedServiceDescriptor.WorkingDirectory); + Assert.That(extendedServiceDescriptor.ServiceAccountUser, Is.EqualTo(Domain + "\\" + Username)); + } + + [Test] + public void VerifyPassword() + { + System.Diagnostics.Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + extendedServiceDescriptor.WorkingDirectory); + Assert.That(extendedServiceDescriptor.ServiceAccountPassword, Is.EqualTo(Password)); } [Test] @@ -71,6 +73,85 @@ namespace winswTests sd = ServiceDescriptor.FromXML("test"); Assert.That(sd.Priority, Is.EqualTo(ProcessPriorityClass.Normal)); - } - } -} + } + + [Test] + public void StopParentProcessFirstIsFalseByDefault() + { + Assert.False(extendedServiceDescriptor.StopParentProcessFirst); + } + + [Test] + public void CanParseStopParentProcessFirst() + { + const string SeedXml = "" + + "true" + + ""; + var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml); + + Assert.True(serviceDescriptor.StopParentProcessFirst); + } + + [Test] + public void CanParseStopTimeout() + { + const string SeedXml = "" + + "60sec" + + ""; + var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml); + + Assert.That(serviceDescriptor.StopTimeout, Is.EqualTo(TimeSpan.FromSeconds(60))); + } + + [Test] + public void CanParseStopTimeoutFromMinutes() + { + const string SeedXml = "" + + "10min" + + ""; + var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml); + + Assert.That(serviceDescriptor.StopTimeout, Is.EqualTo(TimeSpan.FromMinutes(10))); + } + + [Test] + public void LogModeRollBySize() + { + const string SeedXml = "" + + "c:\\" + + "" + + "112" + + "113" + + "" + + ""; + + var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml); + serviceDescriptor.BaseName = "service"; + + var logHandler = serviceDescriptor.LogHandler as SizeBasedRollingLogAppender; + Assert.NotNull(logHandler); + Assert.That(logHandler.SizeTheshold, Is.EqualTo(112 * 1024)); + Assert.That(logHandler.FilesToKeep, Is.EqualTo(113)); + } + + [Test] + public void LogModeRollByTime() + { + const string SeedXml = "" + + "c:\\" + + "" + + "7" + + "log pattern" + + "" + + ""; + + var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml); + serviceDescriptor.BaseName = "service"; + + var logHandler = serviceDescriptor.LogHandler as TimeBasedRollingLogAppender; + Assert.NotNull(logHandler); + Assert.That(logHandler.Period, Is.EqualTo(7)); + Assert.That(logHandler.Pattern, Is.EqualTo("log pattern")); + } + } +}