mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #14452 from ahrtr/pagewriter_update
add a verification on the pagebytes which must be > 0
This commit is contained in:
commit
37220a97dc
@ -16,6 +16,8 @@ package ioutil
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"go.etcd.io/etcd/client/pkg/v3/verify"
|
||||
)
|
||||
|
||||
var defaultBufferBytes = 128 * 1024
|
||||
@ -41,6 +43,7 @@ type PageWriter struct {
|
||||
// NewPageWriter creates a new PageWriter. pageBytes is the number of bytes
|
||||
// to write per page. pageOffset is the starting offset of io.Writer.
|
||||
func NewPageWriter(w io.Writer, pageBytes, pageOffset int) *PageWriter {
|
||||
verify.Assert(pageBytes > 0, "invalid pageBytes (%d) value, it must be greater than 0", pageBytes)
|
||||
return &PageWriter{
|
||||
w: w,
|
||||
pageOffset: pageOffset,
|
||||
|
@ -17,6 +17,8 @@ package ioutil
|
||||
import (
|
||||
"math/rand"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestPageWriterRandom(t *testing.T) {
|
||||
@ -111,6 +113,45 @@ func TestPageWriterOffset(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPageWriterPageBytes(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
pageBytes int
|
||||
expectPanic bool
|
||||
}{
|
||||
{
|
||||
name: "normal page bytes",
|
||||
pageBytes: 4096,
|
||||
expectPanic: false,
|
||||
},
|
||||
{
|
||||
name: "negative page bytes",
|
||||
pageBytes: -1,
|
||||
expectPanic: true,
|
||||
},
|
||||
{
|
||||
name: "zero page bytes",
|
||||
pageBytes: 0,
|
||||
expectPanic: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
defaultBufferBytes = 1024
|
||||
cw := &checkPageWriter{pageBytes: tc.pageBytes, t: t}
|
||||
if tc.expectPanic {
|
||||
assert.Panicsf(t, func() {
|
||||
NewPageWriter(cw, tc.pageBytes, 0)
|
||||
}, "expected panic when pageBytes is %d", tc.pageBytes)
|
||||
} else {
|
||||
pw := NewPageWriter(cw, tc.pageBytes, 0)
|
||||
assert.NotEqual(t, pw, nil)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// checkPageWriter implements an io.Writer that fails a test on unaligned writes.
|
||||
type checkPageWriter struct {
|
||||
pageBytes int
|
||||
|
Loading…
x
Reference in New Issue
Block a user