SemaphoreLightTest.cs 2.8 KB

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