TestAsyncBufferReadAtErrAtSomePoint tests reading from AsyncBuffer using readAt method which would fail somewhere
(t *testing.T)
| 307 | // TestAsyncBufferReadAtErrAtSomePoint tests reading from AsyncBuffer using readAt method |
| 308 | // which would fail somewhere |
| 309 | func TestAsyncBufferReadAtErrAtSomePoint(t *testing.T) { |
| 310 | // Let's use source buffer which is 4.5 chunks long |
| 311 | source, bytesReader := generateSourceData(t, asyncbuffer.ChunkSize*4+halfChunkSize) |
| 312 | slowReader := &erraticReader{reader: bytesReader, failAt: asyncbuffer.ChunkSize*3 + 5} // fails at last chunk |
| 313 | ab := asyncbuffer.New(slowReader, -1) |
| 314 | defer ab.Close() |
| 315 | |
| 316 | // Let's wait for all chunks to be read |
| 317 | _, err := ab.Wait() |
| 318 | require.Error(t, err, "simulated read failure") |
| 319 | |
| 320 | // Let's read something, but before error occurs |
| 321 | target := make([]byte, halfChunkSize) |
| 322 | n, err := ab.ReadAt(target, 0) |
| 323 | require.NoError(t, err) |
| 324 | assert.Equal(t, len(target), n) |
| 325 | assert.Equal(t, target, source[:halfChunkSize]) |
| 326 | |
| 327 | // And again |
| 328 | target = make([]byte, halfChunkSize) |
| 329 | n, err = ab.ReadAt(target, halfChunkSize) |
| 330 | require.NoError(t, err) |
| 331 | assert.Equal(t, len(target), n) |
| 332 | assert.Equal(t, target, source[halfChunkSize:halfChunkSize*2]) |
| 333 | |
| 334 | // Let's read something, but when error occurs |
| 335 | target = make([]byte, halfChunkSize) |
| 336 | _, err = ab.ReadAt(target, asyncbuffer.ChunkSize*3) |
| 337 | require.Error(t, err, "simulated read failure") |
| 338 | } |
| 339 | |
| 340 | // TestAsyncBufferReadAsync tests reading from AsyncBuffer using readAt method |
| 341 | // with full = false |