using System; using System.Diagnostics; using System.Threading; using Microsoft.VisualStudio.TestTools.UnitTesting; using Renci.SshNet.Common; using Renci.SshNet.Tests.Common; namespace Renci.SshNet.Tests.Classes.Common { [TestClass] public class SemaphoreLightTest : TestBase { [TestMethod] public void SemaphoreLightConstructorTest() { var initialCount = new Random().Next(1, 10); var target = new SemaphoreLight(initialCount); Assert.AreEqual(initialCount, target.CurrentCount); } [TestMethod] public void Release() { var initialCount = new Random().Next(1, 10); var target = new SemaphoreLight(initialCount); Assert.AreEqual(initialCount, target.Release()); Assert.AreEqual(initialCount + 1, target.CurrentCount); Assert.AreEqual(initialCount + 1, target.Release()); Assert.AreEqual(initialCount + 2, target.CurrentCount); } /// ///A test for Release /// [TestMethod] public void Release_ReleaseCount() { var initialCount = new Random().Next(1, 10); var target = new SemaphoreLight(initialCount); var releaseCount1 = new Random().Next(1, 10); Assert.AreEqual(initialCount, target.Release(releaseCount1)); Assert.AreEqual(initialCount + releaseCount1, target.CurrentCount); var releaseCount2 = new Random().Next(1, 10); Assert.AreEqual(initialCount + releaseCount1, target.Release(releaseCount2)); Assert.AreEqual(initialCount + releaseCount1 + releaseCount2, target.CurrentCount); } /// ///A test for Wait /// [TestMethod] public void WaitTest() { const int sleepTime = 200; const int initialCount = 2; var target = new SemaphoreLight(initialCount); var watch = new Stopwatch(); watch.Start(); target.Wait(); target.Wait(); Assert.IsTrue(watch.ElapsedMilliseconds < 50); var releaseThread = new Thread(() => { Thread.Sleep(sleepTime); _ = target.Release(); }); releaseThread.Start(); target.Wait(); watch.Stop(); Assert.IsTrue(watch.ElapsedMilliseconds >= 200); Assert.IsTrue(watch.ElapsedMilliseconds < 250); } [TestMethod] public void CurrentCountTest() { var initialCount = new Random().Next(1, 20); var target = new SemaphoreLight(initialCount); Assert.AreEqual(initialCount, target.CurrentCount); } } }