mirror of
https://github.com/fluencelabs/tendermint
synced 2025-05-17 00:51:20 +00:00
69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
|
package privval
|
||
|
|
||
|
import (
|
||
|
"net"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
"github.com/tendermint/tendermint/crypto/ed25519"
|
||
|
cmn "github.com/tendermint/tendermint/libs/common"
|
||
|
"github.com/tendermint/tendermint/libs/log"
|
||
|
"github.com/tendermint/tendermint/types"
|
||
|
)
|
||
|
|
||
|
// TestRemoteSignerRetryTCPOnly will test connection retry attempts over TCP. We
|
||
|
// don't need this for Unix sockets because the OS instantly knows the state of
|
||
|
// both ends of the socket connection. This basically causes the
|
||
|
// RemoteSigner.dialer() call inside RemoteSigner.connect() to return
|
||
|
// successfully immediately, putting an instant stop to any retry attempts.
|
||
|
func TestRemoteSignerRetryTCPOnly(t *testing.T) {
|
||
|
var (
|
||
|
attemptc = make(chan int)
|
||
|
retries = 2
|
||
|
)
|
||
|
|
||
|
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
go func(ln net.Listener, attemptc chan<- int) {
|
||
|
attempts := 0
|
||
|
|
||
|
for {
|
||
|
conn, err := ln.Accept()
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
err = conn.Close()
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
attempts++
|
||
|
|
||
|
if attempts == retries {
|
||
|
attemptc <- attempts
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
}(ln, attemptc)
|
||
|
|
||
|
rs := NewRemoteSigner(
|
||
|
log.TestingLogger(),
|
||
|
cmn.RandStr(12),
|
||
|
types.NewMockPV(),
|
||
|
DialTCPFn(ln.Addr().String(), testConnDeadline, ed25519.GenPrivKey()),
|
||
|
)
|
||
|
defer rs.Stop()
|
||
|
|
||
|
RemoteSignerConnDeadline(time.Millisecond)(rs)
|
||
|
RemoteSignerConnRetries(retries)(rs)
|
||
|
|
||
|
assert.Equal(t, rs.Start(), ErrDialRetryMax)
|
||
|
|
||
|
select {
|
||
|
case attempts := <-attemptc:
|
||
|
assert.Equal(t, retries, attempts)
|
||
|
case <-time.After(100 * time.Millisecond):
|
||
|
t.Error("expected remote to observe connection attempts")
|
||
|
}
|
||
|
}
|