erigon-pulse/txpool/pool_fuzz_test.go
2021-07-29 15:23:17 +07:00

60 lines
1.6 KiB
Go

// +build gofuzzbeta
package txpool
import (
"testing"
)
// https://blog.golang.org/fuzz-beta
// golang.org/s/draft-fuzzing-design
//gotip doc testing
//gotip doc testing.F
//gotip doc testing.F.Add
//gotip doc testing.F.Fuzz
//func FuzzParseQuery(f *testing.F) {
// f.Add("x=1&y=2")
// f.Fuzz(func(t *testing.T, queryStr string) {
// query, err := url.ParseQuery(queryStr)
// if err != nil {
// t.Skip()
// }
// queryStr2 := query.Encode()
// query2, err := url.ParseQuery(queryStr2)
// if err != nil {
// t.Fatalf("ParseQuery failed to decode a valid encoded query %s: %v", queryStr2, err)
// }
// if !reflect.DeepEqual(query, query2) {
// t.Errorf("ParseQuery gave different query after being encoded\nbefore: %v\nafter: %v", query, query2)
// }
// })
//}
func FuzzPromoteStep(f *testing.F) {
f.Add([]uint8{0b11111, 0b10001, 0b10101, 0b00001, 0b00000}, []uint8{0b11111, 0b10001, 0b10101, 0b00001, 0b00000}, []uint8{0b11111, 0b10001, 0b10101, 0b00001, 0b00000})
f.Fuzz(func(t *testing.T, s1, s2, s3 []uint8) {
t.Parallel()
pending := NewSubPool()
for i := range s1 {
s1[i] &= 0b11111
pending.Add(&MetaTx{SubPool: SubPoolMarker(s1[i])})
}
baseFee := NewSubPool()
for i := range s2 {
s2[i] &= 0b11111
baseFee.Add(&MetaTx{SubPool: SubPoolMarker(s2[i])})
}
queue := NewSubPool()
for i := range s3 {
s3[i] &= 0b11111
queue.Add(&MetaTx{SubPool: SubPoolMarker(s3[i])})
}
PromoteStep(pending, baseFee, queue)
if pending.Best() != nil && pending.Best().SubPool < 0b11110 {
t.Fatalf("Pending best too small %b", pending.Best().SubPool)
}
})
}