|
|
- package proxy
-
- import (
- "errors"
- "os"
- "os/signal"
- "syscall"
- "testing"
- "time"
-
- "github.com/stretchr/testify/mock"
- "github.com/stretchr/testify/require"
-
- abcimocks "github.com/tendermint/tendermint/abci/client/mocks"
- "github.com/tendermint/tendermint/proxy/mocks"
- )
-
- func TestAppConns_Start_Stop(t *testing.T) {
- quitCh := make(<-chan struct{})
-
- clientCreatorMock := &mocks.ClientCreator{}
-
- clientMock := &abcimocks.Client{}
- clientMock.On("SetLogger", mock.Anything).Return().Times(4)
- clientMock.On("Start").Return(nil).Times(4)
- clientMock.On("Stop").Return(nil).Times(4)
- clientMock.On("Quit").Return(quitCh).Times(4)
-
- clientCreatorMock.On("NewABCIClient").Return(clientMock, nil).Times(4)
-
- appConns := NewAppConns(clientCreatorMock)
-
- err := appConns.Start()
- require.NoError(t, err)
-
- time.Sleep(100 * time.Millisecond)
-
- appConns.Stop()
-
- clientMock.AssertExpectations(t)
- }
-
- // Upon failure, we call tmos.Kill
- func TestAppConns_Failure(t *testing.T) {
- ok := make(chan struct{})
- c := make(chan os.Signal, 1)
- signal.Notify(c, syscall.SIGTERM)
- go func() {
- for range c {
- close(ok)
- }
- }()
-
- quitCh := make(chan struct{})
- var recvQuitCh <-chan struct{} // nolint:gosimple
- recvQuitCh = quitCh
-
- clientCreatorMock := &mocks.ClientCreator{}
-
- clientMock := &abcimocks.Client{}
- clientMock.On("SetLogger", mock.Anything).Return()
- clientMock.On("Start").Return(nil)
- clientMock.On("Stop").Return(nil)
-
- clientMock.On("Quit").Return(recvQuitCh)
- clientMock.On("Error").Return(errors.New("EOF")).Once()
-
- clientCreatorMock.On("NewABCIClient").Return(clientMock, nil)
-
- appConns := NewAppConns(clientCreatorMock)
-
- err := appConns.Start()
- require.NoError(t, err)
- defer appConns.Stop()
-
- // simulate failure
- close(quitCh)
-
- select {
- case <-ok:
- t.Log("SIGTERM successfully received")
- case <-time.After(5 * time.Second):
- t.Fatal("expected process to receive SIGTERM signal")
- }
- }
|