Combine stream fuzz tests

Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
Derek McGowan 2022-10-04 23:04:36 -07:00
parent 0762a3a759
commit 8304a61b53
No known key found for this signature in database
GPG Key ID: F58C5D0A4405ACDB

View File

@ -32,88 +32,75 @@ func FuzzSendAndReceive(f *testing.F) {
f.Add(bytes.Repeat([]byte{0}, windowSize+1)) f.Add(bytes.Repeat([]byte{0}, windowSize+1))
f.Add([]byte("hello")) f.Add([]byte("hello"))
f.Add(bytes.Repeat([]byte("hello"), windowSize+1)) f.Add(bytes.Repeat([]byte("hello"), windowSize+1))
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
f.Fuzz(func(t *testing.T, expected []byte) { f.Fuzz(func(t *testing.T, expected []byte) {
ctx, cancel := context.WithCancel(context.Background()) runSendAndReceiveFuzz(ctx, t, expected)
defer cancel() runSendAndReceiveChainFuzz(ctx, t, expected)
runWriterFuzz(ctx, t, expected)
rs, ws := pipeStream()
r, w := io.Pipe()
SendStream(ctx, r, ws)
or := ReceiveStream(ctx, rs)
go func() {
io.Copy(w, bytes.NewBuffer(expected))
w.Close()
}()
actual, err := io.ReadAll(or)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(expected, actual) {
t.Fatalf("received bytes are not equal\n\tactual: %v\n\texpected:%v", actual, expected)
}
})
}
func FuzzSendAndReceiveChain(f *testing.F) {
f.Add([]byte{})
f.Add([]byte{0})
f.Add(bytes.Repeat([]byte{0}, windowSize+1))
f.Add([]byte("hello"))
f.Add(bytes.Repeat([]byte("hello"), windowSize+1))
f.Fuzz(func(t *testing.T, expected []byte) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
r, w := io.Pipe()
or := chainStreams(ctx, chainStreams(ctx, chainStreams(ctx, r)))
go func() {
io.Copy(w, bytes.NewBuffer(expected))
w.Close()
}()
actual, err := io.ReadAll(or)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(expected, actual) {
t.Fatalf("received bytes are not equal\n\tactual: %v\n\texpected:%v", actual, expected)
}
}) })
} }
func FuzzWriter(f *testing.F) { func runSendAndReceiveFuzz(ctx context.Context, t *testing.T, expected []byte) {
f.Add([]byte{}) rs, ws := pipeStream()
f.Add([]byte{0}) r, w := io.Pipe()
f.Add(bytes.Repeat([]byte{0}, windowSize+1)) SendStream(ctx, r, ws)
f.Add([]byte("hello")) or := ReceiveStream(ctx, rs)
f.Add(bytes.Repeat([]byte("hello"), windowSize+1))
f.Fuzz(func(t *testing.T, expected []byte) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
rs, ws := pipeStream() go func() {
wc := WriteByteStream(ctx, ws) io.Copy(w, bytes.NewBuffer(expected))
or := ReceiveStream(ctx, rs) w.Close()
}()
go func() { actual, err := io.ReadAll(or)
io.Copy(wc, bytes.NewBuffer(expected)) if err != nil {
wc.Close() t.Fatal(err)
}() }
actual, err := io.ReadAll(or) if !bytes.Equal(expected, actual) {
if err != nil { t.Fatalf("received bytes are not equal\n\tactual: %v\n\texpected:%v", actual, expected)
t.Fatal(err) }
} }
if !bytes.Equal(expected, actual) { func runSendAndReceiveChainFuzz(ctx context.Context, t *testing.T, expected []byte) {
t.Fatalf("received bytes are not equal\n\tactual: %v\n\texpected:%v", actual, expected) r, w := io.Pipe()
}
}) or := chainStreams(ctx, chainStreams(ctx, chainStreams(ctx, r)))
go func() {
io.Copy(w, bytes.NewBuffer(expected))
w.Close()
}()
actual, err := io.ReadAll(or)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(expected, actual) {
t.Fatalf("received bytes are not equal\n\tactual: %v\n\texpected:%v", actual, expected)
}
}
func runWriterFuzz(ctx context.Context, t *testing.T, expected []byte) {
rs, ws := pipeStream()
wc := WriteByteStream(ctx, ws)
or := ReceiveStream(ctx, rs)
go func() {
io.Copy(wc, bytes.NewBuffer(expected))
wc.Close()
}()
actual, err := io.ReadAll(or)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(expected, actual) {
t.Fatalf("received bytes are not equal\n\tactual: %v\n\texpected:%v", actual, expected)
}
} }
func chainStreams(ctx context.Context, r io.Reader) io.Reader { func chainStreams(ctx context.Context, r io.Reader) io.Reader {