@@ -2,17 +2,22 @@ namespace IntegrationTests;
2
2
3
3
internal sealed class ChunkStream : Stream
4
4
{
5
- public ChunkStream ( int dataLength , int chunkLength )
5
+ public ChunkStream ( byte [ ] data , int chunkLength )
6
6
{
7
- m_dataLength = dataLength ;
7
+ if ( data is null )
8
+ throw new ArgumentNullException ( nameof ( data ) ) ;
9
+ if ( chunkLength <= 0 )
10
+ throw new ArgumentOutOfRangeException ( nameof ( chunkLength ) ) ;
11
+
12
+ m_data = data ;
8
13
m_chunkLength = chunkLength ;
9
14
m_position = 0 ;
10
15
}
11
16
12
17
public override bool CanRead => true ;
13
18
public override bool CanSeek => false ;
14
19
public override bool CanWrite => false ;
15
- public override long Length => m_dataLength ;
20
+ public override long Length => m_data . Length ;
16
21
public override long Position
17
22
{
18
23
get => m_position ;
@@ -37,17 +42,14 @@ public override int Read(byte[] buffer, int offset, int count)
37
42
#endif
38
43
int Read ( Span < byte > buffer )
39
44
{
40
- if ( m_position >= m_dataLength )
45
+ if ( m_position >= m_data . Length )
41
46
return 0 ;
42
47
43
48
// Read at most chunkLength bytes
44
- var bytesToRead = Math . Min ( buffer . Length , Math . Min ( m_chunkLength , m_dataLength - m_position ) ) ;
49
+ var bytesToRead = Math . Min ( buffer . Length , Math . Min ( m_chunkLength , m_data . Length - m_position ) ) ;
45
50
46
- // Fill with dummy data (repeating pattern based on position)
47
- for ( var i = 0 ; i < bytesToRead ; i ++ )
48
- {
49
- buffer [ i ] = ( byte ) ( ( m_position + i ) % 256 ) ;
50
- }
51
+ // Copy data from the actual data array
52
+ m_data . AsSpan ( m_position , bytesToRead ) . CopyTo ( buffer ) ;
51
53
52
54
m_position += bytesToRead ;
53
55
return bytesToRead ;
@@ -122,7 +124,7 @@ public override void Flush() =>
122
124
public override Task FlushAsync ( CancellationToken cancellationToken ) =>
123
125
throw new NotSupportedException ( ) ;
124
126
125
- private readonly int m_dataLength ;
127
+ private readonly byte [ ] m_data ;
126
128
private readonly int m_chunkLength ;
127
129
private int m_position ;
128
130
}
0 commit comments