forked from TrueCloudLab/neoneo-go
rpc: simplify getblockheader RPC test
Set up hash once and get header via provided chain.
This commit is contained in:
parent
687e30c16f
commit
76a6937f32
1 changed files with 62 additions and 50 deletions
|
@ -14,6 +14,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core"
|
"github.com/nspcc-dev/neo-go/pkg/core"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/core/block"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
|
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
|
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
|
||||||
|
@ -402,56 +403,6 @@ var rpcTestCases = map[string][]rpcTestCase{
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"getblockheader": {
|
"getblockheader": {
|
||||||
{
|
|
||||||
name: "positive, no verbose",
|
|
||||||
params: `["8c702625ab05236fda5763bbe168359b7747508e1387e4404217e0418846c94e"]`,
|
|
||||||
result: func(e *executor) interface{} {
|
|
||||||
expected := "000000007654fa898eba5ced6ab7a44fe1187e48b80ddd5340499fb2d312cc2fe4a6df1bb31cada0cb85914ee5bd6d11d25289a59203bf65f40232de8ffaa2bb7517f3b50a0ca05e010000005704000000000000e903736ceceeceae1806eee0e3ec61e7cce476ce01fd08010c404def65e6b379e441fe1507d6d031c874e686b854b2afe9843fda5087f76e261e282b4db232079485dcf449678e2358a3d148835b85affba4ecd08a2bf1b556fe0c406b6218df12f8a7060379daf4eed312a85be51ea2fabee826a745547141694a3f49f8a61ac63db7ece1de7fbb54ecb9c5ac244a7fcdd794c9767b4cb2637a9c840c40ebaf64e3b76299d3ccc7e48e197a09af11cc0a80bd636cdef80312c61e24eebaace44cda90d17eb3ba85cfc08079676626966c75a48631b508c39375a8181ec40c402a77786cdaa5e93f0952c834cebdab25475beee0b60fce4263d85b7395bcde993ebee884667def21b7de494097f30c14c626357683680bdbace9667cc03b0da894130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b683073b3bb00"
|
|
||||||
return &expected
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "positive, verbose 0",
|
|
||||||
params: `["8c702625ab05236fda5763bbe168359b7747508e1387e4404217e0418846c94e", 0]`,
|
|
||||||
result: func(e *executor) interface{} {
|
|
||||||
expected := "000000007654fa898eba5ced6ab7a44fe1187e48b80ddd5340499fb2d312cc2fe4a6df1bb31cada0cb85914ee5bd6d11d25289a59203bf65f40232de8ffaa2bb7517f3b50a0ca05e010000005704000000000000e903736ceceeceae1806eee0e3ec61e7cce476ce01fd08010c404def65e6b379e441fe1507d6d031c874e686b854b2afe9843fda5087f76e261e282b4db232079485dcf449678e2358a3d148835b85affba4ecd08a2bf1b556fe0c406b6218df12f8a7060379daf4eed312a85be51ea2fabee826a745547141694a3f49f8a61ac63db7ece1de7fbb54ecb9c5ac244a7fcdd794c9767b4cb2637a9c840c40ebaf64e3b76299d3ccc7e48e197a09af11cc0a80bd636cdef80312c61e24eebaace44cda90d17eb3ba85cfc08079676626966c75a48631b508c39375a8181ec40c402a77786cdaa5e93f0952c834cebdab25475beee0b60fce4263d85b7395bcde993ebee884667def21b7de494097f30c14c626357683680bdbace9667cc03b0da894130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b683073b3bb00"
|
|
||||||
return &expected
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "positive, verbose !=0",
|
|
||||||
params: `["8c702625ab05236fda5763bbe168359b7747508e1387e4404217e0418846c94e", 2]`,
|
|
||||||
result: func(e *executor) interface{} {
|
|
||||||
hash, err := util.Uint256DecodeStringLE("8c702625ab05236fda5763bbe168359b7747508e1387e4404217e0418846c94e")
|
|
||||||
if err != nil {
|
|
||||||
panic("can not decode hash parameter")
|
|
||||||
}
|
|
||||||
block, err := e.chain.GetBlock(hash)
|
|
||||||
if err != nil {
|
|
||||||
panic("unknown block (update block hash)")
|
|
||||||
}
|
|
||||||
header := block.Header()
|
|
||||||
expected := result.Header{
|
|
||||||
Hash: header.Hash(),
|
|
||||||
Size: io.GetVarSize(header),
|
|
||||||
Version: header.Version,
|
|
||||||
PrevBlockHash: header.PrevHash,
|
|
||||||
MerkleRoot: header.MerkleRoot,
|
|
||||||
Timestamp: header.Timestamp,
|
|
||||||
Index: header.Index,
|
|
||||||
Nonce: strconv.FormatUint(header.ConsensusData, 16),
|
|
||||||
NextConsensus: address.Uint160ToString(header.NextConsensus),
|
|
||||||
Script: header.Script,
|
|
||||||
Confirmations: e.chain.BlockHeight() - header.Index + 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
nextHash := e.chain.GetHeaderHash(int(header.Index) + 1)
|
|
||||||
if !hash.Equals(util.Uint256{}) {
|
|
||||||
expected.NextBlockHash = &nextHash
|
|
||||||
}
|
|
||||||
return &expected
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "invalid verbose type",
|
name: "invalid verbose type",
|
||||||
params: `["614a9085dc55fd0539ad3a9d68d8b8e7c52328da905c87bfe8cfca57a5c3c02f", true]`,
|
params: `["614a9085dc55fd0539ad3a9d68d8b8e7c52328da905c87bfe8cfca57a5c3c02f", true]`,
|
||||||
|
@ -960,6 +911,55 @@ func TestRPC(t *testing.T) {
|
||||||
assert.Equal(t, TXHash, actual.Transaction.Hash())
|
assert.Equal(t, TXHash, actual.Transaction.Hash())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("getblockheader_positive", func(t *testing.T) {
|
||||||
|
rpc := `{"jsonrpc": "2.0", "id": 1, "method": "getblockheader", "params": %s}`
|
||||||
|
testHeaderHash := chain.GetHeaderHash(1).StringLE()
|
||||||
|
hdr := e.getHeader(testHeaderHash)
|
||||||
|
|
||||||
|
runCase := func(t *testing.T, rpc string, expected, actual interface{}) {
|
||||||
|
body := doRPCCall(rpc, handler, t)
|
||||||
|
data := checkErrGetResult(t, body, false)
|
||||||
|
require.NoError(t, json.Unmarshal(data, actual))
|
||||||
|
require.Equal(t, expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("no verbose", func(t *testing.T) {
|
||||||
|
w := io.NewBufBinWriter()
|
||||||
|
hdr.EncodeBinary(w.BinWriter)
|
||||||
|
require.NoError(t, w.Err)
|
||||||
|
encoded := hex.EncodeToString(w.Bytes())
|
||||||
|
|
||||||
|
t.Run("missing", func(t *testing.T) {
|
||||||
|
runCase(t, fmt.Sprintf(rpc, `["`+testHeaderHash+`"]`), &encoded, new(string))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("verbose=0", func(t *testing.T) {
|
||||||
|
runCase(t, fmt.Sprintf(rpc, `["`+testHeaderHash+`", 0]`), &encoded, new(string))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("verbose != 0", func(t *testing.T) {
|
||||||
|
nextHash := chain.GetHeaderHash(int(hdr.Index) + 1)
|
||||||
|
expected := &result.Header{
|
||||||
|
Hash: hdr.Hash(),
|
||||||
|
Size: io.GetVarSize(hdr),
|
||||||
|
Version: hdr.Version,
|
||||||
|
PrevBlockHash: hdr.PrevHash,
|
||||||
|
MerkleRoot: hdr.MerkleRoot,
|
||||||
|
Timestamp: hdr.Timestamp,
|
||||||
|
Index: hdr.Index,
|
||||||
|
Nonce: strconv.FormatUint(hdr.ConsensusData, 16),
|
||||||
|
NextConsensus: address.Uint160ToString(hdr.NextConsensus),
|
||||||
|
Script: hdr.Script,
|
||||||
|
Confirmations: e.chain.BlockHeight() - hdr.Index + 1,
|
||||||
|
NextBlockHash: &nextHash,
|
||||||
|
}
|
||||||
|
|
||||||
|
rpc := fmt.Sprintf(rpc, `["`+testHeaderHash+`", 2]`)
|
||||||
|
runCase(t, rpc, expected, new(result.Header))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("gettxout", func(t *testing.T) {
|
t.Run("gettxout", func(t *testing.T) {
|
||||||
block, _ := chain.GetBlock(chain.GetHeaderHash(0))
|
block, _ := chain.GetBlock(chain.GetHeaderHash(0))
|
||||||
tx := block.Transactions[3]
|
tx := block.Transactions[3]
|
||||||
|
@ -1002,6 +1002,18 @@ func TestRPC(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *executor) getHeader(s string) *block.Header {
|
||||||
|
hash, err := util.Uint256DecodeStringLE(s)
|
||||||
|
if err != nil {
|
||||||
|
panic("can not decode hash parameter")
|
||||||
|
}
|
||||||
|
block, err := e.chain.GetBlock(hash)
|
||||||
|
if err != nil {
|
||||||
|
panic("unknown block (update block hash)")
|
||||||
|
}
|
||||||
|
return block.Header()
|
||||||
|
}
|
||||||
|
|
||||||
func (tc rpcTestCase) getResultPair(e *executor) (expected interface{}, res interface{}) {
|
func (tc rpcTestCase) getResultPair(e *executor) (expected interface{}, res interface{}) {
|
||||||
expected = tc.result(e)
|
expected = tc.result(e)
|
||||||
resVal := reflect.New(reflect.TypeOf(expected).Elem())
|
resVal := reflect.New(reflect.TypeOf(expected).Elem())
|
||||||
|
|
Loading…
Reference in a new issue