github.com/adoriasoft/tendermint@v0.34.0-dev1.0.20200722151356-96d84601a75a/light/rpc/query_test.go (about)

     1  package rpc
     2  
     3  //import (
     4  //	"fmt"
     5  //	"os"
     6  //	"testing"
     7  //	"time"
     8  
     9  //	"github.com/stretchr/testify/assert"
    10  //	"github.com/stretchr/testify/require"
    11  
    12  //	"github.com/tendermint/tendermint/abci/example/kvstore"
    13  //	"github.com/tendermint/tendermint/crypto/merkle"
    14  //	nm "github.com/tendermint/tendermint/node"
    15  //	"github.com/tendermint/tendermint/rpc/client"
    16  //	rpctest "github.com/tendermint/tendermint/rpc/test"
    17  //	"github.com/tendermint/tendermint/types"
    18  //)
    19  
    20  //var node *nm.Node
    21  //var chainID = "tendermint_test" // TODO use from config.
    22  ////nolint:unused
    23  //var waitForEventTimeout = 5 * time.Second
    24  
    25  //// TODO fix tests!!
    26  
    27  //func TestMain(m *testing.M) {
    28  //	app := kvstore.NewKVStoreApplication()
    29  //	node = rpctest.StartTendermint(app)
    30  
    31  //	code := m.Run()
    32  
    33  //	rpctest.StopTendermint(node)
    34  //	os.Exit(code)
    35  //}
    36  
    37  //func kvstoreTx(k, v []byte) []byte {
    38  //	return []byte(fmt.Sprintf("%s=%s", k, v))
    39  //}
    40  
    41  //// TODO: enable it after general proof format has been adapted
    42  //// in abci/examples/kvstore.go
    43  ////nolint:unused,deadcode
    44  //func _TestAppProofs(t *testing.T) {
    45  //	assert, require := assert.New(t), require.New(t)
    46  
    47  //	prt := defaultProofRuntime()
    48  //	cl := client.NewLocal(node)
    49  //	client.WaitForHeight(cl, 1, nil)
    50  
    51  //	// This sets up our trust on the node based on some past point.
    52  //	source := certclient.NewProvider(chainID, cl)
    53  //	seed, err := source.LatestFullCommit(chainID, 1, 1)
    54  //	require.NoError(err, "%#v", err)
    55  //	cert := lite.NewBaseVerifier(chainID, seed.Height(), seed.Validators)
    56  
    57  //	// Wait for tx confirmation.
    58  //	done := make(chan int64)
    59  //	go func() {
    60  //		evtTyp := types.EventTx
    61  //		_, err = client.WaitForOneEvent(cl, evtTyp, waitForEventTimeout)
    62  //		require.Nil(err, "%#v", err)
    63  //		close(done)
    64  //	}()
    65  
    66  //	// Submit a transaction.
    67  //	k := []byte("my-key")
    68  //	v := []byte("my-value")
    69  //	tx := kvstoreTx(k, v)
    70  //	br, err := cl.BroadcastTxCommit(tx)
    71  //	require.NoError(err, "%#v", err)
    72  //	require.EqualValues(0, br.CheckTx.Code, "%#v", br.CheckTx)
    73  //	require.EqualValues(0, br.DeliverTx.Code)
    74  //	brh := br.Height
    75  
    76  //	// Fetch latest after tx commit.
    77  //	<-done
    78  //	latest, err := source.LatestFullCommit(chainID, 1, 1<<63-1)
    79  //	require.NoError(err, "%#v", err)
    80  //	rootHash := latest.SignedHeader.AppHash
    81  //	if rootHash == nil {
    82  //		// Fetch one block later, AppHash hasn't been committed yet.
    83  //		// TODO find a way to avoid doing this.
    84  //		client.WaitForHeight(cl, latest.SignedHeader.Height+1, nil)
    85  //		latest, err = source.LatestFullCommit(chainID, latest.SignedHeader.Height+1, 1<<63-1)
    86  //		require.NoError(err, "%#v", err)
    87  //		rootHash = latest.SignedHeader.AppHash
    88  //	}
    89  //	require.NotNil(rootHash)
    90  
    91  //	// verify a query before the tx block has no data (and valid non-exist proof)
    92  //	bs, height, proof, err := GetWithProof(prt, k, brh-1, cl, cert)
    93  //	require.NoError(err, "%#v", err)
    94  //	require.NotNil(proof)
    95  //	require.Equal(height, brh-1)
    96  //	// require.NotNil(proof)
    97  //	// TODO: Ensure that *some* keys will be there, ensuring that proof is nil,
    98  //	// (currently there's a race condition)
    99  //	// and ensure that proof proves absence of k.
   100  //	require.Nil(bs)
   101  
   102  //	// but given that block it is good
   103  //	bs, height, proof, err = GetWithProof(prt, k, brh, cl, cert)
   104  //	require.NoError(err, "%#v", err)
   105  //	require.NotNil(proof)
   106  //	require.Equal(height, brh)
   107  
   108  //	assert.EqualValues(v, bs)
   109  //	err = prt.VerifyValue(proof, rootHash, string(k), bs) // XXX key encoding
   110  //	assert.NoError(err, "%#v", err)
   111  
   112  //	// Test non-existing key.
   113  //	missing := []byte("my-missing-key")
   114  //	bs, _, proof, err = GetWithProof(prt, missing, 0, cl, cert)
   115  //	require.NoError(err)
   116  //	require.Nil(bs)
   117  //	require.NotNil(proof)
   118  //	err = prt.VerifyAbsence(proof, rootHash, string(missing)) // XXX VerifyAbsence(), keyencoding
   119  //	assert.NoError(err, "%#v", err)
   120  //	err = prt.VerifyAbsence(proof, rootHash, string(k)) // XXX VerifyAbsence(), keyencoding
   121  //	assert.Error(err, "%#v", err)
   122  //}
   123  
   124  //func TestTxProofs(t *testing.T) {
   125  //	assert, require := assert.New(t), require.New(t)
   126  
   127  //	cl := client.NewLocal(node)
   128  //	client.WaitForHeight(cl, 1, nil)
   129  
   130  //	tx := kvstoreTx([]byte("key-a"), []byte("value-a"))
   131  //	br, err := cl.BroadcastTxCommit(tx)
   132  //	require.NoError(err, "%#v", err)
   133  //	require.EqualValues(0, br.CheckTx.Code, "%#v", br.CheckTx)
   134  //	require.EqualValues(0, br.DeliverTx.Code)
   135  //	brh := br.Height
   136  
   137  //	source := certclient.NewProvider(chainID, cl)
   138  //	seed, err := source.LatestFullCommit(chainID, brh-2, brh-2)
   139  //	require.NoError(err, "%#v", err)
   140  //	cert := lite.NewBaseVerifier(chainID, seed.Height(), seed.Validators)
   141  
   142  //	// First let's make sure a bogus transaction hash returns a valid non-existence proof.
   143  //	key := types.Tx([]byte("bogus")).Hash()
   144  //	_, err = cl.Tx(key, true)
   145  //	require.NotNil(err)
   146  //	require.Contains(err.Error(), "not found")
   147  
   148  //	// Now let's check with the real tx root hash.
   149  //	key = types.Tx(tx).Hash()
   150  //	res, err := cl.Tx(key, true)
   151  //	require.NoError(err, "%#v", err)
   152  //	require.NotNil(res)
   153  //	keyHash := merkle.SimpleHashFromByteSlices([][]byte{key})
   154  //	err = res.Proof.Validate(keyHash)
   155  //	assert.NoError(err, "%#v", err)
   156  
   157  //	commit, err := GetCertifiedCommit(br.Height, cl, cert)
   158  //	require.Nil(err, "%#v", err)
   159  //	require.Equal(res.Proof.RootHash, commit.Header.DataHash)
   160  //}