github.com/number571/tendermint@v0.34.11-gost/test/fuzz/rpc/jsonrpc/server/handler.go (about) 1 package handler 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "io/ioutil" 7 "net/http" 8 "net/http/httptest" 9 10 "github.com/number571/tendermint/libs/log" 11 rs "github.com/number571/tendermint/rpc/jsonrpc/server" 12 types "github.com/number571/tendermint/rpc/jsonrpc/types" 13 ) 14 15 var rpcFuncMap = map[string]*rs.RPCFunc{ 16 "c": rs.NewRPCFunc(func(s string, i int) (string, int) { return "foo", 200 }, "s,i", false), 17 } 18 var mux *http.ServeMux 19 20 func init() { 21 mux = http.NewServeMux() 22 lgr := log.MustNewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo, false) 23 rs.RegisterRPCFuncs(mux, rpcFuncMap, lgr) 24 } 25 26 func Fuzz(data []byte) int { 27 if len(data) == 0 { 28 return -1 29 } 30 31 req, _ := http.NewRequest("POST", "http://localhost/", bytes.NewReader(data)) 32 rec := httptest.NewRecorder() 33 mux.ServeHTTP(rec, req) 34 res := rec.Result() 35 blob, err := ioutil.ReadAll(res.Body) 36 if err != nil { 37 panic(err) 38 } 39 if err := res.Body.Close(); err != nil { 40 panic(err) 41 } 42 if len(blob) > 0 { 43 recv := new(types.RPCResponse) 44 if err := json.Unmarshal(blob, recv); err != nil { 45 panic(err) 46 } 47 } 48 return 1 49 }