frostfs-s3-gw/api/layer/partial_reader_test.go
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
[#466] Implement PATCH for multipart objects
Signed-off-by: Marina Biryukova <m.biryukova@yadro.com>
2024-08-20 12:54:42 +03:00

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)
}
})
}
}