github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/model/task_queue_test.go (about)

     1  package model
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/evergreen-ci/evergreen/db"
     8  	"github.com/evergreen-ci/evergreen/testutil"
     9  	"github.com/mongodb/grip"
    10  	. "github.com/smartystreets/goconvey/convey"
    11  )
    12  
    13  var (
    14  	_                 fmt.Stringer = nil
    15  	taskQueueTestConf              = testutil.TestConfig()
    16  )
    17  
    18  func init() {
    19  	db.SetGlobalSessionProvider(db.SessionFactoryFromConfig(taskQueueTestConf))
    20  	grip.Warning(grip.SetSender(testutil.SetupTestSender("/tmp/task_queue_test.log")))
    21  }
    22  
    23  func TestDequeueTask(t *testing.T) {
    24  
    25  	var taskIds []string
    26  	var distroId string
    27  	var taskQueue *TaskQueue
    28  
    29  	Convey("When attempting to pull a task from a task queue", t, func() {
    30  
    31  		taskIds = []string{"t1", "t2", "t3"}
    32  		distroId = "d1"
    33  		taskQueue = &TaskQueue{
    34  			Distro: distroId,
    35  			Queue:  []TaskQueueItem{},
    36  		}
    37  
    38  		So(db.Clear(TaskQueuesCollection), ShouldBeNil)
    39  
    40  		Convey("if the task queue is empty, an error should be thrown", func() {
    41  			So(taskQueue.Save(), ShouldBeNil)
    42  			So(taskQueue.DequeueTask(taskIds[0]), ShouldNotBeNil)
    43  		})
    44  
    45  		Convey("if the task is not present in the queue, an error should be"+
    46  			" thrown", func() {
    47  			taskQueue.Queue = append(taskQueue.Queue,
    48  				TaskQueueItem{Id: taskIds[1]})
    49  			So(taskQueue.Save(), ShouldBeNil)
    50  			So(taskQueue.DequeueTask(taskIds[0]), ShouldNotBeNil)
    51  		})
    52  
    53  		Convey("if the task is present in the queue, it should be removed"+
    54  			" from the in-memory and db versions of the queue", func() {
    55  			taskQueue.Queue = []TaskQueueItem{
    56  				{Id: taskIds[0]},
    57  				{Id: taskIds[1]},
    58  				{Id: taskIds[2]},
    59  			}
    60  			So(taskQueue.Save(), ShouldBeNil)
    61  			So(taskQueue.DequeueTask(taskIds[1]), ShouldBeNil)
    62  
    63  			// make sure the queue was updated in memory
    64  			So(taskQueue.Length(), ShouldEqual, 2)
    65  			So(taskQueue.Queue[0].Id, ShouldEqual, taskIds[0])
    66  			So(taskQueue.Queue[1].Id, ShouldEqual, taskIds[2])
    67  
    68  			// make sure the db representation was updated
    69  			taskQueue, err := FindTaskQueueForDistro(distroId)
    70  			So(err, ShouldBeNil)
    71  			So(taskQueue.Length(), ShouldEqual, 2)
    72  			So(taskQueue.Queue[0].Id, ShouldEqual, taskIds[0])
    73  			So(taskQueue.Queue[1].Id, ShouldEqual, taskIds[2])
    74  
    75  		})
    76  
    77  	})
    78  }