MCPcopy Create free account
hub / github.com/imgproxy/imgproxy / TestAsyncBufferReadAt

Function TestAsyncBufferReadAt

asyncbuffer/buffer_test.go:125–183  ·  view source on GitHub ↗

TestAsyncBufferRead tests reading from AsyncBuffer using readAt method which is base for all other methods

(t *testing.T)

Source from the content-addressed store, hash-verified

123
124// TestAsyncBufferRead tests reading from AsyncBuffer using readAt method which is base for all other methods
125func TestAsyncBufferReadAt(t *testing.T) {
126 // Let's use source buffer which is 4.5 chunks long
127 source, bytesReader := generateSourceData(t, asyncbuffer.ChunkSize*4+halfChunkSize)
128 ab := asyncbuffer.New(bytesReader, -1)
129 defer ab.Close()
130
131 ab.Wait() // Wait for all chunks to be read since we're going to read all data
132
133 // Let's read all the data
134 target := make([]byte, len(source))
135
136 n, err := ab.ReadAt(target, 0)
137 require.NoError(t, err)
138 assert.Equal(t, len(source), n)
139 assert.Equal(t, target, source)
140
141 // Let's read all the data + a bit more
142 target = make([]byte, len(source)+1)
143
144 n, err = ab.ReadAt(target, 0)
145 require.NoError(t, err) // We read all the data, and reached end
146 assert.Equal(t, len(source), n)
147 assert.Equal(t, target[:n], source)
148
149 // Let's read > 1 chunk, but with offset from the beginning and the end
150 target = make([]byte, len(source)-halfChunkSize)
151 n, err = ab.ReadAt(target, quaterChunkSize)
152 require.NoError(t, err)
153 assert.Equal(t, len(target), n)
154 assert.Equal(t, target, source[quaterChunkSize:len(source)-quaterChunkSize])
155
156 // Let's read some data from the middle of the stream < chunk size
157 target = make([]byte, asyncbuffer.ChunkSize/4)
158 n, err = ab.ReadAt(target, asyncbuffer.ChunkSize+asyncbuffer.ChunkSize/4)
159 require.NoError(t, err)
160 assert.Equal(t, quaterChunkSize, n)
161 assert.Equal(t, target, source[asyncbuffer.ChunkSize+quaterChunkSize:asyncbuffer.ChunkSize+quaterChunkSize*2])
162
163 // Let's read some data from the latest half chunk
164 target = make([]byte, quaterChunkSize)
165 n, err = ab.ReadAt(target, asyncbuffer.ChunkSize*4+quaterChunkSize)
166 require.NoError(t, err)
167 assert.Equal(t, quaterChunkSize, n)
168 assert.Equal(t, target, source[asyncbuffer.ChunkSize*4+quaterChunkSize:asyncbuffer.ChunkSize*4+halfChunkSize])
169
170 // Let's try to read more data then available in the stream
171 target = make([]byte, asyncbuffer.ChunkSize*2)
172 n, err = ab.ReadAt(target, asyncbuffer.ChunkSize*4)
173 require.NoError(t, err)
174 assert.Equal(t, asyncbuffer.ChunkSize/2, n)
175 assert.Equal(t, target[:asyncbuffer.ChunkSize/2], source[asyncbuffer.ChunkSize*4:]) // We read only last half chunk
176
177 // Let's try to read data beyond the end of the stream
178 target = make([]byte, asyncbuffer.ChunkSize*2)
179 n, err = ab.ReadAt(target, asyncbuffer.ChunkSize*5)
180 require.Error(t, err)
181 assert.Equal(t, err, io.EOF)
182 assert.Equal(t, 0, n)

Callers

nothing calls this directly

Calls 6

NewFunction · 0.92
generateSourceDataFunction · 0.85
ReadAtMethod · 0.80
CloseMethod · 0.65
ErrorMethod · 0.65
WaitMethod · 0.45

Tested by

no test coverage detected