SemaphoreLightTest.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System.Threading;
  2. using Renci.SshNet.Common;
  3. using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. using System;
  5. using Renci.SshNet.Tests.Common;
  6. namespace Renci.SshNet.Tests.Classes.Common
  7. {
  8. [TestClass()]
  9. public class SemaphoreLightTest : TestBase
  10. {
  11. [TestMethod()]
  12. public void SemaphoreLightConstructorTest()
  13. {
  14. var initialCount = new Random().Next(1, 10);
  15. var target = new SemaphoreLight(initialCount);
  16. Assert.AreEqual(initialCount, target.CurrentCount);
  17. }
  18. [TestMethod()]
  19. public void Release()
  20. {
  21. var initialCount = new Random().Next(1, 10);
  22. var target = new SemaphoreLight(initialCount);
  23. Assert.AreEqual(initialCount, target.Release());
  24. Assert.AreEqual(initialCount + 1, target.CurrentCount);
  25. Assert.AreEqual(initialCount + 1, target.Release());
  26. Assert.AreEqual(initialCount + 2, target.CurrentCount);
  27. }
  28. /// <summary>
  29. ///A test for Release
  30. ///</summary>
  31. [TestMethod()]
  32. public void Release_ReleaseCount()
  33. {
  34. var initialCount = new Random().Next(1, 10);
  35. var target = new SemaphoreLight(initialCount);
  36. var releaseCount1 = new Random().Next(1, 10);
  37. Assert.AreEqual(initialCount, target.Release(releaseCount1));
  38. Assert.AreEqual(initialCount + releaseCount1, target.CurrentCount);
  39. var releaseCount2 = new Random().Next(1, 10);
  40. Assert.AreEqual(initialCount + releaseCount1, target.Release(releaseCount2));
  41. Assert.AreEqual(initialCount + releaseCount1 + releaseCount2, target.CurrentCount);
  42. }
  43. /// <summary>
  44. ///A test for Wait
  45. ///</summary>
  46. [TestMethod()]
  47. public void WaitTest()
  48. {
  49. const int sleepTime = 200;
  50. const int initialCount = 2;
  51. var target = new SemaphoreLight(initialCount);
  52. var start = DateTime.Now;
  53. target.Wait();
  54. target.Wait();
  55. Assert.IsTrue((DateTime.Now - start).TotalMilliseconds < 50);
  56. var releaseThread = new Thread(
  57. () =>
  58. {
  59. Thread.Sleep(sleepTime);
  60. target.Release();
  61. });
  62. releaseThread.Start();
  63. target.Wait();
  64. var end = DateTime.Now;
  65. var elapsed = end - start;
  66. Assert.IsTrue(elapsed.TotalMilliseconds > 200);
  67. Assert.IsTrue(elapsed.TotalMilliseconds < 250);
  68. }
  69. [TestMethod()]
  70. public void CurrentCountTest()
  71. {
  72. var initialCount = new Random().Next(1, 20);
  73. var target = new SemaphoreLight(initialCount);
  74. Assert.AreEqual(initialCount, target.CurrentCount);
  75. }
  76. }
  77. }