github.com/franono/tendermint@v0.32.2-0.20200527150959-749313264ce9/lite2/provider/http/http_test.go (about)

     1  package http_test
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/franono/tendermint/abci/example/kvstore"
    12  	"github.com/franono/tendermint/lite2/provider"
    13  	litehttp "github.com/franono/tendermint/lite2/provider/http"
    14  	rpcclient "github.com/franono/tendermint/rpc/client"
    15  	rpchttp "github.com/franono/tendermint/rpc/client/http"
    16  	rpctest "github.com/franono/tendermint/rpc/test"
    17  	"github.com/franono/tendermint/types"
    18  )
    19  
    20  func TestNewProvider(t *testing.T) {
    21  	c, err := litehttp.New("chain-test", "192.168.0.1:26657")
    22  	require.NoError(t, err)
    23  	require.Equal(t, fmt.Sprintf("%s", c), "http{http://192.168.0.1:26657}")
    24  
    25  	c, err = litehttp.New("chain-test", "http://153.200.0.1:26657")
    26  	require.NoError(t, err)
    27  	require.Equal(t, fmt.Sprintf("%s", c), "http{http://153.200.0.1:26657}")
    28  
    29  	c, err = litehttp.New("chain-test", "153.200.0.1")
    30  	require.NoError(t, err)
    31  	require.Equal(t, fmt.Sprintf("%s", c), "http{http://153.200.0.1}")
    32  }
    33  
    34  func TestMain(m *testing.M) {
    35  	app := kvstore.NewApplication()
    36  	app.RetainBlocks = 9
    37  	node := rpctest.StartTendermint(app)
    38  
    39  	code := m.Run()
    40  
    41  	rpctest.StopTendermint(node)
    42  	os.Exit(code)
    43  }
    44  
    45  func TestProvider(t *testing.T) {
    46  	cfg := rpctest.GetConfig()
    47  	defer os.RemoveAll(cfg.RootDir)
    48  	rpcAddr := cfg.RPC.ListenAddress
    49  	genDoc, err := types.GenesisDocFromFile(cfg.GenesisFile())
    50  	if err != nil {
    51  		panic(err)
    52  	}
    53  	chainID := genDoc.ChainID
    54  	t.Log("chainID:", chainID)
    55  
    56  	c, err := rpchttp.New(rpcAddr, "/websocket")
    57  	require.Nil(t, err)
    58  
    59  	p := litehttp.NewWithClient(chainID, c)
    60  	require.NoError(t, err)
    61  	require.NotNil(t, p)
    62  
    63  	// let it produce some blocks
    64  	err = rpcclient.WaitForHeight(c, 10, nil)
    65  	require.NoError(t, err)
    66  
    67  	// let's get the highest block
    68  	sh, err := p.SignedHeader(0)
    69  
    70  	require.NoError(t, err)
    71  	assert.True(t, sh.Height < 1000)
    72  
    73  	// let's check this is valid somehow
    74  	assert.Nil(t, sh.ValidateBasic(chainID))
    75  
    76  	// historical queries now work :)
    77  	lower := sh.Height - 3
    78  	sh, err = p.SignedHeader(lower)
    79  	require.NoError(t, err)
    80  	assert.Equal(t, lower, sh.Height)
    81  
    82  	// fetching missing heights (both future and pruned) should return appropriate errors
    83  	_, err = p.SignedHeader(1000)
    84  	require.Error(t, err)
    85  	assert.Equal(t, provider.ErrSignedHeaderNotFound, err)
    86  
    87  	_, err = p.ValidatorSet(1000)
    88  	require.Error(t, err)
    89  	assert.Equal(t, provider.ErrValidatorSetNotFound, err)
    90  
    91  	_, err = p.SignedHeader(1)
    92  	require.Error(t, err)
    93  	assert.Equal(t, provider.ErrSignedHeaderNotFound, err)
    94  
    95  	_, err = p.ValidatorSet(1)
    96  	require.Error(t, err)
    97  	assert.Equal(t, provider.ErrValidatorSetNotFound, err)
    98  }