ServiceDescriptorTests.cs 12 KB

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