SftpFileStreamTest_Finalize_SessionOpen.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System;
  2. using System.Globalization;
  3. using System.IO;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5. using Moq;
  6. using Renci.SshNet.Sftp;
  7. namespace Renci.SshNet.Tests.Classes.Sftp
  8. {
  9. [TestClass]
  10. public class SftpFileStreamTest_Finalize_SessionOpen : SftpFileStreamTestBase
  11. {
  12. private WeakReference<SftpFileStream> _target;
  13. private string _path;
  14. private byte[] _handle;
  15. private uint _bufferSize;
  16. private uint _readBufferSize;
  17. private uint _writeBufferSize;
  18. protected override void SetupData()
  19. {
  20. base.SetupData();
  21. var random = new Random();
  22. _path = random.Next().ToString(CultureInfo.InvariantCulture);
  23. _handle = GenerateRandom(7, random);
  24. _bufferSize = (uint) random.Next(1, 1000);
  25. _readBufferSize = (uint) random.Next(1, 1000);
  26. _writeBufferSize = (uint) random.Next(1, 1000);
  27. }
  28. protected override void SetupMocks()
  29. {
  30. _ = SftpSessionMock.InSequence(MockSequence)
  31. .Setup(p => p.RequestOpen(_path, Flags.Read | Flags.Write | Flags.CreateNewOrOpen, false))
  32. .Returns(_handle);
  33. _ = SftpSessionMock.InSequence(MockSequence)
  34. .Setup(p => p.CalculateOptimalReadLength(_bufferSize))
  35. .Returns(_readBufferSize);
  36. _ = SftpSessionMock.InSequence(MockSequence)
  37. .Setup(p => p.CalculateOptimalWriteLength(_bufferSize, _handle))
  38. .Returns(_writeBufferSize);
  39. _ = SftpSessionMock.InSequence(MockSequence)
  40. .Setup(p => p.IsOpen)
  41. .Returns(true);
  42. _ = SftpSessionMock.InSequence(MockSequence)
  43. .Setup(p => p.RequestClose(_handle));
  44. }
  45. protected override void Arrange()
  46. {
  47. base.Arrange();
  48. _target = CreateWeakSftpFileStream();
  49. }
  50. protected override void Act()
  51. {
  52. GC.Collect();
  53. GC.WaitForPendingFinalizers();
  54. }
  55. [TestMethod]
  56. public void SftpFileStreamShouldHaveBeenFinalized()
  57. {
  58. Assert.IsFalse(_target.TryGetTarget(out _));
  59. }
  60. [TestMethod]
  61. public void IsOpenOnSftpSessionShouldNeverBeInvoked()
  62. {
  63. SftpSessionMock.Verify(p => p.IsOpen, Times.Never);
  64. }
  65. [TestMethod]
  66. public void RequestCloseOnSftpSessionShouldNeverBeInvoked()
  67. {
  68. SftpSessionMock.Verify(p => p.RequestClose(_handle), Times.Never);
  69. }
  70. private WeakReference<SftpFileStream> CreateWeakSftpFileStream()
  71. {
  72. var sftpFileStream = new SftpFileStream(SftpSessionMock.Object,
  73. _path,
  74. FileMode.OpenOrCreate,
  75. FileAccess.ReadWrite,
  76. (int) _bufferSize);
  77. return new WeakReference<SftpFileStream>(sftpFileStream);
  78. }
  79. }
  80. }