@@ -4,6 +4,7 @@ const testing = require('taskcluster-lib-testing');
44const taskcluster = require ( 'taskcluster-client' ) ;
55const { LEVELS } = require ( 'taskcluster-lib-monitor' ) ;
66const { WorkerPool, Worker } = require ( '../src/data' ) ;
7+ const { ApiError } = require ( '../src/providers/provider' ) ;
78
89helper . secrets . mockSuite ( testing . suiteName ( ) , [ ] , function ( mock , skipping ) {
910 helper . withDb ( mock , skipping ) ;
@@ -358,6 +359,38 @@ helper.secrets.mockSuite(testing.suiteName(), [], function(mock, skipping) {
358359 Severity : LEVELS . info ,
359360 } ) ;
360361 } ) ;
362+
363+ test ( "provision loop is not running in parallel" , async function ( ) {
364+ await WorkerPool . fromApi ( {
365+ workerPoolId : 'pp/ww' ,
366+ providerId : 'testing1' ,
367+ previousProviderIds : [ 'NO-SUCH' ] ,
368+ description : '' ,
369+ created : new Date ( ) ,
370+ lastModified : new Date ( ) ,
371+ config : { } ,
372+ 373+ emailOnError : false ,
374+ providerData : { } ,
375+ } ) . create ( helper . db ) ;
376+ const provisioner = await helper . load ( 'provisioner' ) ;
377+
378+ await assert . rejects ( async ( ) => {
379+ await Promise . all ( [
380+ provisioner . provision ( ) ,
381+ provisioner . provision ( ) ,
382+ ] ) ;
383+ } , new ApiError ( 'provision loop interference' ) ) ;
384+
385+ assert . deepEqual (
386+ monitor . manager . messages . find ( msg => msg . Type === 'loop-interference' ) , {
387+ Fields : { } ,
388+ Logger : 'taskcluster.test.provisioner' ,
389+ Severity : 1 ,
390+ Type : 'loop-interference' ,
391+ } ) ;
392+ monitor . manager . reset ( ) ;
393+ } ) ;
361394 } ) ;
362395
363396 suite ( 'deprovisioning loop' , function ( ) {
0 commit comments