Gert Driesen пре 8 година
родитељ
комит
e4a1a5daca

+ 10 - 5
src/Renci.SshNet.Tests/Classes/Sftp/SftpFileReaderTest_LastChunkBeforeEofIsComplete.cs

@@ -13,6 +13,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
     {
         private const int ChunkLength = 32 * 1024;
 
+        private MockSequence _seq;
         private byte[] _handle;
         private int _fileSize;
         private byte[] _chunk1;
@@ -37,9 +38,9 @@ namespace Renci.SshNet.Tests.Classes.Sftp
 
         protected override void SetupMocks()
         {
-            var seq = new MockSequence();
+            _seq = new MockSequence();
 
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 0, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -47,7 +48,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk1, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -55,7 +56,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk2, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 2 * ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -116,13 +117,17 @@ namespace Renci.SshNet.Tests.Classes.Sftp
         }
 
         [TestMethod]
-        public void DisposeShouldCompleteImmediately()
+        public void DisposeShouldCloseHandleAndCompleteImmediately()
         {
+            SftpSessionMock.InSequence(_seq).Setup(p => p.RequestClose(_handle));
+
             var stopwatch = Stopwatch.StartNew();
             _reader.Dispose();
             stopwatch.Stop();
 
             Assert.IsTrue(stopwatch.ElapsedMilliseconds < 200, "Dispose took too long to complete: " + stopwatch.ElapsedMilliseconds);
+
+            SftpSessionMock.Verify(p => p.RequestClose(_handle), Times.Once);
         }
     }
 }

+ 10 - 6
src/Renci.SshNet.Tests/Classes/Sftp/SftpFileReaderTest_LastChunkBeforeEofIsPartial.cs

@@ -4,7 +4,6 @@ using Renci.SshNet.Common;
 using Renci.SshNet.Sftp;
 using System;
 using System.Diagnostics;
-using System.Threading;
 using BufferedRead = Renci.SshNet.Sftp.SftpFileReader.BufferedRead;
 
 namespace Renci.SshNet.Tests.Classes.Sftp
@@ -14,6 +13,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
     {
         private const int ChunkLength = 32 * 1024;
 
+        private MockSequence _seq;
         private byte[] _handle;
         private int _fileSize;
         private byte[] _chunk1;
@@ -37,9 +37,9 @@ namespace Renci.SshNet.Tests.Classes.Sftp
 
         protected override void SetupMocks()
         {
-            var seq = new MockSequence();
+            _seq = new MockSequence();
 
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 0, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -47,7 +47,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk1, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -55,7 +55,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk2, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 2 * ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -116,13 +116,17 @@ namespace Renci.SshNet.Tests.Classes.Sftp
         }
 
         [TestMethod]
-        public void DisposeShouldCompleteImmediately()
+        public void DisposeShouldCloseHandleAndCompleteImmediately()
         {
+            SftpSessionMock.InSequence(_seq).Setup(p => p.RequestClose(_handle));
+
             var stopwatch = Stopwatch.StartNew();
             _reader.Dispose();
             stopwatch.Stop();
 
             Assert.IsTrue(stopwatch.ElapsedMilliseconds < 200, "Dispose took too long to complete: " + stopwatch.ElapsedMilliseconds);
+
+            SftpSessionMock.Verify(p => p.RequestClose(_handle), Times.Once);
         }
     }
 }

+ 15 - 10
src/Renci.SshNet.Tests/Classes/Sftp/SftpFileReaderTest_PreviousChunkIsIncompleteAndEofIsNotReached.cs

@@ -14,6 +14,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
     {
         private const int ChunkLength = 32 * 1024;
 
+        private MockSequence _seq;
         private byte[] _handle;
         private int _fileSize;
         private byte[] _chunk1;
@@ -64,9 +65,9 @@ namespace Renci.SshNet.Tests.Classes.Sftp
 
         protected override void SetupMocks()
         {
-            var seq = new MockSequence();
+            _seq = new MockSequence();
 
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 0, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -75,7 +76,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk1, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -84,7 +85,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk2, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 2 * ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -93,7 +94,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk3, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 3 * ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -102,7 +103,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk4, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 4 * ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -111,13 +112,13 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk5, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.RequestRead(_handle, 2 * ChunkLength - 17, 17))
                             .Returns(_chunk2CatchUp1);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.RequestRead(_handle, 2 * ChunkLength - 7, 7))
                             .Returns(_chunk2CatchUp2);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 5 * ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -238,13 +239,17 @@ namespace Renci.SshNet.Tests.Classes.Sftp
         }
 
         [TestMethod]
-        public void DisposeShouldCompleteImmediately()
+        public void DisposeShouldCloseHandleAndCompleteImmediately()
         {
+            SftpSessionMock.InSequence(_seq).Setup(p => p.RequestClose(_handle));
+
             var stopwatch = Stopwatch.StartNew();
             _reader.Dispose();
             stopwatch.Stop();
 
             Assert.IsTrue(stopwatch.ElapsedMilliseconds < 200, "Dispose took too long to complete: " + stopwatch.ElapsedMilliseconds);
+
+            SftpSessionMock.Verify(p => p.RequestClose(_handle), Times.Once);
         }
     }
 }

+ 11 - 6
src/Renci.SshNet.Tests/Classes/Sftp/SftpFileReaderTest_PreviousChunkIsIncompleteAndEofIsReached.cs

@@ -14,6 +14,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
     {
         private const int ChunkLength = 32 * 1024;
 
+        private MockSequence _seq;
         private byte[] _handle;
         private int _fileSize;
         private byte[] _chunk1;
@@ -46,9 +47,9 @@ namespace Renci.SshNet.Tests.Classes.Sftp
 
         protected override void SetupMocks()
         {
-            var seq = new MockSequence();
+            _seq = new MockSequence();
 
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 0, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -57,7 +58,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk1, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -66,7 +67,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk2, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 2 * ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -75,7 +76,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk3, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.RequestRead(_handle, 2 * ChunkLength - 10, 10))
                             .Returns(_chunk2CatchUp);
         }
@@ -145,13 +146,17 @@ namespace Renci.SshNet.Tests.Classes.Sftp
         }
 
         [TestMethod]
-        public void DisposeShouldCompleteImmediately()
+        public void DisposeShouldCloseHandleAndCompleteImmediately()
         {
+            SftpSessionMock.InSequence(_seq).Setup(p => p.RequestClose(_handle));
+
             var stopwatch = Stopwatch.StartNew();
             _reader.Dispose();
             stopwatch.Stop();
 
             Assert.IsTrue(stopwatch.ElapsedMilliseconds < 200, "Dispose took too long to complete: " + stopwatch.ElapsedMilliseconds);
+
+            SftpSessionMock.Verify(p => p.RequestClose(_handle), Times.Once);
         }
     }
 }

+ 10 - 5
src/Renci.SshNet.Tests/Classes/Sftp/SftpFileReaderTest_Read_ExceptionInReadAhead.cs

@@ -14,6 +14,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
     {
         private const int ChunkLength = 32 * 1024;
 
+        private MockSequence _seq;
         private byte[] _handle;
         private int _fileSize;
         private byte[] _chunk1;
@@ -41,9 +42,9 @@ namespace Renci.SshNet.Tests.Classes.Sftp
 
         protected override void SetupMocks()
         {
-            var seq = new MockSequence();
+            _seq = new MockSequence();
 
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                            .Setup(p => p.BeginRead(_handle, 0, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                            .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                                 {
@@ -51,7 +52,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                     asyncResult.SetAsCompleted(_chunk1, false);
                                 })
                            .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -59,7 +60,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
                                 asyncResult.SetAsCompleted(_chunk2, false);
                             })
                             .Returns((SftpReadAsyncResult)null);
-            SftpSessionMock.InSequence(seq)
+            SftpSessionMock.InSequence(_seq)
                             .Setup(p => p.BeginRead(_handle, 2 * ChunkLength, ChunkLength, It.IsNotNull<AsyncCallback>(), It.IsAny<BufferedRead>()))
                             .Callback<byte[], ulong, uint, AsyncCallback, object>((handle, offset, length, callback, state) =>
                             {
@@ -122,13 +123,17 @@ namespace Renci.SshNet.Tests.Classes.Sftp
         }
 
         [TestMethod]
-        public void DisposeShouldCompleteImmediately()
+        public void DisposeShouldCloseHandleAndCompleteImmediately()
         {
+            SftpSessionMock.InSequence(_seq).Setup(p => p.RequestClose(_handle));
+
             var stopwatch = Stopwatch.StartNew();
             _reader.Dispose();
             stopwatch.Stop();
 
             Assert.IsTrue(stopwatch.ElapsedMilliseconds < 200, "Dispose took too long to complete: " + stopwatch.ElapsedMilliseconds);
+
+            SftpSessionMock.Verify(p => p.RequestClose(_handle), Times.Once);
         }
     }
 }