2
0

ThreadAbstraction_ExecuteThread.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System;
  2. using System.Threading;
  3. using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. using Renci.SshNet.Abstractions;
  5. namespace Renci.SshNet.Tests.Abstractions
  6. {
  7. [TestClass]
  8. public class ThreadAbstraction_ExecuteThread
  9. {
  10. [TestMethod]
  11. public void ShouldThrowArgumentNullExceptionWhenActionIsNull()
  12. {
  13. const Action action = null;
  14. try
  15. {
  16. ThreadAbstraction.ExecuteThread(action);
  17. Assert.Fail();
  18. }
  19. catch (ArgumentNullException ex)
  20. {
  21. Assert.IsNull(ex.InnerException);
  22. Assert.AreEqual("action", ex.ParamName);
  23. }
  24. }
  25. [TestMethod]
  26. public void ShouldExecuteActionOnSeparateThread()
  27. {
  28. DateTime? executionTime = null;
  29. int executionCount = 0;
  30. EventWaitHandle waitHandle = new ManualResetEvent(false);
  31. Action action = () =>
  32. {
  33. ThreadAbstraction.Sleep(500);
  34. executionCount++;
  35. executionTime = DateTime.Now;
  36. waitHandle.Set();
  37. };
  38. DateTime start = DateTime.Now;
  39. ThreadAbstraction.ExecuteThread(action);
  40. Assert.AreEqual(0, executionCount);
  41. Assert.IsNull(executionTime);
  42. Assert.IsTrue(waitHandle.WaitOne(2000));
  43. Assert.AreEqual(1, executionCount);
  44. Assert.IsNotNull(executionTime);
  45. var elapsedTime = executionTime.Value - start;
  46. Assert.IsTrue(elapsedTime > TimeSpan.Zero);
  47. Assert.IsTrue(elapsedTime > TimeSpan.FromMilliseconds(500));
  48. Assert.IsTrue(elapsedTime < TimeSpan.FromMilliseconds(1000));
  49. }
  50. }
  51. }