@@ -268,13 +268,13 @@ func testGetWorkflowJobAsRegularUser(t *testing.T, api *API, router *Router, jwt
268268
269269 jobs := []sdk.WorkflowNodeJobRun {}
270270 require .NoError (t , json .Unmarshal (rec .Body .Bytes (), & jobs ))
271- assert .True (t , len (jobs ) >= 1 )
271+ require .True (t , len (jobs ) >= 1 )
272272
273273 if t .Failed () {
274274 t .FailNow ()
275275 }
276276
277- ctx .job = & jobs [0 ]
277+ ctx .job = & jobs [len ( jobs ) - 1 ]
278278}
279279
280280func testGetWorkflowJobAsWorker (t * testing.T , api * API , router * Router , ctx * testRunWorkflowCtx ) {
@@ -290,7 +290,7 @@ func testGetWorkflowJobAsWorker(t *testing.T, api *API, router *Router, ctx *tes
290290
291291 jobs := []sdk.WorkflowNodeJobRun {}
292292 require .NoError (t , json .Unmarshal (rec .Body .Bytes (), & jobs ))
293- assert .Len (t , jobs , 1 )
293+ require .Len (t , jobs , 1 )
294294
295295 if t .Failed () {
296296 t .FailNow ()
@@ -312,7 +312,7 @@ func testGetWorkflowJobAsHatchery(t *testing.T, api *API, router *Router, ctx *t
312312
313313 jobs := []sdk.WorkflowNodeJobRun {}
314314 require .NoError (t , json .Unmarshal (rec .Body .Bytes (), & jobs ))
315- assert .Len (t , jobs , 1 )
315+ require .Len (t , jobs , 1 )
316316
317317 if t .Failed () {
318318 t .FailNow ()
@@ -327,7 +327,11 @@ func testRegisterWorker(t *testing.T, api *API, router *Router, ctx *testRunWork
327327 t .Fatalf ("Error getting group: %+v" , err )
328328 }
329329 model := LoadOrCreateWorkerModel (t , api , g .ID , "Test1" )
330- w , workerJWT := RegisterWorker (t , api , g .ID , model .Name )
330+ var jobID int64
331+ if ctx .job != nil {
332+ jobID = ctx .job .ID
333+ }
334+ w , workerJWT := RegisterWorker (t , api , g .ID , model .Name , jobID , jobID == 0 )
331335 ctx .workerToken = workerJWT
332336 ctx .worker = w
333337 ctx .model = model
@@ -340,17 +344,31 @@ func testRegisterHatchery(t *testing.T, api *API, router *Router, ctx *testRunWo
340344}
341345
342346func TestGetWorkflowJobQueueHandler (t * testing.T ) {
343- api , _ , router , end := newTestAPI (t )
347+ api , db , router , end := newTestAPI (t )
344348 defer end ()
345349
350+ // delete all existing workers
351+ workers , err := worker .LoadAll (context .TODO (), db )
352+ test .NoError (t , err )
353+ for _ , w := range workers {
354+ worker .Delete (db , w .ID )
355+ }
356+
357+ // remove all jobs in queue
358+ filterClean := workflow .NewQueueFilter ()
359+ nrj , _ := workflow .LoadNodeJobRunQueue (context .TODO (), db , api .Cache , filterClean )
360+ for _ , j := range nrj {
361+ _ = workflow .DeleteNodeJobRuns (db , j .WorkflowNodeRunID )
362+ }
363+
346364 _ , jwt := assets .InsertAdminUser (t , api .mustDB ())
347365 t .Log ("checkin as a user" )
348366
349367 ctx := testRunWorkflow (t , api , router )
350368 testGetWorkflowJobAsRegularUser (t , api , router , jwt , & ctx )
351369 assert .NotNil (t , ctx .job )
352370
353- t .Log ("checkin as a worker" )
371+ t .Logf ("checkin as a worker jobId:%d" , ctx . job . ID )
354372
355373 testGetWorkflowJobAsWorker (t , api , router , & ctx )
356374 assert .NotNil (t , ctx .job )
@@ -459,6 +477,46 @@ func Test_postTakeWorkflowJobHandler(t *testing.T) {
459477 assert .NotEmpty (t , run .HatcheryName )
460478}
461479
480+ func Test_postTakeWorkflowInvalidJobHandler (t * testing.T ) {
481+ api , _ , router , end := newTestAPI (t )
482+ defer end ()
483+ ctx := testRunWorkflow (t , api , router )
484+ testGetWorkflowJobAsWorker (t , api , router , & ctx )
485+ require .NotNil (t , ctx .job )
486+
487+ //Prepare request
488+ vars := map [string ]string {
489+ "key" : ctx .project .Key ,
490+ "permWorkflowName" : ctx .workflow .Name ,
491+ "id" : fmt .Sprintf ("%d" , ctx .job .ID + 1 ), // invalid job
492+ }
493+
494+ //Register the worker
495+ testRegisterWorker (t , api , router , & ctx )
496+
497+ uri := router .GetRoute ("POST" , api .postTakeWorkflowJobHandler , vars )
498+ require .NotEmpty (t , uri )
499+
500+ //this call must failed, we try to take a jobID not reserved at worker's registration
501+ req := assets .NewJWTAuthentifiedRequest (t , ctx .workerToken , "POST" , uri , nil )
502+ rec := httptest .NewRecorder ()
503+ router .Mux .ServeHTTP (rec , req )
504+ require .Equal (t , 403 , rec .Code )
505+
506+ //This must be ok, take the jobID reserved
507+ vars2 := map [string ]string {
508+ "key" : ctx .project .Key ,
509+ "permWorkflowName" : ctx .workflow .Name ,
510+ "id" : fmt .Sprintf ("%d" , ctx .job .ID ),
511+ }
512+ uri2 := router .GetRoute ("POST" , api .postTakeWorkflowJobHandler , vars2 )
513+ require .NotEmpty (t , uri2 )
514+ req2 := assets .NewJWTAuthentifiedRequest (t , ctx .workerToken , "POST" , uri2 , nil )
515+ rec2 := httptest .NewRecorder ()
516+ router .Mux .ServeHTTP (rec2 , req2 )
517+ require .Equal (t , 200 , rec2 .Code )
518+ }
519+
462520func Test_postBookWorkflowJobHandler (t * testing.T ) {
463521 api , _ , router , end := newTestAPI (t )
464522 defer end ()
0 commit comments