package types import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" ) func TestABCIResults(t *testing.T) { a := ABCIResult{Code: 0, Data: nil} b := ABCIResult{Code: 0, Data: []byte{}} c := ABCIResult{Code: 0, Data: []byte("one")} d := ABCIResult{Code: 14, Data: nil} e := ABCIResult{Code: 14, Data: []byte("foo")} f := ABCIResult{Code: 14, Data: []byte("bar")} // Nil and []byte{} should produce the same bytes require.Equal(t, a.Bytes(), a.Bytes()) require.Equal(t, b.Bytes(), b.Bytes()) require.Equal(t, a.Bytes(), b.Bytes()) // a and b should be the same, don't go in results. results := ABCIResults{a, c, d, e, f} // Make sure each result serializes differently var last []byte assert.Equal(t, last, a.Bytes()) // first one is empty for i, res := range results[1:] { bz := res.Bytes() assert.NotEqual(t, last, bz, "%d", i) last = bz } // Make sure that we can get a root hash from results and verify proofs. root := results.Hash() assert.NotEmpty(t, root) for i, res := range results { proof := results.ProveResult(i) valid := proof.Verify(root, res.Bytes()) assert.NoError(t, valid, "%d", i) } } func TestABCIResultsBytes(t *testing.T) { results := NewResults([]*abci.ResponseDeliverTx{ {Code: 0, Data: []byte{}}, {Code: 0, Data: []byte("one")}, {Code: 14, Data: nil}, {Code: 14, Data: []byte("foo")}, {Code: 14, Data: []byte("bar")}, }) assert.NotNil(t, results.Bytes()) }