package client import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/lite" liteErr "github.com/tendermint/tendermint/lite/errors" rpcclient "github.com/tendermint/tendermint/rpc/client" rpctest "github.com/tendermint/tendermint/rpc/test" "github.com/tendermint/tendermint/types" ) func TestProvider(t *testing.T) { assert, require := assert.New(t), require.New(t) cfg := rpctest.GetConfig() rpcAddr := cfg.RPC.ListenAddress genDoc, _ := types.GenesisDocFromFile(cfg.GenesisFile()) chainID := genDoc.ChainID p := NewHTTPProvider(rpcAddr) require.NotNil(t, p) // let it produce some blocks err := rpcclient.WaitForHeight(p.(*provider).node, 6, nil) require.Nil(err) // let's get the highest block seed, err := p.LatestCommit() require.Nil(err, "%+v", err) sh := seed.Height() vhash := seed.Header.ValidatorsHash assert.True(sh < 5000) // let's check this is valid somehow assert.Nil(seed.ValidateBasic(chainID)) cert := lite.NewStaticCertifier(chainID, seed.Validators) // historical queries now work :) lower := sh - 5 seed, err = p.GetByHeight(lower) assert.Nil(err, "%+v", err) assert.Equal(lower, seed.Height()) // also get by hash (given the match) seed, err = p.GetByHash(vhash) require.Nil(err, "%+v", err) require.Equal(vhash, seed.Header.ValidatorsHash) err = cert.Certify(seed.Commit) assert.Nil(err, "%+v", err) // get by hash fails without match seed, err = p.GetByHash([]byte("foobar")) assert.NotNil(err) assert.True(liteErr.IsCommitNotFoundErr(err)) // storing the seed silently ignored err = p.StoreCommit(seed) assert.Nil(err, "%+v", err) }