github.com/justinjmoses/evergreen@v0.0.0-20170530173719-1d50e381ff0d/monitor/task_flagging_test.go (about) 1 package monitor 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/evergreen-ci/evergreen" 8 "github.com/evergreen-ci/evergreen/db" 9 "github.com/evergreen-ci/evergreen/model/task" 10 "github.com/evergreen-ci/evergreen/testutil" 11 . "github.com/smartystreets/goconvey/convey" 12 ) 13 14 func TestFlaggingTimedOutHeartbeats(t *testing.T) { 15 16 testConfig := testutil.TestConfig() 17 18 db.SetGlobalSessionProvider(db.SessionFactoryFromConfig(testConfig)) 19 20 Convey("When flagging tasks whose heartbeat has timed out", t, func() { 21 22 // reset the db 23 testutil.HandleTestingErr(db.ClearCollections(task.Collection), 24 t, "error clearing tasks collection") 25 26 Convey("tasks that are not running should be ignored", func() { 27 28 task1 := &task.Task{ 29 Id: "t1", 30 Status: evergreen.TaskUndispatched, 31 LastHeartbeat: time.Now().Add(-time.Minute * 10), 32 } 33 testutil.HandleTestingErr(task1.Insert(), t, "error inserting task") 34 35 task2 := &task.Task{ 36 Id: "t2", 37 Status: evergreen.TaskSucceeded, 38 LastHeartbeat: time.Now().Add(-time.Minute * 10), 39 } 40 testutil.HandleTestingErr(task2.Insert(), t, "error inserting task") 41 42 timedOut, err := flagTimedOutHeartbeats() 43 So(err, ShouldBeNil) 44 So(len(timedOut), ShouldEqual, 0) 45 46 }) 47 48 Convey("tasks whose heartbeat has not timed out should be"+ 49 " ignored", func() { 50 51 task1 := &task.Task{ 52 Id: "t1", 53 Status: evergreen.TaskStarted, 54 LastHeartbeat: time.Now().Add(-time.Minute * 5), 55 } 56 testutil.HandleTestingErr(task1.Insert(), t, "error inserting task") 57 58 timedOut, err := flagTimedOutHeartbeats() 59 So(err, ShouldBeNil) 60 So(len(timedOut), ShouldEqual, 0) 61 62 }) 63 64 Convey("tasks whose heartbeat has timed out should be"+ 65 " picked up", func() { 66 67 task1 := &task.Task{ 68 Id: "t1", 69 Status: evergreen.TaskStarted, 70 LastHeartbeat: time.Now().Add(-time.Minute * 10), 71 } 72 testutil.HandleTestingErr(task1.Insert(), t, "error inserting task") 73 74 task2 := &task.Task{ 75 Id: "t2", 76 Status: evergreen.TaskDispatched, 77 LastHeartbeat: time.Now().Add(-time.Minute * 10), 78 } 79 testutil.HandleTestingErr(task2.Insert(), t, "error inserting task") 80 81 timedOut, err := flagTimedOutHeartbeats() 82 So(err, ShouldBeNil) 83 So(len(timedOut), ShouldEqual, 2) 84 So(timedOut[0].reason, ShouldEqual, HeartbeatTimeout) 85 So(timedOut[1].reason, ShouldEqual, HeartbeatTimeout) 86 87 }) 88 89 }) 90 }