github.com/justinjmoses/evergreen@v0.0.0-20170530173719-1d50e381ff0d/agent/comm/heartbeat_test.go (about) 1 package comm 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/mongodb/grip/send" 8 "github.com/mongodb/grip/slogger" 9 . "github.com/smartystreets/goconvey/convey" 10 ) 11 12 func TestHeartbeat(t *testing.T) { 13 14 Convey("With a simple heartbeat ticker", t, func() { 15 sigChan := make(chan Signal) 16 mockCommunicator := &MockCommunicator{} 17 hbTicker := &HeartbeatTicker{ 18 MaxFailedHeartbeats: 10, 19 Interval: 10 * time.Millisecond, 20 SignalChan: sigChan, 21 TaskCommunicator: mockCommunicator, 22 Logger: &slogger.Logger{ 23 Appenders: []send.Sender{slogger.StdOutAppender()}, 24 }, 25 } 26 27 Convey("abort signals detected by heartbeat are sent on sigChan", func() { 28 mockCommunicator.setShouldFail(false) 29 hbTicker.StartHeartbeating() 30 go func() { 31 time.Sleep(2 * time.Second) 32 mockCommunicator.setAbort(true) 33 }() 34 signal := <-sigChan 35 So(signal, ShouldEqual, AbortedByUser) 36 }) 37 38 Convey("failed heartbeats must signal failure on sigChan", func() { 39 mockCommunicator.setAbort(false) 40 mockCommunicator.setShouldFail(true) 41 hbTicker.StartHeartbeating() 42 signal := <-sigChan 43 So(signal, ShouldEqual, HeartbeatMaxFailed) 44 }) 45 46 }) 47 48 }