SshClientTest_Dispose_ForwardedPortStarted.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using System.Linq;
  3. using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. using Moq;
  5. namespace Renci.SshNet.Tests.Classes
  6. {
  7. [TestClass]
  8. public class SshClientTest_Dispose_ForwardedPortStarted
  9. {
  10. private Mock<IServiceFactory> _serviceFactoryMock;
  11. private Mock<ISession> _sessionMock;
  12. private Mock<ForwardedPort> _forwardedPortMock;
  13. private SshClient _sshClient;
  14. private ConnectionInfo _connectionInfo;
  15. [TestInitialize]
  16. public void Setup()
  17. {
  18. Arrange();
  19. Act();
  20. }
  21. [TestCleanup]
  22. public void Cleanup()
  23. {
  24. }
  25. protected void Arrange()
  26. {
  27. _connectionInfo = new ConnectionInfo("host", "user", new NoneAuthenticationMethod("userauth"));
  28. var sequence = new MockSequence();
  29. _serviceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Strict);
  30. _sessionMock = new Mock<ISession>(MockBehavior.Strict);
  31. _forwardedPortMock = new Mock<ForwardedPort>(MockBehavior.Strict);
  32. _serviceFactoryMock.InSequence(sequence).Setup(p => p.CreateSession(_connectionInfo)).Returns(_sessionMock.Object);
  33. _sessionMock.InSequence(sequence).Setup(p => p.Connect());
  34. _forwardedPortMock.InSequence(sequence).Setup(p => p.Start());
  35. _sessionMock.InSequence(sequence).Setup(p => p.OnDisconnecting());
  36. _forwardedPortMock.InSequence(sequence).Setup(p => p.Stop());
  37. _sessionMock.InSequence(sequence).Setup(p => p.Dispose());
  38. _sshClient = new SshClient(_connectionInfo, false, _serviceFactoryMock.Object);
  39. _sshClient.Connect();
  40. _sshClient.AddForwardedPort(_forwardedPortMock.Object);
  41. _forwardedPortMock.Object.Start();
  42. }
  43. protected void Act()
  44. {
  45. _sshClient.Dispose();
  46. }
  47. [TestMethod]
  48. public void ForwardedPortShouldBeStopped()
  49. {
  50. _forwardedPortMock.Verify(p => p.Stop(), Times.Once);
  51. }
  52. [TestMethod]
  53. public void ForwardedPortShouldBeRemovedFromSshClient()
  54. {
  55. Assert.IsFalse(_sshClient.ForwardedPorts.Any());
  56. }
  57. [TestMethod]
  58. public void IsConnectedShouldThrowObjectDisposedException()
  59. {
  60. try
  61. {
  62. var connected = _sshClient.IsConnected;
  63. Assert.Fail("IsConnected should have thrown {0} but returned {1}.",
  64. typeof (ObjectDisposedException).FullName, connected);
  65. }
  66. catch (ObjectDisposedException)
  67. {
  68. }
  69. }
  70. [TestMethod]
  71. public void DisconnectOnSessionShouldNeverBeInvoked()
  72. {
  73. _sessionMock.Verify(p => p.Disconnect(), Times.Never);
  74. }
  75. [TestMethod]
  76. public void DisposeOnSessionShouldBeInvokedOnce()
  77. {
  78. _sessionMock.Verify(p => p.Dispose(), Times.Once);
  79. }
  80. }
  81. }