github.com/line/ostracon@v1.0.10-0.20230328032236-7f20145f065d/light/provider/http/http_test.go (about) 1 package http_test 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 13 "github.com/line/ostracon/abci/example/kvstore" 14 "github.com/line/ostracon/light/provider" 15 lighthttp "github.com/line/ostracon/light/provider/http" 16 rpcclient "github.com/line/ostracon/rpc/client" 17 rpchttp "github.com/line/ostracon/rpc/client/http" 18 rpcjson "github.com/line/ostracon/rpc/jsonrpc/client" 19 rpctest "github.com/line/ostracon/rpc/test" 20 "github.com/line/ostracon/types" 21 ) 22 23 func TestNewProvider(t *testing.T) { 24 c, err := lighthttp.New("chain-test", "192.168.0.1:26657") 25 require.NoError(t, err) 26 require.Equal(t, fmt.Sprintf("%s", c), "http{http://192.168.0.1:26657}") 27 28 c, err = lighthttp.New("chain-test", "http://153.200.0.1:26657") 29 require.NoError(t, err) 30 require.Equal(t, fmt.Sprintf("%s", c), "http{http://153.200.0.1:26657}") 31 32 c, err = lighthttp.New("chain-test", "153.200.0.1") 33 require.NoError(t, err) 34 require.Equal(t, fmt.Sprintf("%s", c), "http{http://153.200.0.1}") 35 } 36 37 func TestProvider(t *testing.T) { 38 app := kvstore.NewApplication() 39 app.RetainBlocks = 10 40 node := rpctest.StartOstracon(app) 41 42 cfg := rpctest.GetConfig() 43 defer os.RemoveAll(cfg.RootDir) 44 rpcAddr := cfg.RPC.ListenAddress 45 genDoc, err := types.GenesisDocFromFile(cfg.GenesisFile()) 46 require.NoError(t, err) 47 chainID := genDoc.ChainID 48 49 jsonClient, err := rpcjson.HTTPClientForTest(rpcAddr) 50 require.Nil(t, err) 51 c, err := rpchttp.NewWithClient(rpcAddr, "/websocket", jsonClient) 52 require.Nil(t, err) 53 54 p := lighthttp.NewWithClient(chainID, c) 55 require.NoError(t, err) 56 require.NotNil(t, p) 57 58 // let it produce some blocks 59 err = rpcclient.WaitForHeight(c, 10, nil) 60 require.NoError(t, err) 61 62 // let's get the highest block 63 lb, err := p.LightBlock(context.Background(), 0) 64 require.NoError(t, err) 65 require.NotNil(t, lb) 66 assert.True(t, lb.Height < 1000) 67 68 // let's check this is valid somehow 69 assert.Nil(t, lb.ValidateBasic(chainID)) 70 71 // historical queries now work :) 72 lower := lb.Height - 3 73 lb, err = p.LightBlock(context.Background(), lower) 74 require.NoError(t, err) 75 assert.Equal(t, lower, lb.Height) 76 77 // fetching missing heights (both future and pruned) should return appropriate errors 78 lb, err = p.LightBlock(context.Background(), 1000) 79 require.Error(t, err) 80 require.Nil(t, lb) 81 assert.Equal(t, provider.ErrHeightTooHigh, err) 82 83 _, err = p.LightBlock(context.Background(), 1) 84 require.Error(t, err) 85 require.Nil(t, lb) 86 assert.Equal(t, provider.ErrLightBlockNotFound, err) 87 88 // stop the full node and check that a no response error is returned 89 rpctest.StopOstracon(node) 90 time.Sleep(1 * time.Second) // depends on Transport.IdleConnTimeout 91 lb, err = p.LightBlock(context.Background(), lower+2) 92 // we should see a connection refused 93 require.Error(t, err) 94 require.Contains(t, err.Error(), "connection refused") 95 require.Nil(t, lb) 96 }