1
1
package com.rundeck.plugin
2
2
3
-
3
+ import com.dtolabs.rundeck.core.authorization.AuthContextProcessor
4
4
import com.dtolabs.rundeck.core.common.IRundeckProject
5
5
import grails.testing.web.controllers.ControllerUnitTest
6
+ import org.rundeck.core.auth.AuthConstants
6
7
import spock.lang.Specification
8
+ import spock.lang.Unroll
9
+
7
10
import javax.security.auth.Subject
8
11
import com.dtolabs.rundeck.core.authentication.Group
9
12
import com.dtolabs.rundeck.core.authentication.Username
@@ -25,7 +28,14 @@ class EditProjectControllerSpec extends Specification implements ControllerUnitT
25
28
controller. updateModeProjectService = Mock (UpdateModeProjectService ){
26
29
getScheduleExecutionLater(_,_)>> [executions :[active :false ]]
27
30
}
28
- controller. frameworkService = new MockFrameworkService (authorizeApplicationResource : true )
31
+ controller. frameworkService = new MockFrameworkService ()
32
+
33
+ controller. rundeckAuthContextProcessor = Mock (AuthContextProcessor ){
34
+ 1 * getAuthContextForSubjectAndProject(_, projectName)>> Mock (UserAndRolesAuthContext )
35
+ 1 * authResourceForProject(projectName)>> [:]
36
+ 1 * authorizeApplicationResource(_, _, AuthConstants . ACTION_ADMIN ) >> true
37
+ 0 * _(* _)
38
+ }
29
39
30
40
when :
31
41
controller. getExecutionLater(projectName)
@@ -45,7 +55,14 @@ class EditProjectControllerSpec extends Specification implements ControllerUnitT
45
55
controller. updateModeProjectService = Mock (UpdateModeProjectService ){
46
56
getProjectModeChangeStatus(_, _)>> [active :false ]
47
57
}
48
- controller. frameworkService = new MockFrameworkService (authorizeApplicationResource : true )
58
+ controller. frameworkService = new MockFrameworkService ()
59
+
60
+ controller. rundeckAuthContextProcessor = Mock (AuthContextProcessor ){
61
+ 1 * getAuthContextForSubjectAndProject(_, projectName)>> Mock (UserAndRolesAuthContext )
62
+ 1 * authResourceForProject(projectName)>> [:]
63
+ 1 * authorizeApplicationResource(_, _, AuthConstants . ACTION_ADMIN ) >> true
64
+ 0 * _(* _)
65
+ }
49
66
50
67
when :
51
68
controller. getNextExecutionChangeStatus(projectName)
@@ -63,7 +80,14 @@ class EditProjectControllerSpec extends Specification implements ControllerUnitT
63
80
def " test api apiProjectEnableLater auth" (){
64
81
given :
65
82
String project = " TestProject"
66
- controller. frameworkService = new MockFrameworkService (authorizeApplicationResource : false )
83
+ controller. frameworkService = new MockFrameworkService ()
84
+
85
+ controller. rundeckAuthContextProcessor = Mock (AuthContextProcessor ){
86
+ 1 * getAuthContextForSubjectAndProject(_, project)>> Mock (UserAndRolesAuthContext )
87
+ 1 * authResourceForProject(project)>> [:]
88
+ 1 * authorizeApplicationResource(_, _, AuthConstants . ACTION_ADMIN ) >> false
89
+ 0 * _(* _)
90
+ }
67
91
controller. apiService = new MockApiService (requireVersion : true )
68
92
controller. updateModeProjectService = Mock (UpdateModeProjectService )
69
93
@@ -80,7 +104,13 @@ class EditProjectControllerSpec extends Specification implements ControllerUnitT
80
104
def " test api apiProjectDisableLater auth" (){
81
105
given :
82
106
String project = " TestProject"
83
- controller. frameworkService = new MockFrameworkService (authorizeApplicationResource : false )
107
+ controller. frameworkService = new MockFrameworkService ()
108
+ controller. rundeckAuthContextProcessor = Mock (AuthContextProcessor ){
109
+ 1 * getAuthContextForSubjectAndProject(_, project)>> Mock (UserAndRolesAuthContext )
110
+ 1 * authResourceForProject(project)>> [:]
111
+ 1 * authorizeApplicationResource(_, _, AuthConstants . ACTION_ADMIN ) >> false
112
+ 0 * _(* _)
113
+ }
84
114
controller. apiService = new MockApiService (requireVersion : true )
85
115
controller. updateModeProjectService = Mock (UpdateModeProjectService )
86
116
@@ -94,10 +124,18 @@ class EditProjectControllerSpec extends Specification implements ControllerUnitT
94
124
response. status == 403
95
125
}
96
126
127
+ @Unroll
97
128
def " test api apiProjectEnableLater method" (){
98
129
given :
99
130
String project = " TestProject"
100
- controller. frameworkService = new MockFrameworkService (authorizeApplicationResource : true )
131
+ controller. frameworkService = new MockFrameworkService ()
132
+
133
+ controller. rundeckAuthContextProcessor = Mock (AuthContextProcessor ){
134
+ invocations * getAuthContextForSubjectAndProject(_, project)>> Mock (UserAndRolesAuthContext )
135
+ invocations * authResourceForProject(project)>> [:]
136
+ invocations * authorizeApplicationResource(_, _, AuthConstants . ACTION_ADMIN ) >> true
137
+ 0 * _(* _)
138
+ }
101
139
controller. apiService = new MockApiService (requireVersion : true )
102
140
controller. updateModeProjectService = Mock (UpdateModeProjectService )
103
141
@@ -112,18 +150,26 @@ class EditProjectControllerSpec extends Specification implements ControllerUnitT
112
150
response. status == statusCode
113
151
114
152
where :
115
- method | statusCode
116
- ' POST' | 400
117
- ' GET' | 405
118
- ' PUT' | 405
119
- ' DELETE' | 405
153
+ method | statusCode | invocations
154
+ ' POST' | 400 | 1
155
+ ' GET' | 405 | 0
156
+ ' PUT' | 405 | 0
157
+ ' DELETE' | 405 | 0
120
158
121
159
}
122
160
161
+ @Unroll
123
162
def " test api apiProjectDisableLater method" (){
124
163
given :
125
164
String project = " TestProject"
126
- controller. frameworkService = new MockFrameworkService (authorizeApplicationResource : true )
165
+ controller. frameworkService = new MockFrameworkService ()
166
+
167
+ controller. rundeckAuthContextProcessor = Mock (AuthContextProcessor ){
168
+ invocations * getAuthContextForSubjectAndProject(_, project)>> Mock (UserAndRolesAuthContext )
169
+ invocations * authResourceForProject(project)>> [:]
170
+ invocations * authorizeApplicationResource(_, _, AuthConstants . ACTION_ADMIN ) >> true
171
+ 0 * _(* _)
172
+ }
127
173
controller. apiService = new MockApiService (requireVersion : true )
128
174
controller. updateModeProjectService = Mock (UpdateModeProjectService )
129
175
@@ -138,11 +184,11 @@ class EditProjectControllerSpec extends Specification implements ControllerUnitT
138
184
response. status == statusCode
139
185
140
186
where :
141
- method | statusCode
142
- ' POST' | 400
143
- ' GET' | 405
144
- ' PUT' | 405
145
- ' DELETE' | 405
187
+ method | statusCode | invocations
188
+ ' POST' | 400 | 1
189
+ ' GET' | 405 | 0
190
+ ' PUT' | 405 | 0
191
+ ' DELETE' | 405 | 0
146
192
147
193
}
148
194
@@ -157,7 +203,14 @@ class EditProjectControllerSpec extends Specification implements ControllerUnitT
157
203
getProjectProperties() >> properties
158
204
}
159
205
160
- MockFrameworkService mockFrameworkService = new MockFrameworkService (authorizeApplicationResource : true )
206
+ MockFrameworkService mockFrameworkService = new MockFrameworkService ()
207
+
208
+ controller. rundeckAuthContextProcessor = Mock (AuthContextProcessor ){
209
+ 1 * getAuthContextForSubjectAndProject(_, project)>> Mock (UserAndRolesAuthContext )
210
+ 1 * authResourceForProject(project)>> [:]
211
+ 1 * authorizeApplicationResource(_, _, AuthConstants . ACTION_ADMIN ) >> true
212
+ 0 * _(* _)
213
+ }
161
214
mockFrameworkService. setRundeckProject(rundeckProject)
162
215
163
216
controller. frameworkService = mockFrameworkService
@@ -203,7 +256,14 @@ class EditProjectControllerSpec extends Specification implements ControllerUnitT
203
256
getProjectProperties() >> properties
204
257
}
205
258
206
- MockFrameworkService mockFrameworkService = new MockFrameworkService (authorizeApplicationResource : true )
259
+ MockFrameworkService mockFrameworkService = new MockFrameworkService ()
260
+
261
+ controller. rundeckAuthContextProcessor = Mock (AuthContextProcessor ){
262
+ 1 * getAuthContextForSubjectAndProject(_, project)>> Mock (UserAndRolesAuthContext )
263
+ 1 * authResourceForProject(project)>> [:]
264
+ 1 * authorizeApplicationResource(_, _, AuthConstants . ACTION_ADMIN ) >> true
265
+ 0 * _(* _)
266
+ }
207
267
mockFrameworkService. setRundeckProject(rundeckProject)
208
268
209
269
controller. frameworkService = mockFrameworkService
@@ -245,14 +305,9 @@ class MockFrameworkService{
245
305
String serverUUID
246
306
IRundeckProject rundeckProject
247
307
248
- boolean authorizeApplicationResource = true
249
- boolean authorizeApplicationResourceNonAdmin = false
250
308
def projectList
251
309
String frameworkNodeName
252
310
Map frameworkPropertiesMap = [:]
253
- def getAuthContextForSubjectAndProject (Object a , Object b ){
254
- return new SubjectAuthContext (null , null )
255
- }
256
311
257
312
Map frameworkProjectsTestData = [:]
258
313
@@ -263,35 +318,6 @@ class MockFrameworkService{
263
318
frameworkProjectsTestData[name]
264
319
}
265
320
266
- UserAndRolesAuthContext getAuthContextForUserAndRolesAndProject (String user , Collection roles , String project ) {
267
- def sub = new Subject ()
268
- sub. principals = [
269
- new Username (user),
270
- new Group (" expect:" + project)
271
- ] + roles. collect {
272
- new Group (it)
273
- }
274
- return new SubjectAuthContext (sub, null )
275
- }
276
- def getAuthContextForSubject (Object a ){
277
- return new SubjectAuthContext (null , null )
278
- }
279
-
280
- def authorizeProjectResources (Object a , Object b , Object c , Object d ){
281
- return []
282
- }
283
- def authorizeApplicationResource (Object a , Object b , Object c ){
284
- return authorizeApplicationResource
285
- }
286
-
287
- def authorizeApplicationResourceAny (Object a , Object b , Object c ){
288
- return authorizeApplicationResource || authorizeApplicationResourceNonAdmin
289
- }
290
-
291
- def authorizeProjectJobAny (Object a , Object b , Object c , Object d ){
292
- return authorizeApplicationResource
293
- }
294
-
295
321
IRundeckProject getRundeckProject () {
296
322
return rundeckProject
297
323
}
0 commit comments