Skip to content

Commit 99fd7b4

Browse files
committed
Add tests for SftpFileStream.Seek(...).
1 parent 30e8513 commit 99fd7b4

3 files changed

+181
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
using System;
2+
using System.IO;
3+
using Microsoft.VisualStudio.TestTools.UnitTesting;
4+
using Moq;
5+
using Renci.SshNet.Sftp;
6+
7+
namespace Renci.SshNet.Tests.Classes.Sftp
8+
{
9+
[TestClass]
10+
public class SftpFileStreamTest_Seek_PositionedAtBeginningOfStream_OriginBeginAndOffsetZero : SftpFileStreamTestBase
11+
{
12+
private Random _random;
13+
private string _path;
14+
private FileMode _fileMode;
15+
private FileAccess _fileAccess;
16+
private int _bufferSize;
17+
private uint _readBufferSize;
18+
private uint _writeBufferSize;
19+
private byte[] _handle;
20+
private SftpFileStream _target;
21+
private long _actual;
22+
23+
protected override void SetupData()
24+
{
25+
base.SetupData();
26+
27+
_random = new Random();
28+
_path = _random.Next().ToString();
29+
_fileMode = FileMode.OpenOrCreate;
30+
_fileAccess = FileAccess.Read;
31+
_bufferSize = _random.Next(5, 1000);
32+
_readBufferSize = (uint)_random.Next(5, 1000);
33+
_writeBufferSize = (uint)_random.Next(5, 1000);
34+
_handle = GenerateRandom(_random.Next(1, 10), _random);
35+
}
36+
37+
protected override void SetupMocks()
38+
{
39+
SftpSessionMock.InSequence(MockSequence)
40+
.Setup(p => p.RequestOpen(_path, Flags.Read | Flags.CreateNewOrOpen, false))
41+
.Returns(_handle);
42+
SftpSessionMock.InSequence(MockSequence)
43+
.Setup(p => p.CalculateOptimalReadLength((uint)_bufferSize))
44+
.Returns(_readBufferSize);
45+
SftpSessionMock.InSequence(MockSequence)
46+
.Setup(p => p.CalculateOptimalWriteLength((uint)_bufferSize, _handle))
47+
.Returns(_writeBufferSize);
48+
SftpSessionMock.InSequence(MockSequence).Setup(p => p.IsOpen).Returns(true);
49+
}
50+
51+
protected override void Arrange()
52+
{
53+
base.Arrange();
54+
55+
_target = new SftpFileStream(SftpSessionMock.Object, _path, _fileMode, _fileAccess, _bufferSize);
56+
}
57+
58+
protected override void Act()
59+
{
60+
_actual = _target.Seek(0L, SeekOrigin.Begin);
61+
}
62+
63+
[TestMethod]
64+
public void SeekShouldHaveReturnedZero()
65+
{
66+
Assert.AreEqual(0L, _actual);
67+
}
68+
}
69+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
using System;
2+
using System.IO;
3+
using Microsoft.VisualStudio.TestTools.UnitTesting;
4+
using Moq;
5+
using Renci.SshNet.Sftp;
6+
7+
namespace Renci.SshNet.Tests.Classes.Sftp
8+
{
9+
[TestClass]
10+
[Ignore]
11+
public class SftpFileStreamTest_Seek_PositionedAtMiddleOfStream_OriginBeginAndOffsetZero_WithinReadBuffer : SftpFileStreamTestBase
12+
{
13+
private Random _random;
14+
private string _path;
15+
private FileMode _fileMode;
16+
private FileAccess _fileAccess;
17+
private int _bufferSize;
18+
private uint _readBufferSize;
19+
private uint _writeBufferSize;
20+
private byte[] _handle;
21+
private SftpFileStream _target;
22+
private long _actual;
23+
private byte[] _buffer;
24+
private byte[] _serverData;
25+
26+
protected override void SetupData()
27+
{
28+
base.SetupData();
29+
30+
_random = new Random();
31+
_path = _random.Next().ToString();
32+
_fileMode = FileMode.OpenOrCreate;
33+
_fileAccess = FileAccess.Read;
34+
_bufferSize = _random.Next(5, 1000);
35+
_readBufferSize = 20;
36+
_writeBufferSize = (uint) _random.Next(5, 1000);
37+
_handle = GenerateRandom(_random.Next(1, 10), _random);
38+
_buffer = new byte[_readBufferSize - 5];
39+
_serverData = GenerateRandom((int) _readBufferSize, _random);
40+
}
41+
42+
protected override void SetupMocks()
43+
{
44+
SftpSessionMock.InSequence(MockSequence)
45+
.Setup(p => p.RequestOpen(_path, Flags.Read | Flags.CreateNewOrOpen, false))
46+
.Returns(_handle);
47+
SftpSessionMock.InSequence(MockSequence)
48+
.Setup(p => p.CalculateOptimalReadLength((uint)_bufferSize))
49+
.Returns(_readBufferSize);
50+
SftpSessionMock.InSequence(MockSequence)
51+
.Setup(p => p.CalculateOptimalWriteLength((uint)_bufferSize, _handle))
52+
.Returns(_writeBufferSize);
53+
SftpSessionMock.InSequence(MockSequence)
54+
.Setup(p => p.IsOpen)
55+
.Returns(true);
56+
SftpSessionMock.InSequence(MockSequence)
57+
.Setup(p => p.RequestRead(_handle, 0UL, _readBufferSize))
58+
.Returns(_serverData);
59+
SftpSessionMock.InSequence(MockSequence)
60+
.Setup(p => p.IsOpen)
61+
.Returns(true);
62+
}
63+
64+
protected override void Arrange()
65+
{
66+
base.Arrange();
67+
68+
_target = new SftpFileStream(SftpSessionMock.Object, _path, _fileMode, _fileAccess, _bufferSize);
69+
_target.Read(_buffer, 0, _buffer.Length);
70+
}
71+
72+
protected override void Act()
73+
{
74+
_actual = _target.Seek(0L, SeekOrigin.Begin);
75+
}
76+
77+
[TestMethod]
78+
public void SeekShouldHaveReturnedZero()
79+
{
80+
Assert.AreEqual(0L, _actual);
81+
}
82+
83+
[TestMethod]
84+
public void PositionShouldReturnZero()
85+
{
86+
SftpSessionMock.InSequence(MockSequence)
87+
.Setup(p => p.IsOpen)
88+
.Returns(true);
89+
90+
Assert.AreEqual(0L, _target.Position);
91+
92+
SftpSessionMock.Verify(p => p.IsOpen, Times.Exactly(3));
93+
}
94+
95+
[TestMethod]
96+
public void ReadUpToReadBufferSizeShouldReturnBytesFromReadBuffer()
97+
{
98+
SftpSessionMock.InSequence(MockSequence)
99+
.Setup(p => p.IsOpen)
100+
.Returns(true);
101+
102+
var buffer = new byte[_readBufferSize];
103+
104+
var bytesRead = _target.Read(buffer, 0, buffer.Length);
105+
106+
Assert.AreEqual(buffer.Length, bytesRead);
107+
Assert.IsTrue(_serverData.IsEqualTo(buffer));
108+
}
109+
}
110+
}

src/Renci.SshNet.Tests/Renci.SshNet.Tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,8 @@
435435
<Compile Include="Classes\Sftp\SftpFileStreamTest_Finalize_SessionOpen.cs" />
436436
<Compile Include="Classes\Sftp\SftpFileStreamTest_ReadByte_ReadMode_NoDataInWriteBufferAndNoDataInReadBuffer_LessDataThanReadBufferSizeAvailable.cs" />
437437
<Compile Include="Classes\Sftp\SftpFileStreamTest_Read_ReadMode_NoDataInReaderBufferAndReadMoreBytesThanCount.cs" />
438+
<Compile Include="Classes\Sftp\SftpFileStreamTest_Seek_PositionedAtBeginningOfStream_OriginBeginAndOffsetZero.cs" />
439+
<Compile Include="Classes\Sftp\SftpFileStreamTest_Seek_PositionedAtMiddleOfStream_OriginBeginAndOffsetZero_WithinReadBuffer.cs" />
438440
<Compile Include="Classes\Sftp\SftpFileStreamTest_SetLength_Closed.cs" />
439441
<Compile Include="Classes\Sftp\SftpFileStreamTest_SetLength_Disposed.cs" />
440442
<Compile Include="Classes\Sftp\SftpFileStreamTest_SetLength_SessionNotOpen.cs" />

0 commit comments

Comments
 (0)