Skip to content

Commit eda4ea5

Browse files
author
Sun Hyuk Ahn
committed
tests: preCheck unit test
1 parent 1cd4c56 commit eda4ea5

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed

Diff for: core/state_transition_test.go

+133
Original file line numberDiff line numberDiff line change
@@ -215,3 +215,136 @@ func TestCollectGasRounding(t *testing.T) {
215215
}
216216
}
217217
}
218+
219+
func TestPreCheck(t *testing.T) {
220+
tests := []struct {
221+
name string
222+
msg types.Message
223+
expectedError error
224+
}{
225+
{
226+
name: "NonceTooHigh",
227+
msg: types.NewMessage(
228+
crypto.PubkeyToAddress(key.PublicKey),
229+
nil,
230+
2,
231+
big.NewInt(0),
232+
21000,
233+
big.NewInt(1),
234+
[]byte{},
235+
false,
236+
false,
237+
),
238+
expectedError: ErrNonceTooHigh,
239+
},
240+
{
241+
name: "NonceTooLow",
242+
msg: types.NewMessage(
243+
crypto.PubkeyToAddress(key.PublicKey),
244+
nil,
245+
0,
246+
big.NewInt(0),
247+
21000,
248+
big.NewInt(1),
249+
[]byte{},
250+
false,
251+
false,
252+
),
253+
expectedError: ErrNonceTooLow,
254+
},
255+
{
256+
name: "SenderNotEOA",
257+
msg: types.NewMessage(
258+
common.HexToAddress("0x0000000000000000000000000000000000000001"),
259+
nil,
260+
1,
261+
big.NewInt(0),
262+
21000,
263+
big.NewInt(1),
264+
[]byte{},
265+
false,
266+
false,
267+
),
268+
expectedError: ErrSenderNotEOA,
269+
},
270+
{
271+
name: "SuccessfulPreCheck",
272+
msg: types.NewMessage(
273+
crypto.PubkeyToAddress(key.PublicKey),
274+
nil,
275+
1,
276+
big.NewInt(0),
277+
21000,
278+
big.NewInt(1),
279+
[]byte{},
280+
false,
281+
false,
282+
),
283+
expectedError: nil,
284+
},
285+
{
286+
name: "SkipNonceChecks",
287+
msg: types.NewMessage(
288+
crypto.PubkeyToAddress(key.PublicKey),
289+
nil,
290+
2,
291+
big.NewInt(0),
292+
21000,
293+
big.NewInt(1),
294+
[]byte{},
295+
true,
296+
false,
297+
),
298+
expectedError: nil,
299+
},
300+
{
301+
name: "SkipFromEOACheck",
302+
msg: types.NewMessage(
303+
common.HexToAddress("0x0000000000000000000000000000000000000001"),
304+
nil,
305+
1,
306+
big.NewInt(0),
307+
21000,
308+
big.NewInt(1),
309+
[]byte{},
310+
false,
311+
true,
312+
),
313+
expectedError: nil,
314+
},
315+
{
316+
name: "SkipBothChecks",
317+
msg: types.NewMessage(
318+
common.HexToAddress("0x0000000000000000000000000000000000000001"),
319+
nil,
320+
2,
321+
big.NewInt(0),
322+
21000,
323+
big.NewInt(1),
324+
[]byte{},
325+
true,
326+
true,
327+
),
328+
expectedError: nil,
329+
},
330+
}
331+
332+
for _, tt := range tests {
333+
t.Run(tt.name, func(t *testing.T) {
334+
// make evm
335+
key, _ := crypto.GenerateKey()
336+
chain, db, header, _ := getTestEnvironment(*key)
337+
gp := new(GasPool).AddGas(math.MaxUint64)
338+
ctx := NewEVMContext(tt.msg, header, chain, nil /* coinbase is nil, no block reward */)
339+
ctx.TxType = types.SameShardTx
340+
vmenv := vm.NewEVM(ctx, db, params.TestChainConfig, vm.Config{})
341+
342+
// call preCheck and check for expected error
343+
st := NewStateTransition(vmenv, tt.msg, gp)
344+
err := st.preCheck()
345+
if err != tt.expectedError {
346+
t.Errorf("expected error %v, got %v", tt.expectedError, err)
347+
}
348+
})
349+
}
350+
}

0 commit comments

Comments
 (0)