@@ -43,6 +43,11 @@ type requestRoot struct {
43
43
diffHash common.Hash
44
44
}
45
45
46
+ type verifFailedStatus struct {
47
+ status types.VerifyStatus
48
+ blockNumber uint64
49
+ }
50
+
46
51
// mockVerifyPeer is a mocking struct that simulates p2p signals for verification tasks.
47
52
type mockVerifyPeer struct {
48
53
callback func (* requestRoot )
@@ -75,7 +80,7 @@ func newMockRemoteVerifyPeer(peers []VerifyPeer) *mockVerifyPeers {
75
80
return & mockVerifyPeers {peers }
76
81
}
77
82
78
- func makeTestBackendWithRemoteValidator (blocks int ) (* testBackend , * testBackend , []* types.Block , error ) {
83
+ func makeTestBackendWithRemoteValidator (blocks int , mode VerifyMode , failed * verifFailedStatus ) (* testBackend , * testBackend , []* types.Block , error ) {
79
84
signer := types.HomesteadSigner {}
80
85
81
86
// Create a database pre-initialize with a genesis block
@@ -105,7 +110,7 @@ func makeTestBackendWithRemoteValidator(blocks int) (*testBackend, *testBackend,
105
110
}
106
111
107
112
fastnode , err := NewBlockChain (db2 , nil , params .TestChainConfig , engine2 , vm.Config {},
108
- nil , nil , EnableBlockValidator (params .TestChainConfig , engine2 , FullVerify , newMockRemoteVerifyPeer (peers )))
113
+ nil , nil , EnableBlockValidator (params .TestChainConfig , engine2 , mode , newMockRemoteVerifyPeer (peers )))
109
114
if err != nil {
110
115
return nil , nil , nil , err
111
116
}
@@ -156,9 +161,15 @@ func makeTestBackendWithRemoteValidator(blocks int) (*testBackend, *testBackend,
156
161
157
162
peer .setCallBack (func (req * requestRoot ) {
158
163
if fastnode .validator != nil && fastnode .validator .RemoteVerifyManager () != nil {
164
+ resp := verifier .GetRootByDiffHash (req .blockNumber , req .blockHash , req .diffHash )
165
+ if failed != nil && req .blockNumber == failed .blockNumber {
166
+ resp .Status = failed .status
167
+ } else {
168
+ resp .Status = types .StatusFullVerified
169
+ }
159
170
fastnode .validator .RemoteVerifyManager ().
160
171
HandleRootResponse (
161
- verifier . GetRootByDiffHash ( req . blockNumber , req . blockHash , req . diffHash ), "mock" )
172
+ resp , peer . ID () )
162
173
}
163
174
})
164
175
if _ , err := verifier .InsertChain (bs ); err != nil {
@@ -176,12 +187,42 @@ func makeTestBackendWithRemoteValidator(blocks int) (*testBackend, *testBackend,
176
187
}
177
188
178
189
func TestFastNode (t * testing.T ) {
179
- _ , fastnode , blocks , err := makeTestBackendWithRemoteValidator (10240 )
190
+ // test full mode and succeed
191
+ _ , fastnode , blocks , err := makeTestBackendWithRemoteValidator (10240 , FullVerify , nil )
180
192
if err != nil {
181
193
t .Fatalf (err .Error ())
182
194
}
183
195
_ , err = fastnode .chain .InsertChain (blocks )
184
196
if err != nil {
185
197
t .Fatalf (err .Error ())
186
198
}
199
+ // test full mode and failed
200
+ failed := & verifFailedStatus {status : types .StatusDiffHashMismatch , blockNumber : 2048 }
201
+ _ , fastnode , blocks , err = makeTestBackendWithRemoteValidator (10240 , FullVerify , failed )
202
+ if err != nil {
203
+ t .Fatalf (err .Error ())
204
+ }
205
+ _ , err = fastnode .chain .InsertChain (blocks )
206
+ if err == nil || fastnode .chain .CurrentBlock ().NumberU64 () != failed .blockNumber + 10 {
207
+ t .Fatalf ("blocks insert should be failed at height %d" , failed .blockNumber + 11 )
208
+ }
209
+ // test insecure mode and succeed
210
+ _ , fastnode , blocks , err = makeTestBackendWithRemoteValidator (10240 , InsecureVerify , nil )
211
+ if err != nil {
212
+ t .Fatalf (err .Error ())
213
+ }
214
+ _ , err = fastnode .chain .InsertChain (blocks )
215
+ if err != nil {
216
+ t .Fatalf (err .Error ())
217
+ }
218
+ // test insecure mode and failed
219
+ failed = & verifFailedStatus {status : types .StatusImpossibleFork , blockNumber : 2048 }
220
+ _ , fastnode , blocks , err = makeTestBackendWithRemoteValidator (10240 , FullVerify , failed )
221
+ if err != nil {
222
+ t .Fatalf (err .Error ())
223
+ }
224
+ _ , err = fastnode .chain .InsertChain (blocks )
225
+ if err == nil || fastnode .chain .CurrentBlock ().NumberU64 () != failed .blockNumber + 10 {
226
+ t .Fatalf ("blocks insert should be failed at height %d" , failed .blockNumber + 11 )
227
+ }
187
228
}
0 commit comments