165 lines
3.9 KiB
Go
165 lines
3.9 KiB
Go
package types
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
crypto "github.com/tendermint/go-crypto"
|
|
"github.com/tendermint/tmlibs/log"
|
|
|
|
"github.com/tendermint/tendermint/types"
|
|
)
|
|
|
|
func TestSocketClientAddress(t *testing.T) {
|
|
var (
|
|
assert, require = assert.New(t), require.New(t)
|
|
chainID = "test-chain-secret"
|
|
sc, pvss = testSetupSocketPair(t, chainID)
|
|
)
|
|
defer sc.Stop()
|
|
defer pvss.Stop()
|
|
|
|
serverAddr, err := pvss.privVal.Address()
|
|
require.NoError(err)
|
|
|
|
clientAddr, err := sc.Address()
|
|
require.NoError(err)
|
|
|
|
assert.Equal(serverAddr, clientAddr)
|
|
|
|
// TODO(xla): Remove when PrivValidator2 replaced PrivValidator.
|
|
assert.Equal(serverAddr, sc.GetAddress())
|
|
|
|
}
|
|
|
|
func TestSocketClientPubKey(t *testing.T) {
|
|
var (
|
|
assert, require = assert.New(t), require.New(t)
|
|
chainID = "test-chain-secret"
|
|
sc, pvss = testSetupSocketPair(t, chainID)
|
|
)
|
|
defer sc.Stop()
|
|
defer pvss.Stop()
|
|
|
|
clientKey, err := sc.PubKey()
|
|
require.NoError(err)
|
|
|
|
privKey, err := pvss.privVal.PubKey()
|
|
require.NoError(err)
|
|
|
|
assert.Equal(privKey, clientKey)
|
|
|
|
// TODO(xla): Remove when PrivValidator2 replaced PrivValidator.
|
|
assert.Equal(privKey, sc.GetPubKey())
|
|
}
|
|
|
|
func TestSocketClientProposal(t *testing.T) {
|
|
var (
|
|
assert, require = assert.New(t), require.New(t)
|
|
chainID = "test-chain-secret"
|
|
sc, pvss = testSetupSocketPair(t, chainID)
|
|
|
|
ts = time.Now()
|
|
privProposal = &types.Proposal{Timestamp: ts}
|
|
clientProposal = &types.Proposal{Timestamp: ts}
|
|
)
|
|
defer sc.Stop()
|
|
defer pvss.Stop()
|
|
|
|
require.NoError(pvss.privVal.SignProposal(chainID, privProposal))
|
|
require.NoError(sc.SignProposal(chainID, clientProposal))
|
|
assert.Equal(privProposal.Signature, clientProposal.Signature)
|
|
}
|
|
|
|
func TestSocketClientVote(t *testing.T) {
|
|
var (
|
|
assert, require = assert.New(t), require.New(t)
|
|
chainID = "test-chain-secret"
|
|
sc, pvss = testSetupSocketPair(t, chainID)
|
|
|
|
ts = time.Now()
|
|
vType = types.VoteTypePrecommit
|
|
want = &types.Vote{Timestamp: ts, Type: vType}
|
|
have = &types.Vote{Timestamp: ts, Type: vType}
|
|
)
|
|
defer sc.Stop()
|
|
defer pvss.Stop()
|
|
|
|
require.NoError(pvss.privVal.SignVote(chainID, want))
|
|
require.NoError(sc.SignVote(chainID, have))
|
|
assert.Equal(want.Signature, have.Signature)
|
|
}
|
|
|
|
func TestSocketClientHeartbeat(t *testing.T) {
|
|
var (
|
|
assert, require = assert.New(t), require.New(t)
|
|
chainID = "test-chain-secret"
|
|
sc, pvss = testSetupSocketPair(t, chainID)
|
|
|
|
want = &types.Heartbeat{}
|
|
have = &types.Heartbeat{}
|
|
)
|
|
defer sc.Stop()
|
|
defer pvss.Stop()
|
|
|
|
require.NoError(pvss.privVal.SignHeartbeat(chainID, want))
|
|
require.NoError(sc.SignHeartbeat(chainID, have))
|
|
assert.Equal(want.Signature, have.Signature)
|
|
}
|
|
|
|
func TestSocketClientConnectRetryMax(t *testing.T) {
|
|
var (
|
|
assert, _ = assert.New(t), require.New(t)
|
|
logger = log.TestingLogger()
|
|
clientPrivKey = crypto.GenPrivKeyEd25519()
|
|
sc = NewSocketClient(
|
|
logger,
|
|
"127.0.0.1:0",
|
|
&clientPrivKey,
|
|
)
|
|
)
|
|
defer sc.Stop()
|
|
|
|
SocketClientTimeout(time.Millisecond)(sc)
|
|
|
|
assert.EqualError(sc.Start(), ErrDialRetryMax.Error())
|
|
}
|
|
|
|
func testSetupSocketPair(t *testing.T, chainID string) (*socketClient, *PrivValidatorSocketServer) {
|
|
var (
|
|
assert, require = assert.New(t), require.New(t)
|
|
logger = log.TestingLogger()
|
|
signer = types.GenSigner()
|
|
clientPrivKey = crypto.GenPrivKeyEd25519()
|
|
serverPrivKey = crypto.GenPrivKeyEd25519()
|
|
privVal = NewTestPrivValidator(signer)
|
|
pvss = NewPrivValidatorSocketServer(
|
|
logger,
|
|
chainID,
|
|
"127.0.0.1:0",
|
|
1,
|
|
privVal,
|
|
&serverPrivKey,
|
|
)
|
|
)
|
|
|
|
err := pvss.Start()
|
|
require.NoError(err)
|
|
assert.True(pvss.IsRunning())
|
|
|
|
sc := NewSocketClient(
|
|
logger,
|
|
pvss.listener.Addr().String(),
|
|
&clientPrivKey,
|
|
)
|
|
|
|
err = sc.Start()
|
|
require.NoError(err)
|
|
assert.True(sc.IsRunning())
|
|
|
|
return sc, pvss
|
|
}
|