1package s3manager
2
3import (
4	"bytes"
5	"io"
6	"testing"
7
8	"github.com/aws/aws-sdk-go/internal/sdkio"
9)
10
11func TestBufferedReadSeekerRead(t *testing.T) {
12	expected := []byte("testData")
13
14	readSeeker := NewBufferedReadSeeker(bytes.NewReader(expected), make([]byte, 4))
15
16	var (
17		actual []byte
18		buffer = make([]byte, 2)
19	)
20
21	for {
22		n, err := readSeeker.Read(buffer)
23		actual = append(actual, buffer[:n]...)
24		if err != nil && err == io.EOF {
25			break
26		} else if err != nil {
27			t.Fatalf("failed to read from reader: %v", err)
28		}
29	}
30
31	if !bytes.Equal(expected, actual) {
32		t.Errorf("expected %v, got %v", expected, actual)
33	}
34}
35
36func TestBufferedReadSeekerSeek(t *testing.T) {
37	content := []byte("testData")
38
39	readSeeker := NewBufferedReadSeeker(bytes.NewReader(content), make([]byte, 4))
40
41	_, err := readSeeker.Seek(4, sdkio.SeekStart)
42	if err != nil {
43		t.Fatalf("failed to seek reader: %v", err)
44	}
45
46	var (
47		actual []byte
48		buffer = make([]byte, 4)
49	)
50
51	for {
52		n, err := readSeeker.Read(buffer)
53		actual = append(actual, buffer[:n]...)
54		if err != nil && err == io.EOF {
55			break
56		} else if err != nil {
57			t.Fatalf("failed to read from reader: %v", err)
58		}
59	}
60
61	if e := []byte("Data"); !bytes.Equal(e, actual) {
62		t.Errorf("expected %v, got %v", e, actual)
63	}
64}
65
66func TestBufferedReadSeekerReadAt(t *testing.T) {
67	content := []byte("testData")
68
69	readSeeker := NewBufferedReadSeeker(bytes.NewReader(content), make([]byte, 2))
70
71	buffer := make([]byte, 4)
72
73	_, err := readSeeker.ReadAt(buffer, 0)
74	if err != nil {
75		t.Fatalf("failed to seek reader: %v", err)
76	}
77
78	if e := content[:4]; !bytes.Equal(e, buffer) {
79		t.Errorf("expected %v, got %v", e, buffer)
80	}
81}
82