SshClientTest_Dispose_ForwardedPortStarted.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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 : BaseClientTestBase
  9. {
  10. private Mock<ForwardedPort> _forwardedPortMock;
  11. private SshClient _sshClient;
  12. private ConnectionInfo _connectionInfo;
  13. protected override void CreateMocks()
  14. {
  15. base.CreateMocks();
  16. _forwardedPortMock = new Mock<ForwardedPort>(MockBehavior.Strict);
  17. }
  18. protected override void SetupData()
  19. {
  20. _connectionInfo = new ConnectionInfo("host", "user", new NoneAuthenticationMethod("userauth"));
  21. }
  22. protected override void SetupMocks()
  23. {
  24. var sequence = new MockSequence();
  25. ServiceFactoryMock.InSequence(sequence)
  26. .Setup(p => p.CreateSocketFactory())
  27. .Returns(SocketFactoryMock.Object);
  28. ServiceFactoryMock.InSequence(sequence)
  29. .Setup(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object))
  30. .Returns(SessionMock.Object);
  31. SessionMock.InSequence(sequence).Setup(p => p.Connect());
  32. _forwardedPortMock.InSequence(sequence).Setup(p => p.Start());
  33. SessionMock.InSequence(sequence).Setup(p => p.OnDisconnecting());
  34. _forwardedPortMock.InSequence(sequence).Setup(p => p.Stop());
  35. SessionMock.InSequence(sequence).Setup(p => p.Dispose());
  36. }
  37. protected override void Arrange()
  38. {
  39. base.Arrange();
  40. _sshClient = new SshClient(_connectionInfo, false, ServiceFactoryMock.Object);
  41. _sshClient.Connect();
  42. _sshClient.AddForwardedPort(_forwardedPortMock.Object);
  43. _forwardedPortMock.Object.Start();
  44. }
  45. protected override void Act()
  46. {
  47. _sshClient.Dispose();
  48. }
  49. [TestMethod]
  50. public void ForwardedPortShouldBeStopped()
  51. {
  52. _forwardedPortMock.Verify(p => p.Stop(), Times.Once);
  53. }
  54. [TestMethod]
  55. public void ForwardedPortShouldBeRemovedFromSshClient()
  56. {
  57. Assert.IsFalse(_sshClient.ForwardedPorts.Any());
  58. }
  59. [TestMethod]
  60. public void IsConnectedShouldThrowObjectDisposedException()
  61. {
  62. try
  63. {
  64. var connected = _sshClient.IsConnected;
  65. Assert.Fail("IsConnected should have thrown {0} but returned {1}.",
  66. typeof (ObjectDisposedException).FullName, connected);
  67. }
  68. catch (ObjectDisposedException)
  69. {
  70. }
  71. }
  72. [TestMethod]
  73. public void DisconnectOnSessionShouldNeverBeInvoked()
  74. {
  75. SessionMock.Verify(p => p.Disconnect(), Times.Never);
  76. }
  77. [TestMethod]
  78. public void DisposeOnSessionShouldBeInvokedOnce()
  79. {
  80. SessionMock.Verify(p => p.Dispose(), Times.Once);
  81. }
  82. }
  83. }