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  }