github.com/adoriasoft/tendermint@v0.34.0-dev1.0.20200722151356-96d84601a75a/proxy/multi_app_conn_test.go (about) 1 package proxy 2 3 import ( 4 "errors" 5 "os" 6 "os/signal" 7 "syscall" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/mock" 12 "github.com/stretchr/testify/require" 13 14 abcimocks "github.com/tendermint/tendermint/abci/client/mocks" 15 "github.com/tendermint/tendermint/proxy/mocks" 16 ) 17 18 func TestAppConns_Start_Stop(t *testing.T) { 19 quitCh := make(<-chan struct{}) 20 21 clientCreatorMock := &mocks.ClientCreator{} 22 23 clientMock := &abcimocks.Client{} 24 clientMock.On("SetLogger", mock.Anything).Return().Times(4) 25 clientMock.On("Start").Return(nil).Times(4) 26 clientMock.On("Stop").Return(nil).Times(4) 27 clientMock.On("Quit").Return(quitCh).Times(4) 28 29 clientCreatorMock.On("NewABCIClient").Return(clientMock, nil).Times(4) 30 31 appConns := NewAppConns(clientCreatorMock) 32 33 err := appConns.Start() 34 require.NoError(t, err) 35 36 time.Sleep(100 * time.Millisecond) 37 38 appConns.Stop() 39 40 clientMock.AssertExpectations(t) 41 } 42 43 // Upon failure, we call tmos.Kill 44 func TestAppConns_Failure(t *testing.T) { 45 ok := make(chan struct{}) 46 c := make(chan os.Signal, 1) 47 signal.Notify(c, syscall.SIGTERM) 48 go func() { 49 for range c { 50 close(ok) 51 } 52 }() 53 54 quitCh := make(chan struct{}) 55 var recvQuitCh <-chan struct{} // nolint:gosimple 56 recvQuitCh = quitCh 57 58 clientCreatorMock := &mocks.ClientCreator{} 59 60 clientMock := &abcimocks.Client{} 61 clientMock.On("SetLogger", mock.Anything).Return() 62 clientMock.On("Start").Return(nil) 63 clientMock.On("Stop").Return(nil) 64 65 clientMock.On("Quit").Return(recvQuitCh) 66 clientMock.On("Error").Return(errors.New("EOF")).Once() 67 68 clientCreatorMock.On("NewABCIClient").Return(clientMock, nil) 69 70 appConns := NewAppConns(clientCreatorMock) 71 72 err := appConns.Start() 73 require.NoError(t, err) 74 defer appConns.Stop() 75 76 // simulate failure 77 close(quitCh) 78 79 select { 80 case <-ok: 81 t.Log("SIGTERM successfully received") 82 case <-time.After(5 * time.Second): 83 t.Fatal("expected process to receive SIGTERM signal") 84 } 85 }