|
|
@@ -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);
|
|
|
}
|
|
|
}
|
|
|
}
|