ServiceDescriptorTests.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. using NUnit.Framework;
  2. using winsw;
  3. using System.Diagnostics;
  4. using System.Xml;
  5. namespace winswTests
  6. {
  7. using System;
  8. [TestFixture]
  9. public class ServiceDescriptorTests
  10. {
  11. private ServiceDescriptor extendedServiceDescriptor;
  12. private const string ExpectedWorkingDirectory = @"Z:\Path\SubPath";
  13. private const string Username = "User";
  14. private const string Password = "Password";
  15. private const string Domain = "Domain";
  16. private const string AllowServiceAccountLogonRight = "true";
  17. [SetUp]
  18. public void SetUp()
  19. {
  20. const string SeedXml = "<service>"
  21. + "<id>service.exe</id>"
  22. + "<name>Service</name>"
  23. + "<description>The service.</description>"
  24. + "<executable>node.exe</executable>"
  25. + "<arguments>My Arguments</arguments>"
  26. + "<logmode>rotate</logmode>"
  27. + "<serviceaccount>"
  28. + "<domain>" + Domain + "</domain>"
  29. + "<user>" + Username + "</user>"
  30. + "<password>" + Password + "</password>"
  31. + "<allowservicelogon>" + AllowServiceAccountLogonRight + "</allowservicelogon>"
  32. + "</serviceaccount>"
  33. + "<workingdirectory>"
  34. + ExpectedWorkingDirectory
  35. + "</workingdirectory>"
  36. + @"<logpath>C:\logs</logpath>"
  37. + "</service>";
  38. extendedServiceDescriptor = ServiceDescriptor.FromXML(SeedXml);
  39. }
  40. [Test]
  41. public void VerifyWorkingDirectory()
  42. {
  43. System.Diagnostics.Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + extendedServiceDescriptor.WorkingDirectory);
  44. Assert.That(extendedServiceDescriptor.WorkingDirectory, Is.EqualTo(ExpectedWorkingDirectory));
  45. }
  46. [Test]
  47. public void VerifyServiceLogonRight()
  48. {
  49. Assert.That(extendedServiceDescriptor.AllowServiceAcountLogonRight, Is.EqualTo(true));
  50. }
  51. [Test]
  52. public void VerifyUsername()
  53. {
  54. System.Diagnostics.Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + extendedServiceDescriptor.WorkingDirectory);
  55. Assert.That(extendedServiceDescriptor.ServiceAccountUser, Is.EqualTo(Domain + "\\" + Username));
  56. }
  57. [Test]
  58. public void VerifyPassword()
  59. {
  60. System.Diagnostics.Debug.WriteLine("_extendedServiceDescriptor.WorkingDirectory :: " + extendedServiceDescriptor.WorkingDirectory);
  61. Assert.That(extendedServiceDescriptor.ServiceAccountPassword, Is.EqualTo(Password));
  62. }
  63. [Test]
  64. public void Priority()
  65. {
  66. var sd = ServiceDescriptor.FromXML("<service><id>test</id><priority>normal</priority></service>");
  67. Assert.That(sd.Priority, Is.EqualTo(ProcessPriorityClass.Normal));
  68. sd = ServiceDescriptor.FromXML("<service><id>test</id><priority>idle</priority></service>");
  69. Assert.That(sd.Priority, Is.EqualTo(ProcessPriorityClass.Idle));
  70. sd = ServiceDescriptor.FromXML("<service><id>test</id></service>");
  71. Assert.That(sd.Priority, Is.EqualTo(ProcessPriorityClass.Normal));
  72. }
  73. [Test]
  74. public void StopParentProcessFirstIsFalseByDefault()
  75. {
  76. Assert.False(extendedServiceDescriptor.StopParentProcessFirst);
  77. }
  78. [Test]
  79. public void CanParseStopParentProcessFirst()
  80. {
  81. const string SeedXml = "<service>"
  82. + "<stopparentprocessfirst>true</stopparentprocessfirst>"
  83. + "</service>";
  84. var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml);
  85. Assert.True(serviceDescriptor.StopParentProcessFirst);
  86. }
  87. [Test]
  88. public void CanParseStopTimeout()
  89. {
  90. const string SeedXml = "<service>"
  91. + "<stoptimeout>60sec</stoptimeout>"
  92. + "</service>";
  93. var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml);
  94. Assert.That(serviceDescriptor.StopTimeout, Is.EqualTo(TimeSpan.FromSeconds(60)));
  95. }
  96. [Test]
  97. public void CanParseStopTimeoutFromMinutes()
  98. {
  99. const string SeedXml = "<service>"
  100. + "<stoptimeout>10min</stoptimeout>"
  101. + "</service>";
  102. var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml);
  103. Assert.That(serviceDescriptor.StopTimeout, Is.EqualTo(TimeSpan.FromMinutes(10)));
  104. }
  105. [Test]
  106. public void LogModeRollBySize()
  107. {
  108. const string SeedXml = "<service>"
  109. + "<logpath>c:\\</logpath>"
  110. + "<log mode=\"roll-by-size\">"
  111. + "<sizeThreshold>112</sizeThreshold>"
  112. + "<keepFiles>113</keepFiles>"
  113. + "</log>"
  114. + "</service>";
  115. var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml);
  116. serviceDescriptor.BaseName = "service";
  117. var logHandler = serviceDescriptor.LogHandler as SizeBasedRollingLogAppender;
  118. Assert.NotNull(logHandler);
  119. Assert.That(logHandler.SizeTheshold, Is.EqualTo(112 * 1024));
  120. Assert.That(logHandler.FilesToKeep, Is.EqualTo(113));
  121. }
  122. [Test]
  123. public void LogModeRollByTime()
  124. {
  125. const string SeedXml = "<service>"
  126. + "<logpath>c:\\</logpath>"
  127. + "<log mode=\"roll-by-time\">"
  128. + "<period>7</period>"
  129. + "<pattern>log pattern</pattern>"
  130. + "</log>"
  131. + "</service>";
  132. var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml);
  133. serviceDescriptor.BaseName = "service";
  134. var logHandler = serviceDescriptor.LogHandler as TimeBasedRollingLogAppender;
  135. Assert.NotNull(logHandler);
  136. Assert.That(logHandler.Period, Is.EqualTo(7));
  137. Assert.That(logHandler.Pattern, Is.EqualTo("log pattern"));
  138. }
  139. [Test]
  140. public void VerifyServiceLogonRightGraceful()
  141. {
  142. const string SeedXml="<service>"
  143. + "<serviceaccount>"
  144. + "<domain>" + Domain + "</domain>"
  145. + "<user>" + Username + "</user>"
  146. + "<password>" + Password + "</password>"
  147. + "<allowservicelogon>true1</allowservicelogon>"
  148. + "</serviceaccount>"
  149. + "</service>";
  150. var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml);
  151. Assert.That(serviceDescriptor.AllowServiceAcountLogonRight, Is.EqualTo(false));
  152. }
  153. [Test]
  154. public void VerifyServiceLogonRightOmitted()
  155. {
  156. const string SeedXml = "<service>"
  157. + "<serviceaccount>"
  158. + "<domain>" + Domain + "</domain>"
  159. + "<user>" + Username + "</user>"
  160. + "<password>" + Password + "</password>"
  161. + "</serviceaccount>"
  162. + "</service>";
  163. var serviceDescriptor = ServiceDescriptor.FromXML(SeedXml);
  164. Assert.That(serviceDescriptor.AllowServiceAcountLogonRight, Is.EqualTo(false));
  165. }
  166. }
  167. }