| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package iobuf |
| |
| import ( |
| "io" |
| "testing" |
| ) |
| |
| const ( |
| maxReadSize = 10 |
| ) |
| |
| type testReader struct { |
| off int |
| isClosed bool |
| } |
| |
| func (r *testReader) Read(buf []byte) (int, error) { |
| if r.isClosed { |
| return 0, io.EOF |
| } |
| amount := len(buf) |
| for i := 0; i != amount; i++ { |
| buf[i] = charAt(r.off + i) |
| } |
| r.off += amount |
| return amount, nil |
| } |
| |
| func TestReader(t *testing.T) { |
| pool := NewPool(iobufSize) |
| defer pool.Close() |
| |
| var tr testReader |
| r := NewReader(pool, &tr) |
| defer r.Close() |
| |
| const amount = 4 |
| const loopCount = 1000 |
| for off := 0; off < loopCount*amount; off += amount { |
| s, err := r.Read(amount) |
| if err != nil { |
| t.Errorf("Unexpected error: %v", err) |
| } |
| checkBuf(t, s.Contents, off) |
| s.Release() |
| } |
| |
| tr.isClosed = true |
| for off := amount * loopCount; off != tr.off; off++ { |
| s, err := r.Read(1) |
| if err != nil { |
| t.Errorf("Unexpected error: %v", err) |
| } |
| checkBuf(t, s.Contents, off) |
| s.Release() |
| } |
| |
| _, err := r.Read(1) |
| if err == nil { |
| t.Errorf("Expected error") |
| } |
| } |