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

Function TestAsyncBufferReader

asyncbuffer/buffer_test.go:214–279  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

212}
213
214func TestAsyncBufferReader(t *testing.T) {
215 source, bytesReader := generateSourceData(t, asyncbuffer.ChunkSize*4+halfChunkSize)
216
217 // Create an AsyncBuffer with the byte slice
218 ab := asyncbuffer.New(bytesReader, -1)
219 defer ab.Close()
220
221 // Let's wait for all chunks to be read
222 size, err := ab.Wait()
223 require.NoError(t, err, "AsyncBuffer failed to wait for all chunks")
224 assert.Equal(t, asyncbuffer.ChunkSize*4+halfChunkSize, size)
225
226 reader := ab.Reader()
227
228 // Ensure the total length of the data is ChunkSize*4
229 require.NoError(t, err)
230
231 // Read the first two chunks
232 twoChunks := make([]byte, asyncbuffer.ChunkSize*2)
233 n, err := reader.Read(twoChunks)
234 require.NoError(t, err)
235 assert.Equal(t, asyncbuffer.ChunkSize*2, n)
236 assert.Equal(t, source[:asyncbuffer.ChunkSize*2], twoChunks)
237
238 // Seek to the last chunk + 10 bytes
239 pos, err := reader.Seek(asyncbuffer.ChunkSize*3+5, io.SeekStart)
240 require.NoError(t, err)
241 assert.Equal(t, int64(asyncbuffer.ChunkSize*3+5), pos)
242
243 // Read the next 10 bytes
244 smallSlice := make([]byte, 10)
245 n, err = reader.Read(smallSlice)
246 require.NoError(t, err)
247 assert.Equal(t, 10, n)
248 assert.Equal(t, source[asyncbuffer.ChunkSize*3+5:asyncbuffer.ChunkSize*3+5+10], smallSlice)
249
250 // Seek -10 bytes from the current position
251 pos, err = reader.Seek(-10, io.SeekCurrent)
252 require.NoError(t, err)
253 assert.Equal(t, int64(asyncbuffer.ChunkSize*3+5), pos)
254
255 // Read data again
256 n, err = reader.Read(smallSlice)
257 require.NoError(t, err)
258 assert.Equal(t, 10, n)
259 assert.Equal(t, source[asyncbuffer.ChunkSize*3+5:asyncbuffer.ChunkSize*3+5+10], smallSlice)
260
261 // Seek -10 bytes from end of the stream
262 pos, err = reader.Seek(-10, io.SeekEnd)
263 require.NoError(t, err)
264 assert.Equal(t, size-10, int(pos))
265
266 // Read last 10 bytes
267 n, err = reader.Read(smallSlice)
268 require.NoError(t, err)
269 assert.Equal(t, 10, n)
270 assert.Equal(t, source[size-10:], smallSlice)
271

Callers

nothing calls this directly

Calls 7

NewFunction · 0.92
generateSourceDataFunction · 0.85
SeekMethod · 0.80
CloseMethod · 0.65
ReaderMethod · 0.65
WaitMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected