Skip to content
This repository was archived by the owner on Dec 4, 2024. It is now read-only.

Commit 5b92cc8

Browse files
Fuzz tests
1 parent 4fb8bb4 commit 5b92cc8

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package polybft
2+
3+
import (
4+
"encoding/json"
5+
"testing"
6+
7+
"github.com/0xPolygon/polygon-edge/types"
8+
"github.com/stretchr/testify/mock"
9+
"github.com/stretchr/testify/require"
10+
"github.com/umbracle/ethgo"
11+
)
12+
13+
type getNewStateF struct {
14+
Address types.Address
15+
Number uint64
16+
LastProcessed uint64
17+
BatchSize uint64
18+
NumBlockConfirmations uint64
19+
MaxBackLogSize uint64
20+
}
21+
22+
func FuzzGetNewState(f *testing.F) {
23+
seeds := []getNewStateF{
24+
{
25+
Address: types.Address(types.StringToAddress("1").Bytes()),
26+
Number: 25,
27+
LastProcessed: 9,
28+
BatchSize: 5,
29+
NumBlockConfirmations: 3,
30+
MaxBackLogSize: 1000,
31+
},
32+
{
33+
Address: types.Address(types.StringToAddress("1").Bytes()),
34+
Number: 30,
35+
LastProcessed: 29,
36+
BatchSize: 5,
37+
NumBlockConfirmations: 3,
38+
MaxBackLogSize: 1000,
39+
},
40+
{
41+
Address: types.Address(types.StringToAddress("2").Bytes()),
42+
Number: 100,
43+
LastProcessed: 10,
44+
BatchSize: 10,
45+
NumBlockConfirmations: 3,
46+
MaxBackLogSize: 15,
47+
},
48+
}
49+
50+
for _, seed := range seeds {
51+
data, err := json.Marshal(seed)
52+
if err != nil {
53+
return
54+
}
55+
56+
f.Add(data)
57+
}
58+
59+
f.Fuzz(func(t *testing.T, input []byte) {
60+
61+
var data getNewStateF
62+
if err := json.Unmarshal(input, &data); err != nil {
63+
t.Skip(err)
64+
}
65+
66+
providerMock := new(mockProvider)
67+
for blockNum := data.LastProcessed + 1; blockNum <= data.Number; blockNum++ {
68+
providerMock.On("GetBlockByNumber", ethgo.BlockNumber(blockNum), false).Return(&ethgo.Block{Number: blockNum}, nil).Once()
69+
}
70+
71+
logs := []*ethgo.Log{
72+
createTestLogForStateSyncEvent(t, 1, 1),
73+
createTestLogForStateSyncEvent(t, 1, 11),
74+
createTestLogForStateSyncEvent(t, 2, 3),
75+
}
76+
providerMock.On("GetLogs", mock.Anything).Return(logs, nil)
77+
78+
testConfig := createTestTrackerConfig(t, data.NumBlockConfirmations, data.BatchSize, data.MaxBackLogSize)
79+
testConfig.BlockProvider = providerMock
80+
81+
eventTracker := &PolybftEventTracker{
82+
config: testConfig,
83+
blockContainer: NewTrackerBlockContainer(data.LastProcessed),
84+
}
85+
86+
require.NoError(t, eventTracker.getNewState(&ethgo.Block{Number: data.Number}))
87+
})
88+
}

0 commit comments

Comments
 (0)