@@ -2,12 +2,15 @@ package workermodel_test
22
33import (
44 "context"
5+ "fmt"
56 "testing"
67
78 "github.com/stretchr/testify/assert"
89 "github.com/stretchr/testify/require"
910
1011 "github.com/ovh/cds/engine/api/bootstrap"
12+ "github.com/ovh/cds/engine/api/group"
13+ "github.com/ovh/cds/engine/api/pipeline"
1114 "github.com/ovh/cds/engine/api/test"
1215 "github.com/ovh/cds/engine/api/test/assets"
1316 "github.com/ovh/cds/engine/api/workermodel"
@@ -122,6 +125,198 @@ func TestUpdateModel(t *testing.T) {
122125 cpy .GroupID = g2 .ID
123126 res , err = workermodel .Update (context .TODO (), db , res , cpy )
124127 require .Error (t , err )
128+
129+ }
130+
131+ // create a worker model aaa
132+ // a pipeline use worker model aaa-foo
133+ // rename worker model to aaa-bar
134+ // the pipeline should keep the name aaa-foo
135+ func TestUpdateModelInPipeline (t * testing.T ) {
136+ db , cache , end := test .SetupPG (t , bootstrap .InitiliazeDB )
137+ defer end ()
138+
139+ g1 := assets .InsertTestGroup (t , db , sdk .RandomString (10 ))
140+ u , _ := assets .InsertLambdaUser (t , db )
141+
142+ pattern := sdk.ModelPattern {
143+ Name : sdk .RandomString (10 ),
144+ Type : sdk .Docker ,
145+ Model : sdk.ModelCmds {
146+ Cmd : "pattern cmd" ,
147+ Shell : "pattern shell" ,
148+ },
149+ }
150+ require .NoError (t , workermodel .InsertPattern (db , & pattern ))
151+
152+ model1Name := sdk .RandomString (10 )
153+ model1 , err := workermodel .Create (context .TODO (), db , sdk.Model {
154+ Type : sdk .Docker ,
155+ Name : model1Name ,
156+ Group : g1 ,
157+ GroupID : g1 .ID ,
158+ ModelDocker : sdk.ModelDocker {},
159+ }, u )
160+ require .NoError (t , err )
161+
162+ model1NameFoo := model1Name + "-foo"
163+ model1Foo , err := workermodel .Create (context .TODO (), db , sdk.Model {
164+ Type : sdk .Docker ,
165+ Name : model1NameFoo ,
166+ Group : g1 ,
167+ GroupID : g1 .ID ,
168+ ModelDocker : sdk.ModelDocker {},
169+ }, u )
170+ require .NoError (t , err )
171+
172+ projectKey := sdk .RandomString (10 )
173+ proj := assets .InsertTestProject (t , db , cache , projectKey , projectKey )
174+
175+ require .NoError (t , group .InsertLinkGroupProject (context .TODO (), db , & group.LinkGroupProject {
176+ GroupID : g1 .ID ,
177+ ProjectID : proj .ID ,
178+ Role : sdk .PermissionReadWriteExecute ,
179+ }))
180+
181+ pip1 := sdk.Pipeline {ProjectID : proj .ID , ProjectKey : proj .Key , Name : sdk .RandomString (10 )}
182+ test .NoError (t , pipeline .InsertPipeline (db , & pip1 ))
183+ job1 := sdk.Job {
184+ Enabled : true ,
185+ Action : sdk.Action {
186+ Enabled : true ,
187+ Requirements : []sdk.Requirement {{
188+ Type : sdk .ModelRequirement ,
189+ Name : fmt .Sprintf ("%s/%s-foo --privileged" , g1 .Name , model1 .Name ),
190+ Value : fmt .Sprintf ("%s/%s-foo --privileged" , g1 .Name , model1 .Name ),
191+ }},
192+ },
193+ }
194+ test .NoError (t , pipeline .InsertJob (db , & job1 , 0 , & pip1 ))
195+
196+ model1FooLoad , err := workermodel .LoadByNameAndGroupID (db , model1Foo .Name , g1 .ID )
197+ require .NoError (t , err )
198+
199+ pips , err := pipeline .LoadByWorkerModel (context .TODO (), db , model1FooLoad )
200+ assert .NoError (t , err )
201+ require .Equal (t , 1 , len (pips ))
202+
203+ model1Load , err := workermodel .LoadByIDWithClearPassword (db , model1 .ID )
204+ require .NoError (t , err )
205+
206+ pips , err = pipeline .LoadByWorkerModel (context .TODO (), db , model1Load )
207+ assert .NoError (t , err )
208+ require .Equal (t , 0 , len (pips ))
209+
210+ // Test rename worker model
211+ res , err := workermodel .Update (context .TODO (), db , model1Load , sdk.Model {
212+ Type : sdk .Docker ,
213+ Name : model1Name + "-bar" ,
214+ PatternName : pattern .Name ,
215+ GroupID : g1 .ID ,
216+ ModelDocker : sdk.ModelDocker {
217+ Private : true ,
218+ Password : sdk .PasswordPlaceholder ,
219+ },
220+ })
221+ require .NoError (t , err )
222+
223+ model2Load , err := workermodel .LoadByIDWithClearPassword (db , res .ID )
224+ require .NoError (t , err )
225+
226+ pips , err = pipeline .LoadByWorkerModel (context .TODO (), db , model1Load )
227+ assert .NoError (t , err )
228+ require .Equal (t , 0 , len (pips ))
229+
230+ pips , err = pipeline .LoadByWorkerModel (context .TODO (), db , model2Load )
231+ assert .NoError (t , err )
232+ require .Equal (t , 0 , len (pips ))
233+
234+ pips , err = pipeline .LoadByWorkerModel (context .TODO (), db , model1FooLoad )
235+ assert .NoError (t , err )
236+ require .Equal (t , 1 , len (pips ))
237+
238+ }
239+
240+ func TestUpdateModelInPipelineSimple (t * testing.T ) {
241+ db , cache , end := test .SetupPG (t , bootstrap .InitiliazeDB )
242+ defer end ()
243+
244+ g1 := assets .InsertTestGroup (t , db , sdk .RandomString (10 ))
245+ u , _ := assets .InsertLambdaUser (t , db )
246+
247+ pattern := sdk.ModelPattern {
248+ Name : sdk .RandomString (10 ),
249+ Type : sdk .Docker ,
250+ Model : sdk.ModelCmds {
251+ Cmd : "pattern cmd" ,
252+ Shell : "pattern shell" ,
253+ },
254+ }
255+ require .NoError (t , workermodel .InsertPattern (db , & pattern ))
256+
257+ model1Name := sdk .RandomString (10 )
258+ model1 , err := workermodel .Create (context .TODO (), db , sdk.Model {
259+ Type : sdk .Docker ,
260+ Name : model1Name ,
261+ Group : g1 ,
262+ GroupID : g1 .ID ,
263+ ModelDocker : sdk.ModelDocker {},
264+ }, u )
265+ require .NoError (t , err )
266+
267+ projectKey := sdk .RandomString (10 )
268+ proj := assets .InsertTestProject (t , db , cache , projectKey , projectKey )
269+
270+ require .NoError (t , group .InsertLinkGroupProject (context .TODO (), db , & group.LinkGroupProject {
271+ GroupID : g1 .ID ,
272+ ProjectID : proj .ID ,
273+ Role : sdk .PermissionReadWriteExecute ,
274+ }))
275+
276+ pip1 := sdk.Pipeline {ProjectID : proj .ID , ProjectKey : proj .Key , Name : sdk .RandomString (10 )}
277+ test .NoError (t , pipeline .InsertPipeline (db , & pip1 ))
278+ job1 := sdk.Job {
279+ Enabled : true ,
280+ Action : sdk.Action {
281+ Enabled : true ,
282+ Requirements : []sdk.Requirement {{
283+ Type : sdk .ModelRequirement ,
284+ Name : fmt .Sprintf ("%s/%s --privileged" , g1 .Name , model1 .Name ),
285+ Value : fmt .Sprintf ("%s/%s --privileged" , g1 .Name , model1 .Name ),
286+ }},
287+ },
288+ }
289+ test .NoError (t , pipeline .InsertJob (db , & job1 , 0 , & pip1 ))
290+
291+ model1Load , err := workermodel .LoadByIDWithClearPassword (db , model1 .ID )
292+ require .NoError (t , err )
293+
294+ pips , err := pipeline .LoadByWorkerModel (context .TODO (), db , model1Load )
295+ assert .NoError (t , err )
296+ require .Equal (t , 1 , len (pips ))
297+
298+ model1NameFoo := model1Name + "-foo"
299+ res , err := workermodel .Update (context .TODO (), db , model1Load , sdk.Model {
300+ Type : sdk .Docker ,
301+ Name : model1NameFoo ,
302+ PatternName : pattern .Name ,
303+ GroupID : g1 .ID ,
304+ ModelDocker : sdk.ModelDocker {
305+ Private : true ,
306+ Password : sdk .PasswordPlaceholder ,
307+ },
308+ })
309+ require .NoError (t , err )
310+
311+ model1FooLoad , err := workermodel .LoadByIDWithClearPassword (db , res .ID )
312+ require .NoError (t , err )
313+
314+ pips , err = pipeline .LoadByWorkerModel (context .TODO (), db , model1FooLoad )
315+ assert .NoError (t , err )
316+ require .Equal (t , 1 , len (pips ))
317+
318+ pip , err := pipeline .LoadPipelineByID (context .TODO (), db , pips [0 ].ID , true )
319+ require .Equal (t , fmt .Sprintf ("%s/%s-foo --privileged" , g1 .Name , model1 .Name ), pip .Stages [0 ].Jobs [0 ].Action .Requirements [0 ].Value )
125320}
126321
127322func TestCopyModelTypeData (t * testing.T ) {
0 commit comments