// updateMakespans func updateMakespans(b *build.Build) error { // find all tasks associated with the build tasks, err := task.Find(task.ByBuildId(b.Id)) if err != nil { return err } depPath := FindPredictedMakespan(tasks) return b.UpdateMakespans(depPath.TotalTime, CalculateActualMakespan(tasks)) }
//AddTasksToBuild creates the tasks for the given build of a project func AddTasksToBuild(b *build.Build, project *Project, v *version.Version, taskNames []string) (*build.Build, error) { // find the build variant for this project/build buildVariant := project.FindBuildVariant(b.BuildVariant) if buildVariant == nil { return nil, fmt.Errorf("Could not find build %v in %v project file", b.BuildVariant, project.Identifier) } // create the new tasks for the build tasks, err := createTasksForBuild( project, buildVariant, b, v, BuildTaskIdTable(project, v), taskNames) if err != nil { return nil, fmt.Errorf("error creating tasks for build %v: %v", b.Id, err) } // insert the tasks into the db for _, task := range tasks { evergreen.Logger.Logf(slogger.INFO, "Creating task “%v”", task.DisplayName) if err := task.Insert(); err != nil { return nil, fmt.Errorf("error inserting task %v: %v", task.Id, err) } } // create task caches for all of the tasks, and add them into the build for _, t := range tasks { b.Tasks = append(b.Tasks, cacheFromTask(t)) } // update the build to hold the new tasks if err = build.SetTasksCache(b.Id, b.Tasks); err != nil { return nil, err } return b, nil }
func TestMarkAsDispatched(t *testing.T) { var ( taskId string hostId string buildId string task *Task myHost *host.Host b *build.Build ) Convey("With a task", t, func() { taskId = "t1" hostId = "h1" buildId = "b1" task = &Task{ Id: taskId, BuildId: buildId, } myHost = &host.Host{ Id: hostId, } b = &build.Build{ Id: buildId, Tasks: []build.TaskCache{ {Id: taskId}, }, } testutil.HandleTestingErr( db.ClearCollections(TasksCollection, build.Collection, host.Collection), t, "Error clearing test collections") So(task.Insert(), ShouldBeNil) So(myHost.Insert(), ShouldBeNil) So(b.Insert(), ShouldBeNil) Convey("when marking the task as dispatched, the fields for"+ " the task, the host it is on, and the build it is a part of"+ " should be set to reflect this", func() { // mark the task as dispatched So(task.MarkAsDispatched(myHost, time.Now()), ShouldBeNil) // make sure the task's fields were updated, both in memory and // in the db So(task.DispatchTime, ShouldNotResemble, time.Unix(0, 0)) So(task.Status, ShouldEqual, evergreen.TaskDispatched) So(task.HostId, ShouldEqual, myHost.Id) So(task.LastHeartbeat, ShouldResemble, task.DispatchTime) task, err := FindTask(taskId) So(err, ShouldBeNil) So(task.DispatchTime, ShouldNotResemble, time.Unix(0, 0)) So(task.Status, ShouldEqual, evergreen.TaskDispatched) So(task.HostId, ShouldEqual, myHost.Id) So(task.LastHeartbeat, ShouldResemble, task.DispatchTime) // make sure the build's fields were updated in the db b, err = build.FindOne(build.ById(buildId)) So(err, ShouldBeNil) So(b.Tasks[0].Status, ShouldEqual, evergreen.TaskDispatched) }) }) }