ForwardedPortLocalTest_Dispose_PortDisposed.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net;
  4. using Microsoft.Extensions.Logging.Abstractions;
  5. using Microsoft.VisualStudio.TestTools.UnitTesting;
  6. using Moq;
  7. using Renci.SshNet.Common;
  8. namespace Renci.SshNet.Tests.Classes
  9. {
  10. [TestClass]
  11. public class ForwardedPortLocalTest_Dispose_PortDisposed
  12. {
  13. private Mock<ISession> _sessionMock;
  14. private Mock<IConnectionInfo> _connectionInfoMock;
  15. private ForwardedPortLocal _forwardedPort;
  16. private IList<EventArgs> _closingRegister;
  17. private IList<ExceptionEventArgs> _exceptionRegister;
  18. [TestInitialize]
  19. public void Setup()
  20. {
  21. Arrange();
  22. Act();
  23. }
  24. [TestCleanup]
  25. public void Cleanup()
  26. {
  27. if (_forwardedPort != null)
  28. {
  29. _forwardedPort.Dispose();
  30. _forwardedPort = null;
  31. }
  32. }
  33. protected void Arrange()
  34. {
  35. _closingRegister = new List<EventArgs>();
  36. _exceptionRegister = new List<ExceptionEventArgs>();
  37. _sessionMock = new Mock<ISession>(MockBehavior.Strict);
  38. _sessionMock.Setup(p => p.SessionLoggerFactory).Returns(NullLoggerFactory.Instance);
  39. _connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict);
  40. var sequence = new MockSequence();
  41. _sessionMock.InSequence(sequence).Setup(p => p.IsConnected).Returns(true);
  42. _sessionMock.InSequence(sequence).Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object);
  43. _connectionInfoMock.InSequence(sequence).Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(30));
  44. _forwardedPort = new ForwardedPortLocal(IPAddress.Loopback.ToString(), "host", 22);
  45. _forwardedPort.Closing += (sender, args) => _closingRegister.Add(args);
  46. _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
  47. _forwardedPort.Session = _sessionMock.Object;
  48. _forwardedPort.Start();
  49. _forwardedPort.Dispose();
  50. }
  51. protected void Act()
  52. {
  53. _forwardedPort.Dispose();
  54. }
  55. [TestMethod]
  56. public void ClosingShouldHaveFiredOnce()
  57. {
  58. Assert.AreEqual(1, _closingRegister.Count);
  59. }
  60. [TestMethod]
  61. public void ExceptionShouldNotHaveFired()
  62. {
  63. Assert.AreEqual(0, _exceptionRegister.Count);
  64. }
  65. [TestMethod]
  66. public void SessionShouldBeNull()
  67. {
  68. Assert.IsNull(_forwardedPort.Session);
  69. }
  70. }
  71. }