|
|
- package types_test
-
- import (
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- abci "github.com/tendermint/tendermint/abci/types"
- "github.com/tendermint/tendermint/crypto/merkle"
- )
-
- func TestHashAndProveResults(t *testing.T) {
- trs := []*abci.ExecTxResult{
- // Note, these tests rely on the first two entries being in this order.
- {Code: 0, Data: nil},
- {Code: 0, Data: []byte{}},
-
- {Code: 0, Data: []byte("one")},
- {Code: 14, Data: nil},
- {Code: 14, Data: []byte("foo")},
- {Code: 14, Data: []byte("bar")},
- }
-
- // Nil and []byte{} should produce the same bytes
- bz0, err := trs[0].Marshal()
- require.NoError(t, err)
- bz1, err := trs[1].Marshal()
- require.NoError(t, err)
- require.Equal(t, bz0, bz1)
-
- // Make sure that we can get a root hash from results and verify proofs.
- rs, err := abci.MarshalTxResults(trs)
- require.NoError(t, err)
- root := merkle.HashFromByteSlices(rs)
- assert.NotEmpty(t, root)
-
- _, proofs := merkle.ProofsFromByteSlices(rs)
- for i, tr := range trs {
- bz, err := tr.Marshal()
- require.NoError(t, err)
-
- valid := proofs[i].Verify(root, bz)
- assert.NoError(t, valid, "%d", i)
- }
- }
-
- func TestHashDeterministicFieldsOnly(t *testing.T) {
- tr1 := abci.ExecTxResult{
- Code: 1,
- Data: []byte("transaction"),
- Log: "nondeterministic data: abc",
- Info: "nondeterministic data: abc",
- GasWanted: 1000,
- GasUsed: 1000,
- Events: []abci.Event{},
- Codespace: "nondeterministic.data.abc",
- }
- tr2 := abci.ExecTxResult{
- Code: 1,
- Data: []byte("transaction"),
- Log: "nondeterministic data: def",
- Info: "nondeterministic data: def",
- GasWanted: 1000,
- GasUsed: 1000,
- Events: []abci.Event{},
- Codespace: "nondeterministic.data.def",
- }
- r1, err := abci.MarshalTxResults([]*abci.ExecTxResult{&tr1})
- require.NoError(t, err)
- r2, err := abci.MarshalTxResults([]*abci.ExecTxResult{&tr2})
- require.NoError(t, err)
- require.Equal(t, merkle.HashFromByteSlices(r1), merkle.HashFromByteSlices(r2))
- }
|