- 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"
- )
-
- // TestSignerRemoteRetryTCPOnly 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
- // SignerServiceEndpoint.dialer() call inside SignerServiceEndpoint.connect() to return
- // successfully immediately, putting an instant stop to any retry attempts.
- func TestSignerRemoteRetryTCPOnly(t *testing.T) {
- var (
- attemptCh = make(chan int)
- retries = 2
- )
-
- ln, err := net.Listen("tcp", "127.0.0.1:0")
- require.NoError(t, err)
-
- go func(ln net.Listener, attemptCh chan<- int) {
- attempts := 0
-
- for {
- conn, err := ln.Accept()
- require.NoError(t, err)
-
- err = conn.Close()
- require.NoError(t, err)
-
- attempts++
-
- if attempts == retries {
- attemptCh <- attempts
- break
- }
- }
- }(ln, attemptCh)
-
- serviceEndpoint := NewSignerServiceEndpoint(
- log.TestingLogger(),
- cmn.RandStr(12),
- types.NewMockPV(),
- DialTCPFn(ln.Addr().String(), testTimeoutReadWrite, ed25519.GenPrivKey()),
- )
- defer serviceEndpoint.Stop()
-
- SignerServiceEndpointTimeoutReadWrite(time.Millisecond)(serviceEndpoint)
- SignerServiceEndpointConnRetries(retries)(serviceEndpoint)
-
- assert.Equal(t, serviceEndpoint.Start(), ErrDialRetryMax)
-
- select {
- case attempts := <-attemptCh:
- assert.Equal(t, retries, attempts)
- case <-time.After(100 * time.Millisecond):
- t.Error("expected remote to observe connection attempts")
- }
- }
|