From ca5ddc83e3db3f917ade738ab1303cbf53ce749c Mon Sep 17 00:00:00 2001 From: William Banfield Date: Mon, 26 Jul 2021 12:22:14 -0400 Subject: [PATCH] test/fuzz: add default testdata for fuzz tests --- test/fuzz/Makefile | 19 ++++++++-- test/fuzz/mempool/{ => v0}/checktx.go | 2 +- test/fuzz/mempool/v0/fuzz_test.go | 33 +++++++++++++++++ test/fuzz/mempool/v0/testdata/cases/empty | 0 test/fuzz/mempool/v1/checktx.go | 37 +++++++++++++++++++ test/fuzz/mempool/v1/fuzz_test.go | 33 +++++++++++++++++ test/fuzz/mempool/v1/testdata/cases/empty | 0 test/fuzz/p2p/addrbook/fuzz.go | 2 +- test/fuzz/p2p/addrbook/fuzz_test.go | 33 +++++++++++++++++ test/fuzz/p2p/addrbook/testdata/cases/empty | 0 test/fuzz/p2p/pex/fuzz_test.go | 33 +++++++++++++++++ test/fuzz/p2p/pex/testdata/cases/empty | 0 test/fuzz/p2p/secret_connection/fuzz_test.go | 33 +++++++++++++++++ test/fuzz/p2p/secret_connection/read_write.go | 2 +- .../secret_connection/testdata/cases/empty | 0 test/fuzz/rpc/jsonrpc/server/fuzz_test.go | 10 ++--- .../1184f5b8d4b6dd08709cf1513f26744167065e0d | 0 ...d-fuzz_rpc_jsonrpc_server-4738572803506176 | 0 .../rpc/jsonrpc/server/testdata/cases/empty | 0 19 files changed, 226 insertions(+), 11 deletions(-) rename test/fuzz/mempool/{ => v0}/checktx.go (97%) create mode 100644 test/fuzz/mempool/v0/fuzz_test.go create mode 100644 test/fuzz/mempool/v0/testdata/cases/empty create mode 100644 test/fuzz/mempool/v1/checktx.go create mode 100644 test/fuzz/mempool/v1/fuzz_test.go create mode 100644 test/fuzz/mempool/v1/testdata/cases/empty create mode 100644 test/fuzz/p2p/addrbook/fuzz_test.go create mode 100644 test/fuzz/p2p/addrbook/testdata/cases/empty create mode 100644 test/fuzz/p2p/pex/fuzz_test.go create mode 100644 test/fuzz/p2p/pex/testdata/cases/empty create mode 100644 test/fuzz/p2p/secret_connection/fuzz_test.go create mode 100644 test/fuzz/p2p/secret_connection/testdata/cases/empty rename test/fuzz/rpc/jsonrpc/server/testdata/{ => cases}/1184f5b8d4b6dd08709cf1513f26744167065e0d (100%) rename test/fuzz/rpc/jsonrpc/server/testdata/{ => cases}/clusterfuzz-testcase-minimized-fuzz_rpc_jsonrpc_server-4738572803506176 (100%) create mode 100644 test/fuzz/rpc/jsonrpc/server/testdata/cases/empty diff --git a/test/fuzz/Makefile b/test/fuzz/Makefile index 96b332dcf..3d34e0a43 100644 --- a/test/fuzz/Makefile +++ b/test/fuzz/Makefile @@ -1,8 +1,15 @@ #!/usr/bin/make -f -.PHONY: fuzz-mempool -fuzz-mempool: - cd mempool && \ +.PHONY: fuzz-mempool-v1 +fuzz-mempool-v1: + cd mempool/v1 && \ + rm -f *-fuzz.zip && \ + go-fuzz-build && \ + go-fuzz + +.PHONY: fuzz-mempool-v0 +fuzz-mempool-v0: + cd mempool/v0 && \ rm -f *-fuzz.zip && \ go-fuzz-build && \ go-fuzz @@ -37,3 +44,9 @@ fuzz-rpc-server: rm -f *-fuzz.zip && \ go-fuzz-build && \ go-fuzz + +clean: + find . -name corpus -type d -exec rm -rf {} +; + find . -name crashers -type d -exec rm -rf {} +; + find . -name suppressions -type d -exec rm -rf {} +; + find . -name *\.zip -type f -delete diff --git a/test/fuzz/mempool/checktx.go b/test/fuzz/mempool/v0/checktx.go similarity index 97% rename from test/fuzz/mempool/checktx.go rename to test/fuzz/mempool/v0/checktx.go index 197b0daaf..a90ec2290 100644 --- a/test/fuzz/mempool/checktx.go +++ b/test/fuzz/mempool/v0/checktx.go @@ -1,4 +1,4 @@ -package checktx +package v0 import ( "context" diff --git a/test/fuzz/mempool/v0/fuzz_test.go b/test/fuzz/mempool/v0/fuzz_test.go new file mode 100644 index 000000000..4f8f1e9c8 --- /dev/null +++ b/test/fuzz/mempool/v0/fuzz_test.go @@ -0,0 +1,33 @@ +package v0_test + +import ( + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + mempoolv0 "github.com/tendermint/tendermint/test/fuzz/mempool/v0" +) + +const testdataCasesDir = "testdata/cases" + +func TestMempoolTestdataCases(t *testing.T) { + entries, err := os.ReadDir(testdataCasesDir) + 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/cases test panic") + }() + f, err := os.Open(filepath.Join(testdataCasesDir, entry.Name())) + require.NoError(t, err) + input, err := ioutil.ReadAll(f) + require.NoError(t, err) + mempoolv0.Fuzz(input) + }) + } +} diff --git a/test/fuzz/mempool/v0/testdata/cases/empty b/test/fuzz/mempool/v0/testdata/cases/empty new file mode 100644 index 000000000..e69de29bb diff --git a/test/fuzz/mempool/v1/checktx.go b/test/fuzz/mempool/v1/checktx.go new file mode 100644 index 000000000..6194f3bcb --- /dev/null +++ b/test/fuzz/mempool/v1/checktx.go @@ -0,0 +1,37 @@ +package v1 + +import ( + "context" + + "github.com/tendermint/tendermint/abci/example/kvstore" + "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/internal/mempool" + mempoolv1 "github.com/tendermint/tendermint/internal/mempool/v0" + "github.com/tendermint/tendermint/proxy" +) + +var mp mempool.Mempool + +func init() { + app := kvstore.NewApplication() + cc := proxy.NewLocalClientCreator(app) + appConnMem, _ := cc.NewABCIClient() + err := appConnMem.Start() + if err != nil { + panic(err) + } + + cfg := config.DefaultMempoolConfig() + cfg.Broadcast = false + + mp = mempoolv1.NewCListMempool(cfg, appConnMem, 0) +} + +func Fuzz(data []byte) int { + err := mp.CheckTx(context.Background(), data, nil, mempool.TxInfo{}) + if err != nil { + return 0 + } + + return 1 +} diff --git a/test/fuzz/mempool/v1/fuzz_test.go b/test/fuzz/mempool/v1/fuzz_test.go new file mode 100644 index 000000000..863697a0a --- /dev/null +++ b/test/fuzz/mempool/v1/fuzz_test.go @@ -0,0 +1,33 @@ +package v1_test + +import ( + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + mempoolv1 "github.com/tendermint/tendermint/test/fuzz/mempool/v1" +) + +const testdataCasesDir = "testdata/cases" + +func TestMempoolTestdataCases(t *testing.T) { + entries, err := os.ReadDir(testdataCasesDir) + 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/cases test panic") + }() + f, err := os.Open(filepath.Join(testdataCasesDir, entry.Name())) + require.NoError(t, err) + input, err := ioutil.ReadAll(f) + require.NoError(t, err) + mempoolv1.Fuzz(input) + }) + } +} diff --git a/test/fuzz/mempool/v1/testdata/cases/empty b/test/fuzz/mempool/v1/testdata/cases/empty new file mode 100644 index 000000000..e69de29bb diff --git a/test/fuzz/p2p/addrbook/fuzz.go b/test/fuzz/p2p/addrbook/fuzz.go index d0dfe6530..6d5548fc7 100644 --- a/test/fuzz/p2p/addrbook/fuzz.go +++ b/test/fuzz/p2p/addrbook/fuzz.go @@ -1,5 +1,5 @@ // nolint: gosec -package addr +package addrbook import ( "encoding/json" diff --git a/test/fuzz/p2p/addrbook/fuzz_test.go b/test/fuzz/p2p/addrbook/fuzz_test.go new file mode 100644 index 000000000..4ec7aebd9 --- /dev/null +++ b/test/fuzz/p2p/addrbook/fuzz_test.go @@ -0,0 +1,33 @@ +package addrbook_test + +import ( + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/test/fuzz/p2p/addrbook" +) + +const testdataCasesDir = "testdata/cases" + +func TestAddrbookTestdataCases(t *testing.T) { + entries, err := os.ReadDir(testdataCasesDir) + 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/cases test panic") + }() + f, err := os.Open(filepath.Join(testdataCasesDir, entry.Name())) + require.NoError(t, err) + input, err := ioutil.ReadAll(f) + require.NoError(t, err) + addrbook.Fuzz(input) + }) + } +} diff --git a/test/fuzz/p2p/addrbook/testdata/cases/empty b/test/fuzz/p2p/addrbook/testdata/cases/empty new file mode 100644 index 000000000..e69de29bb diff --git a/test/fuzz/p2p/pex/fuzz_test.go b/test/fuzz/p2p/pex/fuzz_test.go new file mode 100644 index 000000000..8a194e730 --- /dev/null +++ b/test/fuzz/p2p/pex/fuzz_test.go @@ -0,0 +1,33 @@ +package pex_test + +import ( + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/test/fuzz/p2p/pex" +) + +const testdataCasesDir = "testdata/cases" + +func TestPexTestdataCases(t *testing.T) { + entries, err := os.ReadDir(testdataCasesDir) + 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/cases test panic") + }() + f, err := os.Open(filepath.Join(testdataCasesDir, entry.Name())) + require.NoError(t, err) + input, err := ioutil.ReadAll(f) + require.NoError(t, err) + pex.Fuzz(input) + }) + } +} diff --git a/test/fuzz/p2p/pex/testdata/cases/empty b/test/fuzz/p2p/pex/testdata/cases/empty new file mode 100644 index 000000000..e69de29bb diff --git a/test/fuzz/p2p/secret_connection/fuzz_test.go b/test/fuzz/p2p/secret_connection/fuzz_test.go new file mode 100644 index 000000000..83347a9e8 --- /dev/null +++ b/test/fuzz/p2p/secret_connection/fuzz_test.go @@ -0,0 +1,33 @@ +package secret_connection_test + +import ( + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/test/fuzz/p2p/secret_connection" +) + +const testdataCasesDir = "testdata/cases" + +func TestSecretConnectionTestdataCases(t *testing.T) { + entries, err := os.ReadDir(testdataCasesDir) + 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/cases test panic") + }() + f, err := os.Open(filepath.Join(testdataCasesDir, entry.Name())) + require.NoError(t, err) + input, err := ioutil.ReadAll(f) + require.NoError(t, err) + secret_connection.Fuzz(input) + }) + } +} diff --git a/test/fuzz/p2p/secret_connection/read_write.go b/test/fuzz/p2p/secret_connection/read_write.go index 9701460f5..c7b49977a 100644 --- a/test/fuzz/p2p/secret_connection/read_write.go +++ b/test/fuzz/p2p/secret_connection/read_write.go @@ -1,4 +1,4 @@ -package secretconnection +package secret_connection import ( "bytes" diff --git a/test/fuzz/p2p/secret_connection/testdata/cases/empty b/test/fuzz/p2p/secret_connection/testdata/cases/empty new file mode 100644 index 000000000..e69de29bb diff --git a/test/fuzz/rpc/jsonrpc/server/fuzz_test.go b/test/fuzz/rpc/jsonrpc/server/fuzz_test.go index 005248375..50b9194fe 100644 --- a/test/fuzz/rpc/jsonrpc/server/fuzz_test.go +++ b/test/fuzz/rpc/jsonrpc/server/fuzz_test.go @@ -10,10 +10,10 @@ import ( "github.com/tendermint/tendermint/test/fuzz/rpc/jsonrpc/server" ) -const testdataDir = "testdata" +const testdataCasesDir = "testdata/cases" -func TestServerOnTestData(t *testing.T) { - entries, err := os.ReadDir(testdataDir) +func TestServerTestdataCases(t *testing.T) { + entries, err := os.ReadDir(testdataCasesDir) require.NoError(t, err) for _, e := range entries { @@ -21,9 +21,9 @@ func TestServerOnTestData(t *testing.T) { t.Run(entry.Name(), func(t *testing.T) { defer func() { r := recover() - require.Nilf(t, r, "testdata test panic") + require.Nilf(t, r, "testdata/cases test panic") }() - f, err := os.Open(filepath.Join(testdataDir, entry.Name())) + f, err := os.Open(filepath.Join(testdataCasesDir, entry.Name())) require.NoError(t, err) input, err := ioutil.ReadAll(f) require.NoError(t, err) diff --git a/test/fuzz/rpc/jsonrpc/server/testdata/1184f5b8d4b6dd08709cf1513f26744167065e0d b/test/fuzz/rpc/jsonrpc/server/testdata/cases/1184f5b8d4b6dd08709cf1513f26744167065e0d similarity index 100% rename from test/fuzz/rpc/jsonrpc/server/testdata/1184f5b8d4b6dd08709cf1513f26744167065e0d rename to test/fuzz/rpc/jsonrpc/server/testdata/cases/1184f5b8d4b6dd08709cf1513f26744167065e0d diff --git a/test/fuzz/rpc/jsonrpc/server/testdata/clusterfuzz-testcase-minimized-fuzz_rpc_jsonrpc_server-4738572803506176 b/test/fuzz/rpc/jsonrpc/server/testdata/cases/clusterfuzz-testcase-minimized-fuzz_rpc_jsonrpc_server-4738572803506176 similarity index 100% rename from test/fuzz/rpc/jsonrpc/server/testdata/clusterfuzz-testcase-minimized-fuzz_rpc_jsonrpc_server-4738572803506176 rename to test/fuzz/rpc/jsonrpc/server/testdata/cases/clusterfuzz-testcase-minimized-fuzz_rpc_jsonrpc_server-4738572803506176 diff --git a/test/fuzz/rpc/jsonrpc/server/testdata/cases/empty b/test/fuzz/rpc/jsonrpc/server/testdata/cases/empty new file mode 100644 index 000000000..e69de29bb