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 (
|
import (
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"go.etcd.io/etcd/client/pkg/v3/verify"
|
||||||
)
|
)
|
||||||
|
|
||||||
var defaultBufferBytes = 128 * 1024
|
var defaultBufferBytes = 128 * 1024
|
||||||
@ -41,6 +43,7 @@ type PageWriter struct {
|
|||||||
// NewPageWriter creates a new PageWriter. pageBytes is the number of bytes
|
// NewPageWriter creates a new PageWriter. pageBytes is the number of bytes
|
||||||
// to write per page. pageOffset is the starting offset of io.Writer.
|
// to write per page. pageOffset is the starting offset of io.Writer.
|
||||||
func NewPageWriter(w io.Writer, pageBytes, pageOffset int) *PageWriter {
|
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{
|
return &PageWriter{
|
||||||
w: w,
|
w: w,
|
||||||
pageOffset: pageOffset,
|
pageOffset: pageOffset,
|
||||||
|
@ -17,6 +17,8 @@ package ioutil
|
|||||||
import (
|
import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestPageWriterRandom(t *testing.T) {
|
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.
|
// checkPageWriter implements an io.Writer that fails a test on unaligned writes.
|
||||||
type checkPageWriter struct {
|
type checkPageWriter struct {
|
||||||
pageBytes int
|
pageBytes int
|
||||||
|
Loading…
x
Reference in New Issue
Block a user