PageRenderTime 64ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 1ms

/mcs/class/System.ServiceProcess/Test/System.ServiceProcess/ServiceControllerTest.cs

https://github.com/iainlane/mono
C# | 1437 lines | 1087 code | 213 blank | 137 comment | 112 complexity | 0fa93accaf189410736ebf37b58e4bc2 MD5 | raw file
  1. //
  2. // ServiceControllerTest.cs -
  3. // NUnit Test Cases for ServiceController
  4. //
  5. // Author:
  6. // Gert Driesen (drieseng@users.sourceforge.net)
  7. //
  8. // Copyright (C) 2006 Novell, Inc (http://www.novell.com)
  9. //
  10. // Permission is hereby granted, free of charge, to any person obtaining
  11. // a copy of this software and associated documentation files (the
  12. // "Software"), to deal in the Software without restriction, including
  13. // without limitation the rights to use, copy, modify, merge, publish,
  14. // distribute, sublicense, and/or sell copies of the Software, and to
  15. // permit persons to whom the Software is furnished to do so, subject to
  16. // the following conditions:
  17. //
  18. // The above copyright notice and this permission notice shall be
  19. // included in all copies or substantial portions of the Software.
  20. //
  21. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  22. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  23. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  24. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  25. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  26. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  27. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  28. //
  29. // TODO:
  30. // - Status
  31. // - Start
  32. using System;
  33. using System.ComponentModel;
  34. using System.ServiceProcess;
  35. using TimeoutException = System.ServiceProcess.TimeoutException;
  36. using NUnit.Framework;
  37. namespace MonoTests.System.ServiceProcess
  38. {
  39. [TestFixture]
  40. public class ServiceControllerTest
  41. {
  42. [Test]
  43. public void Constructor1 ()
  44. {
  45. if (RunningOnUnix)
  46. return;
  47. ServiceController sc = new ServiceController ();
  48. try {
  49. bool value = sc.CanPauseAndContinue;
  50. Assert.Fail ("#A1: " + value.ToString ());
  51. #if NET_2_0
  52. } catch (ArgumentException ex) {
  53. // Service name contains invalid characters, is empty or is
  54. // too long (max length = 80)
  55. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
  56. Assert.IsNotNull (ex.Message, "#A3");
  57. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#A4");
  58. Assert.IsTrue (ex.Message.IndexOf ("80") != -1, "#A5");
  59. Assert.IsNull (ex.ParamName, "#A6");
  60. Assert.IsNull (ex.InnerException, "#A7");
  61. }
  62. #else
  63. } catch (InvalidOperationException ex) {
  64. // Cannot open service on computer '.'
  65. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
  66. Assert.IsNotNull (ex.Message, "#A3");
  67. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#A4");
  68. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#A5");
  69. Assert.IsNotNull (ex.InnerException, "#A6");
  70. // The filename, directory name, or volume label is incorrect
  71. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#A7");
  72. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  73. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#A8");
  74. Assert.IsNotNull (win32Error.Message, "#A9");
  75. Assert.AreEqual (123, win32Error.NativeErrorCode, "#A10");
  76. Assert.IsNull (win32Error.InnerException, "#A11");
  77. }
  78. #endif
  79. try {
  80. bool value = sc.CanShutdown;
  81. Assert.Fail ("#B1: " + value.ToString ());
  82. #if NET_2_0
  83. } catch (ArgumentException ex) {
  84. // Service name contains invalid characters, is empty or is
  85. // too long (max length = 80)
  86. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
  87. Assert.IsNotNull (ex.Message, "#B3");
  88. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#B4");
  89. Assert.IsTrue (ex.Message.IndexOf ("80") != -1, "#B5");
  90. Assert.IsNull (ex.ParamName, "#B6");
  91. Assert.IsNull (ex.InnerException, "#B7");
  92. }
  93. #else
  94. } catch (InvalidOperationException ex) {
  95. // Cannot open service on computer '.'
  96. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
  97. Assert.IsNotNull (ex.Message, "#B3");
  98. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#B4");
  99. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#B5");
  100. Assert.IsNotNull (ex.InnerException, "#B6");
  101. // The filename, directory name, or volume label is incorrect
  102. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#B7");
  103. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  104. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#B8");
  105. Assert.IsNotNull (win32Error.Message, "#B9");
  106. Assert.AreEqual (123, win32Error.NativeErrorCode, "#B10");
  107. Assert.IsNull (win32Error.InnerException, "#B11");
  108. }
  109. #endif
  110. try {
  111. bool value = sc.CanStop;
  112. Assert.Fail ("#C1: " + value.ToString ());
  113. #if NET_2_0
  114. } catch (ArgumentException ex) {
  115. // Service name contains invalid characters, is empty or is
  116. // too long (max length = 80)
  117. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
  118. Assert.IsNotNull (ex.Message, "#C3");
  119. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#C4");
  120. Assert.IsTrue (ex.Message.IndexOf ("80") != -1, "#C5");
  121. Assert.IsNull (ex.ParamName, "#C6");
  122. Assert.IsNull (ex.InnerException, "#C7");
  123. }
  124. #else
  125. } catch (InvalidOperationException ex) {
  126. // Cannot open service on computer '.'
  127. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
  128. Assert.IsNotNull (ex.Message, "#C3");
  129. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#C4");
  130. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#C5");
  131. Assert.IsNotNull (ex.InnerException, "#C6");
  132. // The filename, directory name, or volume label is incorrect
  133. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#C7");
  134. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  135. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#C8");
  136. Assert.IsNotNull (win32Error.Message, "#C9");
  137. Assert.AreEqual (123, win32Error.NativeErrorCode, "#C10");
  138. Assert.IsNull (win32Error.InnerException, "#C11");
  139. }
  140. #endif
  141. // closing the ServiceController does not result in exception
  142. sc.Close ();
  143. try {
  144. sc.Continue ();
  145. Assert.Fail ("#D1");
  146. #if NET_2_0
  147. } catch (ArgumentException ex) {
  148. // Service name contains invalid characters, is empty or is
  149. // too long (max length = 80)
  150. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
  151. Assert.IsNotNull (ex.Message, "#D3");
  152. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#D4");
  153. Assert.IsTrue (ex.Message.IndexOf ("80") != -1, "#D5");
  154. Assert.IsNull (ex.ParamName, "#D6");
  155. Assert.IsNull (ex.InnerException, "#D7");
  156. }
  157. #else
  158. } catch (InvalidOperationException ex) {
  159. // Cannot open service on computer '.'
  160. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  161. Assert.IsNotNull (ex.Message, "#D3");
  162. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#D4");
  163. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#D5");
  164. Assert.IsNotNull (ex.InnerException, "#D6");
  165. // The filename, directory name, or volume label is incorrect
  166. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#D7");
  167. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  168. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#D8");
  169. Assert.IsNotNull (win32Error.Message, "#D9");
  170. Assert.AreEqual (123, win32Error.NativeErrorCode, "#D10");
  171. Assert.IsNull (win32Error.InnerException, "#D11");
  172. }
  173. #endif
  174. try {
  175. Assert.Fail ("#E1: " + sc.DependentServices.Length);
  176. #if NET_2_0
  177. } catch (ArgumentException ex) {
  178. // Service name contains invalid characters, is empty or is
  179. // too long (max length = 80)
  180. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#E2");
  181. Assert.IsNotNull (ex.Message, "#E3");
  182. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#E4");
  183. Assert.IsTrue (ex.Message.IndexOf ("80") != -1, "#E5");
  184. Assert.IsNull (ex.ParamName, "#E6");
  185. Assert.IsNull (ex.InnerException, "#E7");
  186. }
  187. #else
  188. } catch (InvalidOperationException ex) {
  189. // Cannot open service on computer '.'
  190. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
  191. Assert.IsNotNull (ex.Message, "#E3");
  192. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#E4");
  193. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#E5");
  194. Assert.IsNotNull (ex.InnerException, "#E6");
  195. // The filename, directory name, or volume label is incorrect
  196. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#E7");
  197. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  198. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#E8");
  199. Assert.IsNotNull (win32Error.Message, "#E9");
  200. Assert.AreEqual (123, win32Error.NativeErrorCode, "#E10");
  201. Assert.IsNull (win32Error.InnerException, "#E11");
  202. }
  203. #endif
  204. Assert.IsNotNull (sc.DisplayName, "#F1");
  205. Assert.AreEqual (string.Empty, sc.DisplayName, "#F2");
  206. try {
  207. sc.ExecuteCommand (0);
  208. Assert.Fail ("#G1");
  209. #if NET_2_0
  210. } catch (ArgumentException ex) {
  211. // Service name contains invalid characters, is empty or is
  212. // too long (max length = 80)
  213. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#G2");
  214. Assert.IsNotNull (ex.Message, "#G3");
  215. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#G4");
  216. Assert.IsTrue (ex.Message.IndexOf ("80") != -1, "#G5");
  217. Assert.IsNull (ex.ParamName, "#G6");
  218. Assert.IsNull (ex.InnerException, "#G7");
  219. }
  220. #else
  221. } catch (InvalidOperationException ex) {
  222. // Cannot open service on computer '.'
  223. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#G2");
  224. Assert.IsNotNull (ex.Message, "#G3");
  225. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#G4");
  226. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#G5");
  227. Assert.IsNotNull (ex.InnerException, "#G6");
  228. // The filename, directory name, or volume label is incorrect
  229. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#G7");
  230. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  231. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#G8");
  232. Assert.IsNotNull (win32Error.Message, "#G9");
  233. Assert.AreEqual (123, win32Error.NativeErrorCode, "#G10");
  234. Assert.IsNull (win32Error.InnerException, "#G11");
  235. }
  236. #endif
  237. Assert.IsNotNull (sc.MachineName, "#H1");
  238. Assert.AreEqual (".", sc.MachineName, "#H2");
  239. try {
  240. sc.Pause ();
  241. Assert.Fail ("#I1");
  242. #if NET_2_0
  243. } catch (ArgumentException ex) {
  244. // Service name contains invalid characters, is empty or is
  245. // too long (max length = 80)
  246. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#I2");
  247. Assert.IsNotNull (ex.Message, "#I3");
  248. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#I4");
  249. Assert.IsTrue (ex.Message.IndexOf ("80") != -1, "#I5");
  250. Assert.IsNull (ex.ParamName, "#I6");
  251. Assert.IsNull (ex.InnerException, "#I7");
  252. }
  253. #else
  254. } catch (InvalidOperationException ex) {
  255. // Cannot open service on computer '.'
  256. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#I2");
  257. Assert.IsNotNull (ex.Message, "#I3");
  258. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#I4");
  259. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#I5");
  260. Assert.IsNotNull (ex.InnerException, "#I6");
  261. // The filename, directory name, or volume label is incorrect
  262. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#I7");
  263. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  264. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#I8");
  265. Assert.IsNotNull (win32Error.Message, "#I9");
  266. Assert.AreEqual (123, win32Error.NativeErrorCode, "#I10");
  267. Assert.IsNull (win32Error.InnerException, "#I11");
  268. }
  269. #endif
  270. }
  271. [Test]
  272. public void Constructor2 ()
  273. {
  274. if (RunningOnUnix)
  275. return;
  276. ServiceController sc = new ServiceController ("lanmanworkstation");
  277. Assert.IsTrue (sc.CanPauseAndContinue, "#A1");
  278. Assert.IsTrue (sc.CanShutdown, "#B1");
  279. Assert.IsTrue (sc.CanStop, "#C1");
  280. sc.Close ();
  281. sc.Continue ();
  282. ServiceController [] dependentServices = sc.DependentServices;
  283. Assert.IsNotNull (dependentServices, "#D1");
  284. Assert.IsTrue (dependentServices.Length > 1, "#D2");
  285. Assert.IsNotNull (sc.DisplayName, "#E1");
  286. Assert.AreEqual ("Workstation", sc.DisplayName, "#E2");
  287. Assert.IsNotNull (sc.MachineName, "#F1");
  288. Assert.AreEqual (".", sc.MachineName, "#F2");
  289. sc.Refresh ();
  290. Assert.IsNotNull (sc.ServiceName, "#G1");
  291. Assert.AreEqual ("lanmanworkstation", sc.ServiceName, "#G2");
  292. ServiceController [] servicesDependedOn = sc.ServicesDependedOn;
  293. Assert.IsNotNull (servicesDependedOn, "#H1");
  294. Assert.AreEqual (0, servicesDependedOn.Length, "#H2");
  295. Assert.AreEqual (ServiceType.Win32ShareProcess, sc.ServiceType, "#I1");
  296. Assert.AreEqual (ServiceControllerStatus.Running, sc.Status, "#J1");
  297. }
  298. [Test]
  299. public void Constructor2_Name_Empty ()
  300. {
  301. try {
  302. new ServiceController (string.Empty);
  303. Assert.Fail ("#1");
  304. } catch (ArgumentException ex) {
  305. // Invalid value for parameter name
  306. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  307. Assert.IsNotNull (ex.Message, "#3");
  308. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#4");
  309. Assert.IsTrue (ex.Message.IndexOf ("name") != -1, "#5");
  310. Assert.IsNull (ex.ParamName, "#6");
  311. Assert.IsNull (ex.InnerException, "#7");
  312. }
  313. }
  314. [Test]
  315. public void Constructor2_Name_DisplayName ()
  316. {
  317. if (RunningOnUnix)
  318. return;
  319. ServiceController sc = new ServiceController ("workstation");
  320. Assert.IsTrue (sc.CanPauseAndContinue, "#A1");
  321. Assert.IsTrue (sc.CanShutdown, "#B1");
  322. Assert.IsTrue (sc.CanStop, "#C1");
  323. }
  324. [Test]
  325. public void Constructor2_Name_Null ()
  326. {
  327. try {
  328. new ServiceController (null);
  329. Assert.Fail ("#1");
  330. } catch (ArgumentException ex) {
  331. // Invalid value for parameter name
  332. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  333. Assert.IsNotNull (ex.Message, "#3");
  334. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#4");
  335. Assert.IsTrue (ex.Message.IndexOf ("name") != -1, "#5");
  336. Assert.IsNull (ex.ParamName, "#6");
  337. Assert.IsNull (ex.InnerException, "#7");
  338. }
  339. }
  340. [Test]
  341. public void Constructor2_Name_ServiceName ()
  342. {
  343. if (RunningOnUnix)
  344. return;
  345. ServiceController sc = new ServiceController ("lanmanworkstation");
  346. Assert.IsTrue (sc.CanPauseAndContinue, "#A1");
  347. Assert.IsTrue (sc.CanShutdown, "#B1");
  348. Assert.IsTrue (sc.CanStop, "#C1");
  349. }
  350. [Test]
  351. public void Constructor3 ()
  352. {
  353. if (RunningOnUnix)
  354. return;
  355. ServiceController sc = new ServiceController ("lanmanworkstation",
  356. Environment.MachineName);
  357. Assert.IsTrue (sc.CanPauseAndContinue, "#A1");
  358. Assert.IsTrue (sc.CanShutdown, "#B1");
  359. Assert.IsTrue (sc.CanStop, "#C1");
  360. sc.Close ();
  361. sc.Continue ();
  362. ServiceController [] dependentServices = sc.DependentServices;
  363. Assert.IsNotNull (dependentServices, "#D1");
  364. Assert.IsTrue (dependentServices.Length > 1, "#D2");
  365. Assert.IsNotNull (sc.DisplayName, "#E1");
  366. Assert.AreEqual ("Workstation", sc.DisplayName, "#E2");
  367. Assert.IsNotNull (sc.MachineName, "#F1");
  368. Assert.AreEqual (Environment.MachineName, sc.MachineName, "#F2");
  369. sc.Refresh ();
  370. Assert.IsNotNull (sc.ServiceName, "#G1");
  371. Assert.AreEqual ("lanmanworkstation", sc.ServiceName, "#G2");
  372. ServiceController [] servicesDependedOn = sc.ServicesDependedOn;
  373. Assert.IsNotNull (servicesDependedOn, "#H1");
  374. Assert.AreEqual (0, servicesDependedOn.Length, "#H2");
  375. Assert.AreEqual (ServiceType.Win32ShareProcess, sc.ServiceType, "#I1");
  376. Assert.AreEqual (ServiceControllerStatus.Running, sc.Status, "#J1");
  377. }
  378. [Test]
  379. public void Constructor3_MachineName_Empty ()
  380. {
  381. try {
  382. new ServiceController ("alerter", string.Empty);
  383. Assert.Fail ("#1");
  384. } catch (ArgumentException ex) {
  385. // MachineName value is invalid
  386. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  387. Assert.IsNotNull (ex.Message, "#3");
  388. Assert.IsTrue (ex.Message.IndexOf ("MachineName") != -1, "#4");
  389. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#5");
  390. Assert.IsNull (ex.ParamName, "#6");
  391. Assert.IsNull (ex.InnerException, "#7");
  392. }
  393. }
  394. [Test]
  395. public void Constructor3_MachineName_Null ()
  396. {
  397. try {
  398. new ServiceController ("alerter", null);
  399. Assert.Fail ("#1");
  400. } catch (ArgumentException ex) {
  401. // MachineName value is invalid
  402. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  403. Assert.IsNotNull (ex.Message, "#3");
  404. Assert.IsTrue (ex.Message.IndexOf ("MachineName") != -1, "#4");
  405. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#5");
  406. Assert.IsNull (ex.ParamName, "#6");
  407. Assert.IsNull (ex.InnerException, "#7");
  408. }
  409. }
  410. [Test]
  411. public void Constructor3_Name_Empty ()
  412. {
  413. try {
  414. new ServiceController (string.Empty, ".");
  415. Assert.Fail ("#1");
  416. } catch (ArgumentException ex) {
  417. // Invalid value for parameter name
  418. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  419. Assert.IsNotNull (ex.Message, "#3");
  420. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#4");
  421. Assert.IsTrue (ex.Message.IndexOf ("name") != -1, "#5");
  422. Assert.IsNull (ex.ParamName, "#6");
  423. Assert.IsNull (ex.InnerException, "#7");
  424. }
  425. }
  426. [Test]
  427. public void Constructor3_Name_Null ()
  428. {
  429. try {
  430. new ServiceController (null, ".");
  431. Assert.Fail ("#1");
  432. } catch (ArgumentException ex) {
  433. // Invalid value for parameter name
  434. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  435. Assert.IsNotNull (ex.Message, "#3");
  436. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#4");
  437. Assert.IsTrue (ex.Message.IndexOf ("name") != -1, "#5");
  438. Assert.IsNull (ex.ParamName, "#6");
  439. Assert.IsNull (ex.InnerException, "#7");
  440. }
  441. }
  442. [Test]
  443. public void CanPauseAndContinue ()
  444. {
  445. if (RunningOnUnix)
  446. return;
  447. ServiceController sc = new ServiceController ("Schedule", ".");
  448. Assert.IsTrue (sc.CanPauseAndContinue, "#1");
  449. sc.ServiceName = "SamSs";
  450. Assert.IsFalse (sc.CanPauseAndContinue, "#2");
  451. sc.DisplayName = "Workstation";
  452. Assert.IsTrue (sc.CanPauseAndContinue, "#3");
  453. sc.MachineName = "doesnotexist";
  454. try {
  455. bool value = sc.CanPauseAndContinue;
  456. Assert.Fail ("#4: " + value.ToString ());
  457. } catch (InvalidOperationException ex) {
  458. // Cannot open Service Control Manager on computer 'doesnotexist'.
  459. // This operation might require other priviliges
  460. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#5");
  461. Assert.IsNotNull (ex.Message, "#6");
  462. Assert.IsTrue (ex.Message.IndexOf ("'doesnotexist'") != -1, "#7");
  463. Assert.IsNotNull (ex.InnerException, "#8");
  464. // The RPC server is unavailable
  465. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#9");
  466. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  467. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#10");
  468. Assert.IsNotNull (win32Error.Message, "#11");
  469. Assert.AreEqual (1722, win32Error.NativeErrorCode, "#12");
  470. Assert.IsNull (win32Error.InnerException, "#13");
  471. }
  472. }
  473. [Test]
  474. public void CanPauseAndContinue_Machine_DoesNotExist ()
  475. {
  476. if (RunningOnUnix)
  477. return;
  478. ServiceController sc = new ServiceController ("Schedule",
  479. "doesnotexist");
  480. try {
  481. bool canPauseAndContinue = sc.CanPauseAndContinue;
  482. Assert.Fail ("#1: " + canPauseAndContinue);
  483. } catch (InvalidOperationException ex) {
  484. // Cannot open Service Control Manager on computer 'doesnotexist'.
  485. // This operation might require other priviliges
  486. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  487. Assert.IsNotNull (ex.Message, "#3");
  488. Assert.IsTrue (ex.Message.IndexOf ("'doesnotexist'") != -1, "#4");
  489. Assert.IsNotNull (ex.InnerException, "#5");
  490. // The RPC server is unavailable
  491. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#6");
  492. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  493. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#7");
  494. Assert.IsNotNull (win32Error.Message, "#8");
  495. Assert.AreEqual (1722, win32Error.NativeErrorCode, "#9");
  496. Assert.IsNull (win32Error.InnerException, "#10");
  497. }
  498. }
  499. [Test]
  500. public void CanPauseAndContinue_Service_Disabled ()
  501. {
  502. if (RunningOnUnix)
  503. return;
  504. ServiceController sc1 = new ServiceController ("NetDDE", ".");
  505. Assert.IsFalse (sc1.CanPauseAndContinue);
  506. }
  507. [Test]
  508. public void CanPauseAndContinue_Service_DoesNotExist ()
  509. {
  510. if (RunningOnUnix)
  511. return;
  512. ServiceController sc = new ServiceController ("doesnotexist", ".");
  513. try {
  514. bool canPauseAndContinue = sc.CanPauseAndContinue;
  515. Assert.Fail ("#1: " + canPauseAndContinue);
  516. } catch (InvalidOperationException ex) {
  517. // Cannot open doesnotexist service on computer '.'
  518. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  519. Assert.IsNotNull (ex.Message, "#3");
  520. Assert.IsTrue (ex.Message.IndexOf ("doesnotexist") != -1, "#4");
  521. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#5");
  522. Assert.IsNotNull (ex.InnerException, "#6");
  523. // The filename, directory name, or volume label is incorrect
  524. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#7");
  525. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  526. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#8");
  527. Assert.IsNotNull (win32Error.Message, "#9");
  528. Assert.AreEqual (1060, win32Error.NativeErrorCode, "#10");
  529. Assert.IsNull (win32Error.InnerException, "#11");
  530. }
  531. }
  532. [Test]
  533. public void CanPauseAndContinue_Service_OperationNotValid ()
  534. {
  535. if (RunningOnUnix)
  536. return;
  537. ServiceController sc1 = new ServiceController ("SamSs", ".");
  538. Assert.IsFalse (sc1.CanPauseAndContinue);
  539. }
  540. [Test]
  541. public void CanPauseAndContinue_Service_Running ()
  542. {
  543. if (RunningOnUnix)
  544. return;
  545. ServiceController sc = new ServiceController ("Schedule", ".");
  546. Assert.AreEqual (ServiceControllerStatus.Running, sc.Status, "#1");
  547. Assert.IsTrue (sc.CanPauseAndContinue, "#2");
  548. }
  549. [Test]
  550. public void CanPauseAndContinue_Service_Paused ()
  551. {
  552. if (RunningOnUnix)
  553. return;
  554. ServiceController sc1 = new ServiceController ("Schedule", ".");
  555. ServiceController sc2 = new ServiceController ("Schedule", ".");
  556. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#A1");
  557. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#A2");
  558. Assert.IsTrue (sc1.CanPauseAndContinue, "#B1");
  559. Assert.IsTrue (sc2.CanPauseAndContinue, "#B2");
  560. sc1.Pause ();
  561. try {
  562. Assert.IsTrue (sc1.CanPauseAndContinue, "#C1");
  563. Assert.IsTrue (sc2.CanPauseAndContinue, "#C2");
  564. sc1.WaitForStatus (ServiceControllerStatus.Paused, new TimeSpan (0, 0, 5));
  565. Assert.IsTrue (sc1.CanPauseAndContinue, "#D1");
  566. Assert.IsTrue (sc2.CanPauseAndContinue, "#D2");
  567. } finally {
  568. EnsureServiceIsRunning (sc1);
  569. sc2.Refresh ();
  570. }
  571. Assert.IsTrue (sc1.CanPauseAndContinue, "#E1");
  572. Assert.IsTrue (sc2.CanPauseAndContinue, "#E2");
  573. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#F1");
  574. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#F2");
  575. }
  576. [Test]
  577. public void CanPauseAndContinue_Service_Stopped ()
  578. {
  579. if (RunningOnUnix)
  580. return;
  581. ServiceController sc1 = new ServiceController ("Schedule", ".");
  582. ServiceController sc2 = new ServiceController ("Schedule", ".");
  583. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#A1");
  584. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#A2");
  585. Assert.IsTrue (sc1.CanPauseAndContinue, "#B1");
  586. Assert.IsTrue (sc2.CanPauseAndContinue, "#B2");
  587. sc1.Stop ();
  588. try {
  589. Assert.IsTrue (sc1.CanPauseAndContinue, "#C1");
  590. Assert.IsTrue (sc2.CanPauseAndContinue, "#C2");
  591. sc1.WaitForStatus (ServiceControllerStatus.Stopped, new TimeSpan (0, 0, 5));
  592. Assert.IsFalse (sc1.CanPauseAndContinue, "#D1");
  593. Assert.IsTrue (sc2.CanPauseAndContinue, "#D2");
  594. } finally {
  595. EnsureServiceIsRunning (sc1);
  596. sc2.Refresh ();
  597. }
  598. Assert.IsTrue (sc1.CanPauseAndContinue, "#E1");
  599. Assert.IsTrue (sc2.CanPauseAndContinue, "#E2");
  600. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#F1");
  601. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#F2");
  602. }
  603. [Test]
  604. public void CanPauseAndContinue_ServiceName_Empty ()
  605. {
  606. #if ONLY_1_1
  607. if (RunningOnUnix)
  608. return;
  609. #endif
  610. ServiceController sc = new ServiceController ();
  611. try {
  612. bool canPauseAndContinue = sc.CanPauseAndContinue;
  613. Assert.Fail ("#1: " + canPauseAndContinue);
  614. #if NET_2_0
  615. } catch (ArgumentException ex) {
  616. // Service name contains invalid characters, is empty or is
  617. // too long (max length = 80)
  618. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  619. Assert.IsNotNull (ex.Message, "#3");
  620. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#4");
  621. Assert.IsTrue (ex.Message.IndexOf ("80") != -1, "#5");
  622. Assert.IsNull (ex.ParamName, "#6");
  623. Assert.IsNull (ex.InnerException, "#7");
  624. }
  625. #else
  626. } catch (InvalidOperationException ex) {
  627. // Cannot open service on computer '.'
  628. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  629. Assert.IsNotNull (ex.Message, "#3");
  630. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#4");
  631. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#5");
  632. Assert.IsNotNull (ex.InnerException, "#6");
  633. // The filename, directory name, or volume label is incorrect
  634. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#7");
  635. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  636. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#8");
  637. Assert.IsNotNull (win32Error.Message, "#9");
  638. Assert.AreEqual (123, win32Error.NativeErrorCode, "#10");
  639. Assert.IsNull (win32Error.InnerException, "#11");
  640. }
  641. #endif
  642. }
  643. [Test]
  644. public void CanShutdown ()
  645. {
  646. if (RunningOnUnix)
  647. return;
  648. ServiceController sc = new ServiceController ("Schedule", ".");
  649. Assert.IsTrue (sc.CanShutdown, "#1");
  650. sc.ServiceName = "SamSs";
  651. Assert.IsFalse (sc.CanShutdown, "#2");
  652. sc.DisplayName = "Workstation";
  653. Assert.IsTrue (sc.CanShutdown, "#3");
  654. sc.MachineName = "doesnotexist";
  655. try {
  656. bool value = sc.CanShutdown;
  657. Assert.Fail ("#4: " + value.ToString ());
  658. } catch (InvalidOperationException ex) {
  659. // Cannot open Service Control Manager on computer 'doesnotexist'.
  660. // This operation might require other priviliges
  661. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#5");
  662. Assert.IsNotNull (ex.Message, "#6");
  663. Assert.IsTrue (ex.Message.IndexOf ("'doesnotexist'") != -1, "#7");
  664. Assert.IsNotNull (ex.InnerException, "#8");
  665. // The RPC server is unavailable
  666. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#9");
  667. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  668. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#10");
  669. Assert.IsNotNull (win32Error.Message, "#11");
  670. Assert.AreEqual (1722, win32Error.NativeErrorCode, "#12");
  671. Assert.IsNull (win32Error.InnerException, "#13");
  672. }
  673. }
  674. [Test]
  675. public void CanShutdown_Machine_DoesNotExist ()
  676. {
  677. if (RunningOnUnix)
  678. return;
  679. ServiceController sc = new ServiceController ("Schedule",
  680. "doesnotexist");
  681. try {
  682. bool canShutdown = sc.CanShutdown;
  683. Assert.Fail ("#1: " + canShutdown);
  684. } catch (InvalidOperationException ex) {
  685. // Cannot open Service Control Manager on computer 'doesnotexist'.
  686. // This operation might require other priviliges
  687. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  688. Assert.IsNotNull (ex.Message, "#3");
  689. Assert.IsTrue (ex.Message.IndexOf ("'doesnotexist'") != -1, "#4");
  690. Assert.IsNotNull (ex.InnerException, "#5");
  691. // The RPC server is unavailable
  692. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#6");
  693. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  694. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#7");
  695. Assert.IsNotNull (win32Error.Message, "#8");
  696. Assert.AreEqual (1722, win32Error.NativeErrorCode, "#9");
  697. Assert.IsNull (win32Error.InnerException, "#10");
  698. }
  699. }
  700. [Test]
  701. public void CanShutdown_Service_Disabled ()
  702. {
  703. if (RunningOnUnix)
  704. return;
  705. ServiceController sc1 = new ServiceController ("NetDDE", ".");
  706. Assert.IsFalse (sc1.CanShutdown);
  707. }
  708. [Test]
  709. public void CanShutdown_Service_DoesNotExist ()
  710. {
  711. if (RunningOnUnix)
  712. return;
  713. ServiceController sc = new ServiceController ("doesnotexist", ".");
  714. try {
  715. bool value = sc.CanShutdown;
  716. Assert.Fail ("#1: " + value.ToString ());
  717. } catch (InvalidOperationException ex) {
  718. // Cannot open doesnotexist service on computer '.'
  719. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  720. Assert.IsNotNull (ex.Message, "#3");
  721. Assert.IsTrue (ex.Message.IndexOf ("doesnotexist") != -1, "#4");
  722. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#5");
  723. Assert.IsNotNull (ex.InnerException, "#6");
  724. // The filename, directory name, or volume label is incorrect
  725. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#7");
  726. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  727. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#8");
  728. Assert.IsNotNull (win32Error.Message, "#9");
  729. Assert.AreEqual (1060, win32Error.NativeErrorCode, "#10");
  730. Assert.IsNull (win32Error.InnerException, "#11");
  731. }
  732. }
  733. [Test]
  734. public void CanShutdown_Service_OperationNotValid ()
  735. {
  736. if (RunningOnUnix)
  737. return;
  738. ServiceController sc1 = new ServiceController ("SamSs", ".");
  739. Assert.IsFalse (sc1.CanShutdown);
  740. }
  741. [Test]
  742. public void CanShutdown_Service_Running ()
  743. {
  744. if (RunningOnUnix)
  745. return;
  746. ServiceController sc = new ServiceController ("Schedule", ".");
  747. Assert.AreEqual (ServiceControllerStatus.Running, sc.Status, "#1");
  748. Assert.IsTrue (sc.CanShutdown, "#2");
  749. }
  750. [Test]
  751. public void CanShutdown_Service_Paused ()
  752. {
  753. if (RunningOnUnix)
  754. return;
  755. ServiceController sc1 = new ServiceController ("Schedule", ".");
  756. ServiceController sc2 = new ServiceController ("Schedule", ".");
  757. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#A1");
  758. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#A2");
  759. Assert.IsTrue (sc1.CanShutdown, "#B1");
  760. Assert.IsTrue (sc2.CanShutdown, "#B2");
  761. sc1.Pause ();
  762. try {
  763. Assert.IsTrue (sc1.CanShutdown, "#C1");
  764. Assert.IsTrue (sc2.CanShutdown, "#C2");
  765. sc1.WaitForStatus (ServiceControllerStatus.Paused, new TimeSpan (0, 0, 5));
  766. Assert.IsTrue (sc1.CanShutdown, "#D1");
  767. Assert.IsTrue (sc2.CanShutdown, "#D2");
  768. } finally {
  769. EnsureServiceIsRunning (sc1);
  770. sc2.Refresh ();
  771. }
  772. Assert.IsTrue (sc1.CanShutdown, "#E1");
  773. Assert.IsTrue (sc2.CanShutdown, "#E2");
  774. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#F1");
  775. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#F2");
  776. }
  777. [Test]
  778. public void CanShutdown_Service_Stopped ()
  779. {
  780. if (RunningOnUnix)
  781. return;
  782. ServiceController sc1 = new ServiceController ("Schedule", ".");
  783. ServiceController sc2 = new ServiceController ("Schedule", ".");
  784. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#A1");
  785. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#A2");
  786. Assert.IsTrue (sc1.CanShutdown, "#B1");
  787. Assert.IsTrue (sc2.CanShutdown, "#B2");
  788. sc1.Stop ();
  789. try {
  790. Assert.IsTrue (sc1.CanShutdown, "#C1");
  791. Assert.IsTrue (sc2.CanShutdown, "#C2");
  792. sc1.WaitForStatus (ServiceControllerStatus.Stopped, new TimeSpan (0, 0, 5));
  793. Assert.IsFalse (sc1.CanShutdown, "#D1");
  794. Assert.IsTrue (sc2.CanShutdown, "#D2");
  795. } finally {
  796. EnsureServiceIsRunning (sc1);
  797. sc2.Refresh ();
  798. }
  799. Assert.IsTrue (sc1.CanShutdown, "#E1");
  800. Assert.IsTrue (sc2.CanShutdown, "#E2");
  801. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#F1");
  802. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#F2");
  803. }
  804. [Test]
  805. public void CanShutdown_ServiceName_Empty ()
  806. {
  807. #if ONLY_1_1
  808. if (RunningOnUnix)
  809. return;
  810. #endif
  811. ServiceController sc = new ServiceController ();
  812. try {
  813. bool canShutdown = sc.CanShutdown;
  814. Assert.Fail ("#1: " + canShutdown);
  815. #if NET_2_0
  816. } catch (ArgumentException ex) {
  817. // Service name contains invalid characters, is empty or is
  818. // too long (max length = 80)
  819. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  820. Assert.IsNotNull (ex.Message, "#3");
  821. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#4");
  822. Assert.IsTrue (ex.Message.IndexOf ("80") != -1, "#5");
  823. Assert.IsNull (ex.ParamName, "#6");
  824. Assert.IsNull (ex.InnerException, "#7");
  825. }
  826. #else
  827. } catch (InvalidOperationException ex) {
  828. // Cannot open service on computer '.'
  829. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  830. Assert.IsNotNull (ex.Message, "#3");
  831. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#4");
  832. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#5");
  833. Assert.IsNotNull (ex.InnerException, "#6");
  834. // The filename, directory name, or volume label is incorrect
  835. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#7");
  836. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  837. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#8");
  838. Assert.IsNotNull (win32Error.Message, "#9");
  839. Assert.AreEqual (123, win32Error.NativeErrorCode, "#10");
  840. Assert.IsNull (win32Error.InnerException, "#11");
  841. }
  842. #endif
  843. }
  844. [Test]
  845. public void CanStop ()
  846. {
  847. if (RunningOnUnix)
  848. return;
  849. ServiceController sc = new ServiceController ("Schedule", ".");
  850. Assert.IsTrue (sc.CanStop, "#1");
  851. sc.ServiceName = "SamSs";
  852. Assert.IsFalse (sc.CanStop, "#2");
  853. sc.DisplayName = "Workstation";
  854. Assert.IsTrue (sc.CanStop, "#3");
  855. sc.MachineName = "doesnotexist";
  856. try {
  857. bool value = sc.CanStop;
  858. Assert.Fail ("#4: " + value.ToString ());
  859. } catch (InvalidOperationException ex) {
  860. // Cannot open Service Control Manager on computer 'doesnotexist'.
  861. // This operation might require other priviliges
  862. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#5");
  863. Assert.IsNotNull (ex.Message, "#6");
  864. Assert.IsTrue (ex.Message.IndexOf ("'doesnotexist'") != -1, "#7");
  865. Assert.IsNotNull (ex.InnerException, "#8");
  866. // The RPC server is unavailable
  867. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#9");
  868. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  869. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#10");
  870. Assert.IsNotNull (win32Error.Message, "#11");
  871. Assert.AreEqual (1722, win32Error.NativeErrorCode, "#12");
  872. Assert.IsNull (win32Error.InnerException, "#13");
  873. }
  874. }
  875. [Test]
  876. public void CanStop_Machine_DoesNotExist ()
  877. {
  878. if (RunningOnUnix)
  879. return;
  880. ServiceController sc = new ServiceController ("Schedule",
  881. "doesnotexist");
  882. try {
  883. bool canStop = sc.CanStop;
  884. Assert.Fail ("#1: " + canStop);
  885. } catch (InvalidOperationException ex) {
  886. // Cannot open Service Control Manager on computer 'doesnotexist'.
  887. // This operation might require other priviliges
  888. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  889. Assert.IsNotNull (ex.Message, "#3");
  890. Assert.IsTrue (ex.Message.IndexOf ("'doesnotexist'") != -1, "#4");
  891. Assert.IsNotNull (ex.InnerException, "#5");
  892. // The RPC server is unavailable
  893. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#6");
  894. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  895. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#7");
  896. Assert.IsNotNull (win32Error.Message, "#8");
  897. Assert.AreEqual (1722, win32Error.NativeErrorCode, "#9");
  898. Assert.IsNull (win32Error.InnerException, "#10");
  899. }
  900. }
  901. [Test]
  902. public void CanStop_Service_Disabled ()
  903. {
  904. if (RunningOnUnix)
  905. return;
  906. ServiceController sc1 = new ServiceController ("NetDDE", ".");
  907. Assert.IsFalse (sc1.CanStop);
  908. }
  909. [Test]
  910. public void CanStop_Service_DoesNotExist ()
  911. {
  912. if (RunningOnUnix)
  913. return;
  914. ServiceController sc = new ServiceController ("doesnotexist", ".");
  915. try {
  916. bool canStop = sc.CanStop;
  917. Assert.Fail ("#1: " + canStop);
  918. } catch (InvalidOperationException ex) {
  919. // Cannot open doesnotexist service on computer '.'
  920. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  921. Assert.IsNotNull (ex.Message, "#3");
  922. Assert.IsTrue (ex.Message.IndexOf ("doesnotexist") != -1, "#4");
  923. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#5");
  924. Assert.IsNotNull (ex.InnerException, "#6");
  925. // The filename, directory name, or volume label is incorrect
  926. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#7");
  927. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  928. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#8");
  929. Assert.IsNotNull (win32Error.Message, "#9");
  930. Assert.AreEqual (1060, win32Error.NativeErrorCode, "#10");
  931. Assert.IsNull (win32Error.InnerException, "#11");
  932. }
  933. }
  934. [Test]
  935. public void CanStop_Service_OperationNotValid ()
  936. {
  937. if (RunningOnUnix)
  938. return;
  939. ServiceController sc1 = new ServiceController ("SamSs", ".");
  940. Assert.IsFalse (sc1.CanStop);
  941. }
  942. [Test]
  943. public void CanStop_Service_Running ()
  944. {
  945. if (RunningOnUnix)
  946. return;
  947. ServiceController sc = new ServiceController ("Schedule", ".");
  948. Assert.AreEqual (ServiceControllerStatus.Running, sc.Status, "#1");
  949. Assert.IsTrue (sc.CanStop, "#2");
  950. }
  951. [Test]
  952. public void CanStop_Service_Paused ()
  953. {
  954. if (RunningOnUnix)
  955. return;
  956. ServiceController sc1 = new ServiceController ("Schedule", ".");
  957. ServiceController sc2 = new ServiceController ("Schedule", ".");
  958. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#A1");
  959. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#A2");
  960. Assert.IsTrue (sc1.CanStop, "#B1");
  961. Assert.IsTrue (sc2.CanStop, "#B2");
  962. sc1.Pause ();
  963. try {
  964. Assert.IsTrue (sc1.CanStop, "#C1");
  965. Assert.IsTrue (sc2.CanStop, "#C2");
  966. sc1.WaitForStatus (ServiceControllerStatus.Paused, new TimeSpan (0, 0, 5));
  967. Assert.IsTrue (sc1.CanStop, "#D1");
  968. Assert.IsTrue (sc2.CanStop, "#D2");
  969. } finally {
  970. EnsureServiceIsRunning (sc1);
  971. sc2.Refresh ();
  972. }
  973. Assert.IsTrue (sc1.CanStop, "#E1");
  974. Assert.IsTrue (sc2.CanStop, "#E2");
  975. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#F1");
  976. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#F2");
  977. }
  978. [Test]
  979. public void CanStop_Service_Stopped ()
  980. {
  981. if (RunningOnUnix)
  982. return;
  983. ServiceController sc1 = new ServiceController ("Schedule", ".");
  984. ServiceController sc2 = new ServiceController ("Schedule", ".");
  985. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#A1");
  986. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#A2");
  987. Assert.IsTrue (sc1.CanStop, "#B1");
  988. Assert.IsTrue (sc2.CanStop, "#B2");
  989. sc1.Stop ();
  990. try {
  991. Assert.IsTrue (sc1.CanStop, "#C1");
  992. Assert.IsTrue (sc2.CanStop, "#C2");
  993. sc1.WaitForStatus (ServiceControllerStatus.Stopped, new TimeSpan (0, 0, 5));
  994. Assert.IsFalse (sc1.CanStop, "#D1");
  995. Assert.IsTrue (sc2.CanStop, "#D2");
  996. } finally {
  997. EnsureServiceIsRunning (sc1);
  998. sc2.Refresh ();
  999. }
  1000. Assert.IsTrue (sc1.CanShutdown, "#E1");
  1001. Assert.IsTrue (sc2.CanShutdown, "#E2");
  1002. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#F1");
  1003. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#F2");
  1004. }
  1005. [Test]
  1006. public void CanStop_ServiceName_Empty ()
  1007. {
  1008. #if ONLY_1_1
  1009. if (RunningOnUnix)
  1010. return;
  1011. #endif
  1012. ServiceController sc = new ServiceController ();
  1013. try {
  1014. bool canStop = sc.CanStop;
  1015. Assert.Fail ("#1: " + canStop);
  1016. #if NET_2_0
  1017. } catch (ArgumentException ex) {
  1018. // Service name contains invalid characters, is empty or is
  1019. // too long (max length = 80)
  1020. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  1021. Assert.IsNotNull (ex.Message, "#3");
  1022. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#4");
  1023. Assert.IsTrue (ex.Message.IndexOf ("80") != -1, "#5");
  1024. Assert.IsNull (ex.ParamName, "#6");
  1025. Assert.IsNull (ex.InnerException, "#7");
  1026. }
  1027. #else
  1028. } catch (InvalidOperationException ex) {
  1029. // Cannot open service on computer '.'
  1030. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  1031. Assert.IsNotNull (ex.Message, "#3");
  1032. Assert.IsTrue (ex.Message.IndexOf (" ") != -1, "#4");
  1033. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#5");
  1034. Assert.IsNotNull (ex.InnerException, "#6");
  1035. // The filename, directory name, or volume label is incorrect
  1036. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#7");
  1037. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  1038. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#8");
  1039. Assert.IsNotNull (win32Error.Message, "#9");
  1040. Assert.AreEqual (123, win32Error.NativeErrorCode, "#10");
  1041. Assert.IsNull (win32Error.InnerException, "#11");
  1042. }
  1043. #endif
  1044. }
  1045. [Test]
  1046. public void Continue ()
  1047. {
  1048. if (RunningOnUnix)
  1049. return;
  1050. ServiceController sc1 = new ServiceController ("Schedule", ".");
  1051. ServiceController sc2 = new ServiceController ("Schedule", ".");
  1052. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#A1");
  1053. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#A2");
  1054. sc1.Pause ();
  1055. try {
  1056. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#B1");
  1057. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#B2");
  1058. sc1.WaitForStatus (ServiceControllerStatus.Paused, new TimeSpan (0, 0, 5));
  1059. Assert.AreEqual (ServiceControllerStatus.Paused, sc1.Status, "#C1");
  1060. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#C2");
  1061. sc1.Continue ();
  1062. Assert.AreEqual (ServiceControllerStatus.Paused, sc1.Status, "#D1");
  1063. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#D2");
  1064. sc1.WaitForStatus (ServiceControllerStatus.Running, new TimeSpan (0, 0, 5));
  1065. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#E1");
  1066. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#E2");
  1067. } finally {
  1068. EnsureServiceIsRunning (sc1);
  1069. sc2.Refresh ();
  1070. }
  1071. }
  1072. [Test]
  1073. public void Continue_Machine_DoesNotExist ()
  1074. {
  1075. if (RunningOnUnix)
  1076. return;
  1077. ServiceController sc = new ServiceController ("Schedule",
  1078. "doesnotexist");
  1079. try {
  1080. sc.Continue ();
  1081. Assert.Fail ("#1");
  1082. } catch (InvalidOperationException ex) {
  1083. // Cannot open Service Control Manager on computer 'doesnotexist'.
  1084. // This operation might require other priviliges
  1085. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  1086. Assert.IsNotNull (ex.Message, "#3");
  1087. Assert.IsTrue (ex.Message.IndexOf ("'doesnotexist'") != -1, "#4");
  1088. Assert.IsNotNull (ex.InnerException, "#5");
  1089. // The RPC server is unavailable
  1090. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#6");
  1091. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  1092. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#7");
  1093. Assert.IsNotNull (win32Error.Message, "#8");
  1094. Assert.AreEqual (1722, win32Error.NativeErrorCode, "#9");
  1095. Assert.IsNull (win32Error.InnerException, "#10");
  1096. }
  1097. }
  1098. [Test]
  1099. public void Continue_Service_Disabled ()
  1100. {
  1101. if (RunningOnUnix)
  1102. return;
  1103. ServiceController sc1 = new ServiceController ("NetDDE", ".");
  1104. ServiceController sc2 = new ServiceController ("NetDDE", ".");
  1105. Assert.AreEqual (ServiceControllerStatus.Stopped, sc1.Status, "#A1");
  1106. Assert.AreEqual (ServiceControllerStatus.Stopped, sc2.Status, "#A2");
  1107. try {
  1108. sc1.Continue ();
  1109. Assert.Fail ("#B1");
  1110. } catch (InvalidOperationException ex) {
  1111. // Cannot resume NetDDE service on computer '.'
  1112. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
  1113. Assert.IsNotNull (ex.Message, "#B3");
  1114. Assert.IsTrue (ex.Message.IndexOf ("NetDDE") != -1, "#B4");
  1115. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#B5");
  1116. Assert.IsNotNull (ex.InnerException, "#B6");
  1117. // The service has not been started
  1118. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#B7");
  1119. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  1120. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#B8");
  1121. Assert.IsNotNull (win32Error.Message, "#B9");
  1122. Assert.AreEqual (1062, win32Error.NativeErrorCode, "#B10");
  1123. Assert.IsNull (win32Error.InnerException, "#B11");
  1124. }
  1125. Assert.AreEqual (ServiceControllerStatus.Stopped, sc1.Status, "#C1");
  1126. Assert.AreEqual (ServiceControllerStatus.Stopped, sc2.Status, "#C2");
  1127. }
  1128. [Test]
  1129. public void Continue_Service_DoesNotExist ()
  1130. {
  1131. if (RunningOnUnix)
  1132. return;
  1133. ServiceController sc = new ServiceController ("doesnotexist", ".");
  1134. try {
  1135. sc.Continue ();
  1136. Assert.Fail ("#1");
  1137. } catch (InvalidOperationException ex) {
  1138. // Cannot open doesnotexist service on computer '.'
  1139. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
  1140. Assert.IsNotNull (ex.Message, "#3");
  1141. Assert.IsTrue (ex.Message.IndexOf ("doesnotexist") != -1, "#4");
  1142. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#5");
  1143. Assert.IsNotNull (ex.InnerException, "#6");
  1144. // The filename, directory name, or volume label is incorrect
  1145. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#7");
  1146. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  1147. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#8");
  1148. Assert.IsNotNull (win32Error.Message, "#9");
  1149. Assert.AreEqual (1060, win32Error.NativeErrorCode, "#10");
  1150. Assert.IsNull (win32Error.InnerException, "#11");
  1151. }
  1152. }
  1153. [Test]
  1154. public void Continue_Service_OperationNotValid ()
  1155. {
  1156. if (RunningOnUnix)
  1157. return;
  1158. ServiceController sc1 = new ServiceController ("SamSs", ".");
  1159. ServiceController sc2 = new ServiceController ("SamSs", ".");
  1160. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#A1");
  1161. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#A2");
  1162. try {
  1163. sc1.Continue ();
  1164. Assert.Fail ("#B1");
  1165. } catch (InvalidOperationException ex) {
  1166. // Cannot resume SamSs service on computer '.'
  1167. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
  1168. Assert.IsNotNull (ex.Message, "#B3");
  1169. Assert.IsTrue (ex.Message.IndexOf ("SamSs") != -1, "#B4");
  1170. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#B5");
  1171. Assert.IsNotNull (ex.InnerException, "#B6");
  1172. // The requested control is not valid for this service
  1173. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#B7");
  1174. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  1175. //Assert.AreEqual (-2147467259, win32Error.ErrorCode, "#B8");
  1176. Assert.IsNotNull (win32Error.Message, "#B9");
  1177. Assert.AreEqual (1052, win32Error.NativeErrorCode, "#B10");
  1178. Assert.IsNull (win32Error.InnerException, "#B11");
  1179. }
  1180. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#C1");
  1181. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#C2");
  1182. }
  1183. [Test]
  1184. public void Continue_Service_Running ()
  1185. {
  1186. if (RunningOnUnix)
  1187. return;
  1188. ServiceController sc1 = new ServiceController ("Schedule", ".");
  1189. ServiceController sc2 = new ServiceController ("Schedule", ".");
  1190. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#A1");
  1191. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#A2");
  1192. sc1.Continue ();
  1193. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#B1");
  1194. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#B2");
  1195. }
  1196. [Test]
  1197. public void Continue_Service_Stopped ()
  1198. {
  1199. if (RunningOnUnix)
  1200. return;
  1201. ServiceController sc1 = new ServiceController ("Schedule", ".");
  1202. ServiceController sc2 = new ServiceController ("Schedule", ".");
  1203. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#A1");
  1204. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#A2");
  1205. sc1.Stop ();
  1206. try {
  1207. Assert.AreEqual (ServiceControllerStatus.Running, sc1.Status, "#B1");
  1208. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#B2");
  1209. sc1.WaitForStatus (ServiceControllerStatus.Stopped, new TimeSpan (0, 0, 5));
  1210. Assert.AreEqual (ServiceControllerStatus.Stopped, sc1.Status, "#C1");
  1211. Assert.AreEqual (ServiceControllerStatus.Running, sc2.Status, "#C2");
  1212. sc1.Continue ();
  1213. Assert.Fail ("#D1");
  1214. } catch (InvalidOperationException ex) {
  1215. // Cannot resume Schedule service on computer '.'
  1216. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  1217. Assert.IsNotNull (ex.Message, "#D3");
  1218. Assert.IsTrue (ex.Message.IndexOf ("Schedule") != -1, "#D4");
  1219. Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#D5");
  1220. Assert.IsNotNull (ex.InnerException, "#D6");
  1221. // The service has not been started
  1222. Assert.AreEqual (typeof (Win32Exception), ex.InnerException.GetType (), "#D7");
  1223. Win32Exception win32Error = (Win32Exception) ex.InnerException;
  1224. //Assert.AreEqual (-2147467259, win32E