Marina Biryukova
c01772149e
All checks were successful
/ DCO (pull_request) Successful in 1m17s
/ Vulncheck (pull_request) Successful in 1m23s
/ Builds (1.21) (pull_request) Successful in 1m35s
/ Builds (1.22) (pull_request) Successful in 1m33s
/ Lint (pull_request) Successful in 2m26s
/ Tests (1.21) (pull_request) Successful in 1m42s
/ Tests (1.22) (pull_request) Successful in 1m34s
Signed-off-by: Marina Biryukova <m.biryukova@yadro.com>
101 lines
2.9 KiB
Go
101 lines
2.9 KiB
Go
package layer
|
|
|
|
import (
|
|
"io"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestPartialReader(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
reader io.Reader
|
|
bufSize int
|
|
lengths []uint64
|
|
expectedBytes [][]byte
|
|
}{
|
|
{
|
|
name: "buf size is equal to length",
|
|
reader: strings.NewReader("abcdef"),
|
|
bufSize: 3,
|
|
lengths: []uint64{3, 3},
|
|
expectedBytes: [][]byte{[]byte("abc"), []byte("def")},
|
|
},
|
|
{
|
|
name: "buf size is equal to length, read more than write",
|
|
reader: strings.NewReader("abcdef"),
|
|
bufSize: 3,
|
|
lengths: []uint64{3, 3, 3},
|
|
expectedBytes: [][]byte{[]byte("abc"), []byte("def"), []byte("")},
|
|
},
|
|
{
|
|
name: "buf size is greater than length",
|
|
reader: strings.NewReader("abcdefg"),
|
|
bufSize: 4,
|
|
lengths: []uint64{3, 3},
|
|
expectedBytes: [][]byte{[]byte("abc"), []byte("def")},
|
|
},
|
|
{
|
|
name: "buf size is greater than length, read more than write",
|
|
reader: strings.NewReader("abcdefg"),
|
|
bufSize: 4,
|
|
lengths: []uint64{3, 3, 3},
|
|
expectedBytes: [][]byte{[]byte("abc"), []byte("def"), []byte("g")},
|
|
},
|
|
{
|
|
name: "buf size is less than length",
|
|
reader: strings.NewReader("abcdefg"),
|
|
bufSize: 2,
|
|
lengths: []uint64{3, 3},
|
|
expectedBytes: [][]byte{[]byte("abc"), []byte("def")},
|
|
},
|
|
{
|
|
name: "buf size is less than length, read more than write",
|
|
reader: strings.NewReader("abcdefg"),
|
|
bufSize: 2,
|
|
lengths: []uint64{3, 3, 3},
|
|
expectedBytes: [][]byte{[]byte("abc"), []byte("def"), []byte("g")},
|
|
},
|
|
{
|
|
name: "length is divided by buf size",
|
|
reader: strings.NewReader("abcdefghi"),
|
|
bufSize: 2,
|
|
lengths: []uint64{4, 4},
|
|
expectedBytes: [][]byte{[]byte("abcd"), []byte("efgh")},
|
|
},
|
|
{
|
|
name: "length is divided by buf size, read more than write",
|
|
reader: strings.NewReader("abcdefghij"),
|
|
bufSize: 2,
|
|
lengths: []uint64{4, 4, 4},
|
|
expectedBytes: [][]byte{[]byte("abcd"), []byte("efgh"), []byte("ij")},
|
|
},
|
|
{
|
|
name: "buf size is divided by length",
|
|
reader: strings.NewReader("abcdefg"),
|
|
bufSize: 4,
|
|
lengths: []uint64{2, 2, 2},
|
|
expectedBytes: [][]byte{[]byte("ab"), []byte("cd"), []byte("ef")},
|
|
},
|
|
{
|
|
name: "buf size is divided by length, read more than write",
|
|
reader: strings.NewReader("abcdefg"),
|
|
bufSize: 4,
|
|
lengths: []uint64{2, 2, 2, 2},
|
|
expectedBytes: [][]byte{[]byte("ab"), []byte("cd"), []byte("ef"), []byte("g")},
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
r := newPartialReader(tc.reader, tc.bufSize)
|
|
|
|
for i, length := range tc.lengths {
|
|
partR := r.partReader(length)
|
|
res, err := io.ReadAll(partR)
|
|
require.NoError(t, err)
|
|
require.Equal(t, tc.expectedBytes[i], res)
|
|
}
|
|
})
|
|
}
|
|
}
|