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 //}