22
33import  com .cloudbees .hudson .plugins .folder .Folder ;
44import  hudson .model .FreeStyleProject ;
5- import  hudson .model .Queue ;
65import  hudson .slaves .DumbSlave ;
76import  hudson .slaves .RetentionStrategy ;
87import  net .sf .json .JSONObject ;
8+ import  org .jenkinsci .plugins .workflow .job .WorkflowJob ;
9+ import  org .jenkinsci .plugins .workflow .support .steps .ExecutorStepExecution ;
910import  org .junit .Rule ;
1011import  org .junit .Test ;
1112import  org .jvnet .hudson .test .JenkinsRule ;
13+ import  org .mockito .Mock ;
14+ import  org .mockito .junit .MockitoJUnit ;
15+ import  org .mockito .junit .MockitoRule ;
1216
1317import  static  org .junit .Assert .assertNotNull ;
1418import  static  org .junit .Assert .assertNull ;
19+ import  static  org .mockito .Mockito .when ;
1520
1621public  class  KubernetesQueueTaskDispatcherTest  {
1722
1823    @ Rule 
1924    public  JenkinsRule  jenkins  = new  JenkinsRule ();
2025
26+     @ Rule 
27+     public  MockitoRule  mockitoRule  = MockitoJUnit .rule ();
2128
22-     @ Test 
23-     public  void  checkRestrictedTwoClouds () throws  Exception  {
24- 
25-         Folder  folder1  = new  Folder (jenkins .jenkins , "A" );
26-         Folder  folder2  = new  Folder (jenkins .jenkins , "B" );
27- 
28-         FreeStyleProject  project1  = folder1 .createProject (FreeStyleProject .class , "buildJob" );
29-         FreeStyleProject  project2  = folder2 .createProject (FreeStyleProject .class , "buildJob" );
29+     @ Mock 
30+     private  ExecutorStepExecution .PlaceholderTask  task ;
3031
31-         jenkins .jenkins .add (folder1 , "A" );
32-         jenkins .jenkins .add (folder2 , "B" );
32+     private  Folder  folderA ;
33+     private  Folder  folderB ;
34+     private  KubernetesCloud  cloudA ;
35+     private  KubernetesCloud  cloudB ;
36+     private  KubernetesSlave  slaveA ;
37+     private  KubernetesSlave  slaveB ;
3338
34-         KubernetesCloud  cloud1  = new  KubernetesCloud ("A" );
35-         cloud1 .setUsageRestricted (true );
39+     public  void  setUpTwoClouds () throws  Exception  {
40+         folderA  = new  Folder (jenkins .jenkins , "A" );
41+         folderB  = new  Folder (jenkins .jenkins , "B" );
42+         jenkins .jenkins .add (folderA , "Folder A" );
43+         jenkins .jenkins .add (folderB , "Folder B" );
3644
37-         KubernetesCloud   cloud2   = new  KubernetesCloud ("B " );
38-         cloud2 .setUsageRestricted (true );
45+         cloudA   = new  KubernetesCloud ("A " );
46+         cloudA .setUsageRestricted (true );
3947
48+         cloudB  = new  KubernetesCloud ("B" );
49+         cloudB .setUsageRestricted (true );
4050
41-         jenkins .jenkins .clouds .add (cloud1 );
42-         jenkins .jenkins .clouds .add (cloud2 );
51+         jenkins .jenkins .clouds .add (cloudA );
52+         jenkins .jenkins .clouds .add (cloudB );
4353
4454        KubernetesFolderProperty  property1  = new  KubernetesFolderProperty ();
45-         folder1 .addProperty (property1 );
55+         folderA .addProperty (property1 );
4656        JSONObject  json1  = new  JSONObject ();
4757        json1 .element ("usage-permission-A" , true );
4858        json1 .element ("usage-permission-B" , false );
49-         folder1 .addProperty (property1 .reconfigure (null , json1 ));
50- 
59+         folderA .addProperty (property1 .reconfigure (null , json1 ));
5160
5261        KubernetesFolderProperty  property2  = new  KubernetesFolderProperty ();
53-         folder2 .addProperty (property2 );
62+         folderB .addProperty (property2 );
5463        JSONObject  json2  = new  JSONObject ();
5564        json2 .element ("usage-permission-A" , false );
5665        json2 .element ("usage-permission-B" , true );
57-         folder2 .addProperty (property2 .reconfigure (null , json2 ));
66+         folderB .addProperty (property2 .reconfigure (null , json2 ));
5867
59-         KubernetesQueueTaskDispatcher   dispatcher   = new  KubernetesQueueTaskDispatcher ( );
60-         KubernetesSlave   slave1   = new  KubernetesSlave ("A " , new  PodTemplate (), "testA " , "A " , "dockerA " , new  KubernetesLauncher (), RetentionStrategy .INSTANCE );
61-          KubernetesSlave   slave2  =  new   KubernetesSlave ( "B" ,  new   PodTemplate (),  "testB" ,  "B" ,  "dockerB" ,  new   KubernetesLauncher (),  RetentionStrategy . INSTANCE ); 
68+         slaveA   = new  KubernetesSlave ( "A" ,  new   PodTemplate (),  "testA" ,  "A" ,  "dockerA" ,  new   KubernetesLauncher (),  RetentionStrategy . INSTANCE );
69+         slaveB   = new  KubernetesSlave ("B " , new  PodTemplate (), "testB " , "B " , "dockerB " , new  KubernetesLauncher (), RetentionStrategy .INSTANCE );
70+     } 
6271
63-         assertNull (dispatcher .canTake (slave1 , project1 ));
64-         assertNotNull (dispatcher .canTake (slave2 , project1 ));
6572
66-         assertNotNull (dispatcher .canTake (slave1 , project2 ));
67-         assertNull (dispatcher .canTake (slave2 , project2 ));
73+     @ Test 
74+     public  void  checkRestrictedTwoClouds () throws  Exception  {
75+         setUpTwoClouds ();
6876
77+         FreeStyleProject  projectA  = folderA .createProject (FreeStyleProject .class , "buildJob" );
78+         FreeStyleProject  projectB  = folderB .createProject (FreeStyleProject .class , "buildJob" );
79+         KubernetesQueueTaskDispatcher  dispatcher  = new  KubernetesQueueTaskDispatcher ();
6980
81+         assertNull (dispatcher .canTake (slaveA , projectA ));
82+         assertNotNull (dispatcher .canTake (slaveB , projectA ));
83+         assertNotNull (dispatcher .canTake (slaveA , projectB ));
84+         assertNull (dispatcher .canTake (slaveB , projectB ));
7085    }
7186
7287    @ Test 
7388    public  void  checkNotRestrictedClouds () throws  Exception  {
74- 
75-         Folder  folder  = new  Folder (jenkins .jenkins , "A" );
76- 
89+         Folder  folder  = new  Folder (jenkins .jenkins , "C" );
7790        FreeStyleProject  project  = folder .createProject (FreeStyleProject .class , "buildJob" );
78- 
79-         jenkins .jenkins .add (folder , "A" );
80- 
81-         KubernetesCloud  cloud  = new  KubernetesCloud ("A" );
91+         jenkins .jenkins .add (folder , "C" );
92+         KubernetesCloud  cloud  = new  KubernetesCloud ("C" );
8293        cloud .setUsageRestricted (false );
83- 
8494        jenkins .jenkins .clouds .add (cloud );
85- 
86- 
87- 
8895        KubernetesQueueTaskDispatcher  dispatcher  = new  KubernetesQueueTaskDispatcher ();
89-         KubernetesSlave  slave  = new  KubernetesSlave ("A " , new  PodTemplate (), "testA " , "A " , "dockerA " , new  KubernetesLauncher (), RetentionStrategy .INSTANCE );
96+         KubernetesSlave  slave  = new  KubernetesSlave ("C " , new  PodTemplate (), "testC " , "C " , "dockerC " , new  KubernetesLauncher (), RetentionStrategy .INSTANCE );
9097
9198        assertNull (dispatcher .canTake (slave , project ));
9299    }
@@ -95,12 +102,23 @@ public void checkNotRestrictedClouds() throws Exception {
95102    @ Test 
96103    public  void  checkDumbSlave () throws  Exception  {
97104        DumbSlave  slave  = jenkins .createOnlineSlave ();
98-         KubernetesQueueTaskDispatcher  dispatcher  = new  KubernetesQueueTaskDispatcher ();
99- 
100105        FreeStyleProject  project  = jenkins .createProject (FreeStyleProject .class );
106+         KubernetesQueueTaskDispatcher  dispatcher  = new  KubernetesQueueTaskDispatcher ();
101107
102108        assertNull (dispatcher .canTake (slave , project ));
109+     }
110+ 
111+     @ Test 
112+     public  void  checkPipelinesRestrictedTwoClouds () throws  Exception  {
113+         setUpTwoClouds ();
103114
115+         WorkflowJob  job  = folderA .createProject (WorkflowJob .class , "pipeline" );
116+         when (task .getOwnerTask ()).thenReturn (job );
117+         KubernetesQueueTaskDispatcher  dispatcher  = new  KubernetesQueueTaskDispatcher ();
118+ 
119+         assertNull (dispatcher .canTake (slaveA , task ));
120+         assertNotNull (dispatcher .canTake (slaveB , task ));
104121    }
105122
123+ 
106124}
0 commit comments