mirror of
https://github.com/tendermint/tendermint.git
synced 2026-09-21 07:24:36 +00:00
rpc: add chunked rpc interface (#6445)
This commit is contained in:
@@ -397,6 +397,15 @@ func (c *baseRPCClient) Genesis(ctx context.Context) (*ctypes.ResultGenesis, err
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (c *baseRPCClient) GenesisChunked(ctx context.Context, id uint) (*ctypes.ResultGenesisChunk, error) {
|
||||
result := new(ctypes.ResultGenesisChunk)
|
||||
_, err := c.caller.Call(ctx, "genesis_chunked", map[string]interface{}{"chunk": id}, result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (c *baseRPCClient) Block(ctx context.Context, height *int64) (*ctypes.ResultBlock, error) {
|
||||
result := new(ctypes.ResultBlock)
|
||||
params := make(map[string]interface{})
|
||||
|
||||
@@ -94,6 +94,7 @@ type SignClient interface {
|
||||
// HistoryClient provides access to data from genesis to now in large chunks.
|
||||
type HistoryClient interface {
|
||||
Genesis(context.Context) (*ctypes.ResultGenesis, error)
|
||||
GenesisChunked(context.Context, uint) (*ctypes.ResultGenesisChunk, error)
|
||||
BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*ctypes.ResultBlockchainInfo, error)
|
||||
}
|
||||
|
||||
|
||||
@@ -151,6 +151,10 @@ func (c *Local) Genesis(ctx context.Context) (*ctypes.ResultGenesis, error) {
|
||||
return c.env.Genesis(c.ctx)
|
||||
}
|
||||
|
||||
func (c *Local) GenesisChunked(ctx context.Context, id uint) (*ctypes.ResultGenesisChunk, error) {
|
||||
return c.env.GenesisChunked(c.ctx, id)
|
||||
}
|
||||
|
||||
func (c *Local) Block(ctx context.Context, height *int64) (*ctypes.ResultBlock, error) {
|
||||
return c.env.Block(c.ctx, height)
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Code generated by mockery v2.6.0. DO NOT EDIT.
|
||||
// Code generated by mockery 2.7.4. DO NOT EDIT.
|
||||
|
||||
package mocks
|
||||
|
||||
@@ -436,6 +436,29 @@ func (_m *Client) Genesis(_a0 context.Context) (*coretypes.ResultGenesis, error)
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GenesisChunked provides a mock function with given fields: _a0, _a1
|
||||
func (_m *Client) GenesisChunked(_a0 context.Context, _a1 uint) (*coretypes.ResultGenesisChunk, error) {
|
||||
ret := _m.Called(_a0, _a1)
|
||||
|
||||
var r0 *coretypes.ResultGenesisChunk
|
||||
if rf, ok := ret.Get(0).(func(context.Context, uint) *coretypes.ResultGenesisChunk); ok {
|
||||
r0 = rf(_a0, _a1)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*coretypes.ResultGenesisChunk)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(context.Context, uint) error); ok {
|
||||
r1 = rf(_a0, _a1)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// Health provides a mock function with given fields: _a0
|
||||
func (_m *Client) Health(_a0 context.Context) (*coretypes.ResultHealth, error) {
|
||||
ret := _m.Called(_a0)
|
||||
|
||||
@@ -2,6 +2,7 @@ package client_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"math"
|
||||
"net/http"
|
||||
@@ -14,6 +15,7 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
tmjson "github.com/tendermint/tendermint/libs/json"
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||
mempl "github.com/tendermint/tendermint/mempool"
|
||||
@@ -193,6 +195,31 @@ func TestGenesisAndValidators(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestGenesisChunked(t *testing.T) {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
for _, c := range GetClients(t, NodeSuite(t)) {
|
||||
first, err := c.GenesisChunked(ctx, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
decoded := make([]string, 0, first.TotalChunks)
|
||||
for i := 0; i < first.TotalChunks; i++ {
|
||||
chunk, err := c.GenesisChunked(ctx, uint(i))
|
||||
require.NoError(t, err)
|
||||
data, err := base64.StdEncoding.DecodeString(chunk.Data)
|
||||
require.NoError(t, err)
|
||||
decoded = append(decoded, string(data))
|
||||
|
||||
}
|
||||
doc := []byte(strings.Join(decoded, ""))
|
||||
|
||||
var out types.GenesisDoc
|
||||
require.NoError(t, tmjson.Unmarshal(doc, &out),
|
||||
"first: %+v, doc: %s", first, string(doc))
|
||||
}
|
||||
}
|
||||
|
||||
func TestABCIQuery(t *testing.T) {
|
||||
for i, c := range GetClients(t, NodeSuite(t)) {
|
||||
// write something
|
||||
|
||||
Reference in New Issue
Block a user