mirror of
https://github.com/tendermint/tendermint.git
synced 2026-02-06 20:11:08 +00:00
test/fuzz: add test to reproduce found fuzz errors
This commit is contained in:
33
test/fuzz/rpc/jsonrpc/server/fuzz_test.go
Normal file
33
test/fuzz/rpc/jsonrpc/server/fuzz_test.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package server_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tendermint/tendermint/test/fuzz/rpc/jsonrpc/server"
|
||||
)
|
||||
|
||||
const testdataDir = "./testdata"
|
||||
|
||||
func TestServerOnTestData(t *testing.T) {
|
||||
entries, err := os.ReadDir(testdataDir)
|
||||
require.NoError(t, err)
|
||||
|
||||
for _, e := range entries {
|
||||
entry := e
|
||||
t.Run(entry.Name(), func(t *testing.T) {
|
||||
defer func() {
|
||||
r := recover()
|
||||
require.Nilf(t, r, "testdata test panic")
|
||||
}()
|
||||
f, err := os.Open(fmt.Sprintf("%s/%s", testdataDir, e.Name()))
|
||||
require.NoError(t, err)
|
||||
input, err := ioutil.ReadAll(f)
|
||||
require.NoError(t, err)
|
||||
server.Fuzz(input)
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package handler
|
||||
package server
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
@@ -39,11 +39,29 @@ func Fuzz(data []byte) int {
|
||||
if err := res.Body.Close(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if len(blob) > 0 {
|
||||
recv := new(types.RPCResponse)
|
||||
if err := json.Unmarshal(blob, recv); err != nil {
|
||||
if len(blob) == 0 {
|
||||
return 1
|
||||
}
|
||||
|
||||
if inputJSONIsSlice(data) {
|
||||
recv := []types.RPCResponse{}
|
||||
if err := json.Unmarshal(blob, &recv); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return 1
|
||||
}
|
||||
recv := &types.RPCResponse{}
|
||||
if err := json.Unmarshal(blob, recv); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
func inputJSONIsSlice(input []byte) bool {
|
||||
slice := []interface{}{}
|
||||
err := json.Unmarshal(input, &slice)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
[{"iD":7},{"iD":7}]
|
||||
Reference in New Issue
Block a user