SftpClientTest_Finalize_Connected.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System;
  2. using System.Threading;
  3. using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. using Moq;
  5. using Renci.SshNet.Sftp;
  6. namespace Renci.SshNet.Tests.Classes
  7. {
  8. [TestClass]
  9. public class SftpClientTest_Finalize_Connected
  10. {
  11. private Mock<IServiceFactory> _serviceFactoryMock;
  12. private Mock<ISession> _sessionMock;
  13. private SftpClient _sftpClient;
  14. private ConnectionInfo _connectionInfo;
  15. private Mock<ISftpSession> _sftpSessionMock;
  16. private TimeSpan _operationTimeout;
  17. [TestInitialize]
  18. public void Setup()
  19. {
  20. Arrange();
  21. Act();
  22. }
  23. protected void Arrange()
  24. {
  25. _serviceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Loose);
  26. _sessionMock = new Mock<ISession>(MockBehavior.Strict);
  27. _sftpSessionMock = new Mock<ISftpSession>(MockBehavior.Strict);
  28. _connectionInfo = new ConnectionInfo("host", "user", new NoneAuthenticationMethod("userauth"));
  29. _operationTimeout = TimeSpan.FromSeconds(new Random().Next(1, 10));
  30. _sftpClient = new SftpClient(_connectionInfo, false, _serviceFactoryMock.Object);
  31. _sftpClient.OperationTimeout = _operationTimeout;
  32. _serviceFactoryMock.Setup(p => p.CreateSession(_connectionInfo))
  33. .Returns(_sessionMock.Object);
  34. _sessionMock.Setup(p => p.Connect());
  35. _serviceFactoryMock.Setup(p => p.CreateSftpSession(_sessionMock.Object, _operationTimeout, _connectionInfo.Encoding))
  36. .Returns(_sftpSessionMock.Object);
  37. _sftpSessionMock.Setup(p => p.Connect());
  38. _sftpClient.Connect();
  39. _sftpClient = null;
  40. _serviceFactoryMock.Setup(p => p.CreateSftpSession(_sessionMock.Object, _operationTimeout, _connectionInfo.Encoding))
  41. .Returns((ISftpSession) null);
  42. _serviceFactoryMock.ResetCalls();
  43. // we need to dereference all other mocks as they might otherwise hold the target alive
  44. _sessionMock = null;
  45. _connectionInfo = null;
  46. _serviceFactoryMock = null;
  47. }
  48. protected void Act()
  49. {
  50. GC.Collect();
  51. GC.WaitForPendingFinalizers();
  52. }
  53. [TestMethod]
  54. public void DisconnectOnSftpSessionShouldNeverBeInvoked()
  55. {
  56. _sftpSessionMock.Verify(p => p.Disconnect(), Times.Never);
  57. }
  58. [TestMethod]
  59. public void DisposeOnSftpSessionShouldNeverBeInvoked()
  60. {
  61. _sftpSessionMock.Verify(p => p.Dispose(), Times.Never);
  62. }
  63. }
  64. }