using System; using System.Diagnostics; using NUnit.Framework; using winsw; namespace winswTests { using System; using WMI; [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"; private const string AllowServiceAccountLogonRight = "true"; [SetUp] public void SetUp() { const string seedXml = "" + "service.exe" + "Service" + "The service." + "node.exe" + "My Arguments" + "rotate" + "" + "" + Domain + "" + "" + Username + "" + "" + Password + "" + "" + AllowServiceAccountLogonRight + "" + "" + "" + ExpectedWorkingDirectory + "" + @"C:\logs" + ""; _extendedServiceDescriptor = ServiceDescriptor.FromXML(seedXml); } [Test] public void DefaultStartMode() { Assert.That(_extendedServiceDescriptor.StartMode, Is.EqualTo(StartMode.Automatic)); } [Test] [ExpectedException(typeof(System.ArgumentException))] public void IncorrectStartMode() { const string SeedXml = "" + "service.exe" + "Service" + "The service." + "node.exe" + "My Arguments" + "rotate" + "rotate" + "" + "" + Domain + "" + "" + Username + "" + "" + Password + "" + "" + AllowServiceAccountLogonRight + "" + "" + "" + ExpectedWorkingDirectory + "" + @"C:\logs" + ""; _extendedServiceDescriptor = ServiceDescriptor.FromXML(SeedXml); Assert.That(_extendedServiceDescriptor.StartMode, Is.EqualTo(StartMode.Manual)); } [Test] public void ChangedStartMode() { const string SeedXml = "" + "service.exe" + "Service" + "The service." + "node.exe" + "My Arguments" + "manual" + "rotate" + "" + "" + Domain + "" + "" + Username + "" + "" + Password + "" + "" + AllowServiceAccountLogonRight + "" + "" + "" + ExpectedWorkingDirectory + "" + @"C:\logs" + ""; _extendedServiceDescriptor = ServiceDescriptor.FromXML(SeedXml); Assert.That(_extendedServiceDescriptor.StartMode, Is.EqualTo(StartMode.Manual)); } [Test] public void VerifyWorkingDirectory() { Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + _extendedServiceDescriptor.WorkingDirectory); Assert.That(_extendedServiceDescriptor.WorkingDirectory, Is.EqualTo(ExpectedWorkingDirectory)); } [Test] public void VerifyServiceLogonRight() { Assert.That(_extendedServiceDescriptor.AllowServiceAcountLogonRight, Is.EqualTo(true)); } [Test] public void VerifyUsername() { Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + _extendedServiceDescriptor.WorkingDirectory); Assert.That(_extendedServiceDescriptor.ServiceAccountUser, Is.EqualTo(Domain + "\\" + Username)); } [Test] public void VerifyPassword() { Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + _extendedServiceDescriptor.WorkingDirectory); Assert.That(_extendedServiceDescriptor.ServiceAccountPassword, Is.EqualTo(Password)); } [Test] public void Priority() { var sd = ServiceDescriptor.FromXML("testnormal"); Assert.That(sd.Priority, Is.EqualTo(ProcessPriorityClass.Normal)); sd = ServiceDescriptor.FromXML("testidle"); Assert.That(sd.Priority, Is.EqualTo(ProcessPriorityClass.Idle)); 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")); } [Test] public void VerifyServiceLogonRightGraceful() { const string seedXml="" + "" + "" + Domain + "" + "" + Username + "" + "" + Password + "" + "true1" + "" + ""; var serviceDescriptor = ServiceDescriptor.FromXML(seedXml); Assert.That(serviceDescriptor.AllowServiceAcountLogonRight, Is.EqualTo(false)); } [Test] public void VerifyServiceLogonRightOmitted() { const string seedXml = "" + "" + "" + Domain + "" + "" + Username + "" + "" + Password + "" + "" + ""; var serviceDescriptor = ServiceDescriptor.FromXML(seedXml); Assert.That(serviceDescriptor.AllowServiceAcountLogonRight, Is.EqualTo(false)); } } }