Merge pull request #1531 from nspcc-dev/core/applicationlog_with_multiple_triggers
core, rpc: store multiple execution results for single hash
This commit is contained in:
commit
0f827ee6ba
21 changed files with 441 additions and 199 deletions
|
@ -58,6 +58,7 @@ type rpcTestCase struct {
|
|||
|
||||
const testContractHash = "b0fda4dd46b8e5d207e86e774a4a133c6db69ee7"
|
||||
const deploymentTxHash = "59f7b22b90e26f883a56b916c1580e3ee4f13caded686353cd77577e6194c173"
|
||||
const genesisBlockHash = "a496577895eb8c227bb866dc44f99f21c0cf06417ca8f2a877cc5d761a50dac0"
|
||||
|
||||
const verifyContractHash = "c1213693b22cb0454a436d6e0bd76b8c0a3bfdf7"
|
||||
const verifyContractAVM = "570300412d51083021700c14aa8acf859d4fe402b34e673f2156821796a488ebdb30716813cedb2869db289740"
|
||||
|
@ -68,15 +69,53 @@ var rpcTestCases = map[string][]rpcTestCase{
|
|||
{
|
||||
name: "positive",
|
||||
params: `["` + deploymentTxHash + `"]`,
|
||||
result: func(e *executor) interface{} { return &state.AppExecResult{} },
|
||||
result: func(e *executor) interface{} { return &result.ApplicationLog{} },
|
||||
check: func(t *testing.T, e *executor, acc interface{}) {
|
||||
res, ok := acc.(*state.AppExecResult)
|
||||
res, ok := acc.(*result.ApplicationLog)
|
||||
require.True(t, ok)
|
||||
expectedTxHash, err := util.Uint256DecodeStringLE(deploymentTxHash)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, expectedTxHash, res.TxHash)
|
||||
assert.Equal(t, trigger.Application, res.Trigger)
|
||||
assert.Equal(t, vm.HaltState, res.VMState)
|
||||
assert.Equal(t, 1, len(res.Executions))
|
||||
assert.Equal(t, expectedTxHash, res.Container)
|
||||
assert.Equal(t, trigger.Application, res.Executions[0].Trigger)
|
||||
assert.Equal(t, vm.HaltState, res.Executions[0].VMState)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "positive, genesis block",
|
||||
params: `["` + genesisBlockHash + `"]`,
|
||||
result: func(e *executor) interface{} { return &result.ApplicationLog{} },
|
||||
check: func(t *testing.T, e *executor, acc interface{}) {
|
||||
res, ok := acc.(*result.ApplicationLog)
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, genesisBlockHash, res.Container.StringLE())
|
||||
assert.Equal(t, 1, len(res.Executions))
|
||||
assert.Equal(t, trigger.PostPersist, res.Executions[0].Trigger) // no onPersist for genesis block
|
||||
assert.Equal(t, vm.HaltState, res.Executions[0].VMState)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "positive, genesis block, postPersist",
|
||||
params: `["` + genesisBlockHash + `", "PostPersist"]`,
|
||||
result: func(e *executor) interface{} { return &result.ApplicationLog{} },
|
||||
check: func(t *testing.T, e *executor, acc interface{}) {
|
||||
res, ok := acc.(*result.ApplicationLog)
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, genesisBlockHash, res.Container.StringLE())
|
||||
assert.Equal(t, 1, len(res.Executions))
|
||||
assert.Equal(t, trigger.PostPersist, res.Executions[0].Trigger) // no onPersist for genesis block
|
||||
assert.Equal(t, vm.HaltState, res.Executions[0].VMState)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "positive, genesis block, onPersist",
|
||||
params: `["` + genesisBlockHash + `", "OnPersist"]`,
|
||||
result: func(e *executor) interface{} { return &result.ApplicationLog{} },
|
||||
check: func(t *testing.T, e *executor, acc interface{}) {
|
||||
res, ok := acc.(*result.ApplicationLog)
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, genesisBlockHash, res.Container.StringLE())
|
||||
assert.Equal(t, 0, len(res.Executions)) // no onPersist for genesis block
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -890,10 +929,13 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) []
|
|||
rpc := `{"jsonrpc": "2.0", "id": 1, "method": "getapplicationlog", "params": ["%s"]}`
|
||||
body := doRPCCall(fmt.Sprintf(rpc, e.chain.GetHeaderHash(1).StringLE()), httpSrv.URL, t)
|
||||
data := checkErrGetResult(t, body, false)
|
||||
var res state.AppExecResult
|
||||
var res result.ApplicationLog
|
||||
require.NoError(t, json.Unmarshal(data, &res))
|
||||
require.Equal(t, trigger.PostPersist, res.Trigger)
|
||||
require.Equal(t, vm.HaltState, res.VMState)
|
||||
require.Equal(t, 2, len(res.Executions))
|
||||
require.Equal(t, trigger.OnPersist, res.Executions[0].Trigger)
|
||||
require.Equal(t, vm.HaltState, res.Executions[0].VMState)
|
||||
require.Equal(t, trigger.PostPersist, res.Executions[1].Trigger)
|
||||
require.Equal(t, vm.HaltState, res.Executions[1].VMState)
|
||||
})
|
||||
|
||||
t.Run("submit", func(t *testing.T) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue