@@ -8,7 +8,7 @@ namespace Renci.SshNet.Tests.Classes.Sftp
8
8
{
9
9
[ TestClass ]
10
10
//[Ignore]
11
- public class SftpFileStreamTest_Seek_PositionedAtMiddleOfStream_OriginBeginAndOffsetZero_WithinReadBuffer : SftpFileStreamTestBase
11
+ public class SftpFileStreamTest_Seek_PositionedAtMiddleOfStream_OriginBeginAndOffsetZero_ReadBuffer : SftpFileStreamTestBase
12
12
{
13
13
private Random _random ;
14
14
private string _path ;
@@ -21,7 +21,8 @@ public class SftpFileStreamTest_Seek_PositionedAtMiddleOfStream_OriginBeginAndOf
21
21
private SftpFileStream _target ;
22
22
private long _actual ;
23
23
private byte [ ] _buffer ;
24
- private byte [ ] _serverData ;
24
+ private byte [ ] _serverData1 ;
25
+ private byte [ ] _serverData2 ;
25
26
26
27
protected override void SetupData ( )
27
28
{
@@ -35,8 +36,9 @@ protected override void SetupData()
35
36
_readBufferSize = 20 ;
36
37
_writeBufferSize = ( uint ) _random . Next ( 5 , 1000 ) ;
37
38
_handle = GenerateRandom ( _random . Next ( 1 , 10 ) , _random ) ;
38
- _buffer = new byte [ _readBufferSize - 5 ] ;
39
- _serverData = GenerateRandom ( ( int ) _readBufferSize , _random ) ;
39
+ _buffer = new byte [ 2 ] ; // should be less than size of read buffer
40
+ _serverData1 = GenerateRandom ( ( int ) _readBufferSize , _random ) ;
41
+ _serverData2 = GenerateRandom ( ( int ) _readBufferSize , _random ) ;
40
42
}
41
43
42
44
protected override void SetupMocks ( )
@@ -45,17 +47,17 @@ protected override void SetupMocks()
45
47
. Setup ( p => p . RequestOpen ( _path , Flags . Read | Flags . CreateNewOrOpen , false ) )
46
48
. Returns ( _handle ) ;
47
49
SftpSessionMock . InSequence ( MockSequence )
48
- . Setup ( p => p . CalculateOptimalReadLength ( ( uint ) _bufferSize ) )
50
+ . Setup ( p => p . CalculateOptimalReadLength ( ( uint ) _bufferSize ) )
49
51
. Returns ( _readBufferSize ) ;
50
52
SftpSessionMock . InSequence ( MockSequence )
51
- . Setup ( p => p . CalculateOptimalWriteLength ( ( uint ) _bufferSize , _handle ) )
53
+ . Setup ( p => p . CalculateOptimalWriteLength ( ( uint ) _bufferSize , _handle ) )
52
54
. Returns ( _writeBufferSize ) ;
53
55
SftpSessionMock . InSequence ( MockSequence )
54
56
. Setup ( p => p . IsOpen )
55
57
. Returns ( true ) ;
56
58
SftpSessionMock . InSequence ( MockSequence )
57
59
. Setup ( p => p . RequestRead ( _handle , 0UL , _readBufferSize ) )
58
- . Returns ( _serverData ) ;
60
+ . Returns ( _serverData1 ) ;
59
61
SftpSessionMock . InSequence ( MockSequence )
60
62
. Setup ( p => p . IsOpen )
61
63
. Returns ( true ) ;
@@ -99,54 +101,39 @@ public void IsOpenOnSftpSessionShouldHaveBeenInvokedTwice()
99
101
}
100
102
101
103
[ TestMethod ]
102
- public void ReadLessThanReadBufferSizeShouldReturnBytesFromReadBuffer ( )
104
+ public void ReadBytesThatWereNotBufferedBeforeSeekShouldReadBytesFromServer ( )
103
105
{
104
106
SftpSessionMock . InSequence ( MockSequence )
105
107
. Setup ( p => p . IsOpen )
106
108
. Returns ( true ) ;
107
-
108
- var buffer = new byte [ _readBufferSize - 3 ] ;
109
-
110
- var bytesRead = _target . Read ( buffer , 0 , buffer . Length ) ;
111
-
112
- Assert . AreEqual ( buffer . Length , bytesRead ) ;
113
- Assert . IsTrue ( _serverData . Take ( buffer . Length ) . IsEqualTo ( buffer ) ) ;
114
- }
115
-
116
- [ TestMethod ]
117
- public void ReadReadBufferSizeShouldReturnBytesFromReadBuffer ( )
118
- {
119
109
SftpSessionMock . InSequence ( MockSequence )
120
- . Setup ( p => p . IsOpen )
121
- . Returns ( true ) ;
110
+ . Setup ( p => p . RequestRead ( _handle , 0UL , _readBufferSize ) )
111
+ . Returns ( _serverData2 ) ;
122
112
123
- var buffer = new byte [ _readBufferSize ] ;
113
+ var bytesRead = _target . Read ( _buffer , 0 , _buffer . Length ) ;
124
114
125
- var bytesRead = _target . Read ( buffer , 0 , buffer . Length ) ;
115
+ Assert . AreEqual ( _buffer . Length , bytesRead ) ;
116
+ Assert . IsTrue ( _serverData2 . Take ( _buffer . Length ) . IsEqualTo ( _buffer ) ) ;
126
117
127
- Assert . AreEqual ( buffer . Length , bytesRead ) ;
128
- Assert . IsTrue ( _serverData . IsEqualTo ( buffer ) ) ;
118
+ SftpSessionMock . Verify ( p => p . IsOpen , Times . Exactly ( 3 ) ) ;
119
+ SftpSessionMock . Verify ( p => p . RequestRead ( _handle , 0UL , _readBufferSize ) , Times . Exactly ( 2 ) ) ;
129
120
}
130
121
131
122
[ TestMethod ]
132
- public void ReadMoreThanReadBufferSizeShouldReturnBytesFromReadBufferAndReadRemaningBytesFromServer ( )
123
+ public void ReadBytesThatWereBufferedBeforeSeekShouldReadBytesFromServer ( )
133
124
{
134
- var serverData2 = GenerateRandom ( 6 , _random ) ;
135
-
136
125
SftpSessionMock . InSequence ( MockSequence )
137
126
. Setup ( p => p . IsOpen )
138
127
. Returns ( true ) ;
139
128
SftpSessionMock . InSequence ( MockSequence )
140
- . Setup ( p => p . RequestRead ( _handle , _readBufferSize , _readBufferSize ) )
141
- . Returns ( serverData2 ) ;
142
-
143
- var buffer = new byte [ _readBufferSize + 4 ] ;
129
+ . Setup ( p => p . RequestRead ( _handle , 0UL , _readBufferSize ) )
130
+ . Returns ( _serverData2 ) ;
144
131
132
+ var buffer = new byte [ _buffer . Length + 1 ] ; // we read one byte that was previously buffered
145
133
var bytesRead = _target . Read ( buffer , 0 , buffer . Length ) ;
146
134
147
135
Assert . AreEqual ( buffer . Length , bytesRead ) ;
148
- Assert . IsTrue ( _serverData . Take ( ( int ) _readBufferSize ) . IsEqualTo ( buffer . Take ( ( int ) _readBufferSize ) ) ) ;
149
- Assert . IsTrue ( serverData2 . Take ( 4 ) . IsEqualTo ( buffer . Take ( ( int ) _readBufferSize , 4 ) ) ) ;
136
+ Assert . IsTrue ( _serverData2 . Take ( buffer . Length ) . IsEqualTo ( buffer ) ) ;
150
137
}
151
138
}
152
139
}
0 commit comments