mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-28 16:22:15 +00:00
rpc: Test Validator retrevial timeout
This commit is contained in:
parent
1bd5476854
commit
c82c60df11
@ -104,8 +104,13 @@ func Status() (*ctypes.ResultStatus, error) {
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const consensusTimeout = time.Second
|
||||||
|
|
||||||
func validatorAtHeight(h int64) *types.Validator {
|
func validatorAtHeight(h int64) *types.Validator {
|
||||||
lastBlockHeight, vals := getValidatorsWithTimeout(1 * time.Second)
|
lastBlockHeight, vals := getValidatorsWithTimeout(
|
||||||
|
consensusState,
|
||||||
|
consensusTimeout,
|
||||||
|
)
|
||||||
|
|
||||||
if lastBlockHeight == -1 {
|
if lastBlockHeight == -1 {
|
||||||
return nil
|
return nil
|
||||||
@ -136,15 +141,22 @@ func validatorAtHeight(h int64) *types.Validator {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type validatorRetriever interface {
|
||||||
|
GetValidators() (int64, []*types.Validator)
|
||||||
|
}
|
||||||
|
|
||||||
// NOTE: Consensus might halt, but we still need to process RPC requests (at
|
// NOTE: Consensus might halt, but we still need to process RPC requests (at
|
||||||
// least for endpoints whole output does not depend on consensus state).
|
// least for endpoints whole output does not depend on consensus state).
|
||||||
func getValidatorsWithTimeout(t time.Duration) (int64, []*types.Validator) {
|
func getValidatorsWithTimeout(
|
||||||
|
vr validatorRetriever,
|
||||||
|
t time.Duration,
|
||||||
|
) (int64, []*types.Validator) {
|
||||||
resultCh := make(chan struct {
|
resultCh := make(chan struct {
|
||||||
lastBlockHeight int64
|
lastBlockHeight int64
|
||||||
vals []*types.Validator
|
vals []*types.Validator
|
||||||
})
|
})
|
||||||
go func() {
|
go func() {
|
||||||
h, v := consensusState.GetValidators()
|
h, v := vr.GetValidators()
|
||||||
resultCh <- struct {
|
resultCh <- struct {
|
||||||
lastBlockHeight int64
|
lastBlockHeight int64
|
||||||
vals []*types.Validator
|
vals []*types.Validator
|
||||||
|
39
rpc/core/status_test.go
Normal file
39
rpc/core/status_test.go
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package core
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/tendermint/tendermint/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGetValidatorsWithTimeout(t *testing.T) {
|
||||||
|
height, vs := getValidatorsWithTimeout(
|
||||||
|
testValidatorReceiver{},
|
||||||
|
time.Millisecond,
|
||||||
|
)
|
||||||
|
|
||||||
|
if height != -1 {
|
||||||
|
t.Errorf("expected negative height")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(vs) != 0 {
|
||||||
|
t.Errorf("expected no validators")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type testValidatorReceiver struct{}
|
||||||
|
|
||||||
|
func (tr testValidatorReceiver) GetValidators() (int64, []*types.Validator) {
|
||||||
|
vs := []*types.Validator{}
|
||||||
|
|
||||||
|
for i := 0; i < 3; i++ {
|
||||||
|
v, _ := types.RandValidator(true, 10)
|
||||||
|
|
||||||
|
vs = append(vs, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(time.Millisecond)
|
||||||
|
|
||||||
|
return 10, vs
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user