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  }