@@ -22,6 +22,7 @@ import (
22
22
23
23
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/schema/latest"
24
24
"github.com/GoogleContainerTools/skaffold/v2/testutil"
25
+ "github.com/google/go-cmp/cmp"
25
26
)
26
27
27
28
func TestNewDependencyGraph (t * testing.T ) {
@@ -36,7 +37,7 @@ func TestNewDependencyGraph(t *testing.T) {
36
37
description : "simple dependency graph" ,
37
38
releases : []latest.HelmRelease {
38
39
{Name : "release1" , DependsOn : []string {"release2" }},
39
- {Name : "release2" , DependsOn : [] string {} },
40
+ {Name : "release2" },
40
41
},
41
42
expected : map [string ][]string {
42
43
"release1" : {"release2" },
@@ -85,6 +86,15 @@ func TestNewDependencyGraph(t *testing.T) {
85
86
shouldErr : true ,
86
87
errorMessage : "duplicate release name release1" ,
87
88
},
89
+ {
90
+ description : "has cycle" ,
91
+ releases : []latest.HelmRelease {
92
+ {Name : "a" , DependsOn : []string {"b" }},
93
+ {Name : "b" , DependsOn : []string {"a" }},
94
+ },
95
+ shouldErr : true ,
96
+ errorMessage : "cycle detected" ,
97
+ },
88
98
}
89
99
90
100
for _ , test := range tests {
@@ -97,24 +107,11 @@ func TestNewDependencyGraph(t *testing.T) {
97
107
}
98
108
t .CheckDeepEqual (len (test .expected ), len (graph .graph ))
99
109
100
- for release , deps := range test .expected {
101
- actualDeps , exists := graph .graph [release ]
102
- if ! exists {
103
- t .Errorf ("missing release %s in graph" , release )
104
- continue
105
- }
106
-
107
- if len (deps ) != len (actualDeps ) {
108
- t .Errorf ("expected %d dependencies for %s, got %d" , len (deps ), release , len (actualDeps ))
109
- continue
110
- }
111
-
112
- // Check all expected dependencies exist
113
- for _ , dep := range deps {
114
- if ! slices .Contains (actualDeps , dep ) {
115
- t .Errorf ("missing dependency %s for release %s" , dep , release )
116
- }
117
- }
110
+ opt := cmp .Comparer (func (x , y []string ) bool {
111
+ return slices .Equal (x , y )
112
+ })
113
+ if diff := cmp .Diff (test .expected , graph .graph , opt ); diff != "" {
114
+ t .Errorf ("%s:got unexpected diff: %s" , test .description , diff )
118
115
}
119
116
})
120
117
}
@@ -172,9 +169,7 @@ func TestHasCycles(t *testing.T) {
172
169
173
170
for _ , test := range tests {
174
171
testutil .Run (t , test .description , func (t * testutil.T ) {
175
- graph , err := NewDependencyGraph (test .releases )
176
- t .CheckError (false , err )
177
- err = graph .HasCycles ()
172
+ _ , err := NewDependencyGraph (test .releases )
178
173
179
174
if test .shouldErr {
180
175
t .CheckErrorContains ("cycle detected" , err )
@@ -207,7 +202,7 @@ func TestGetReleasesByLevel(t *testing.T) {
207
202
{
208
203
description : "multiple dependencies at same level" ,
209
204
releases : []latest.HelmRelease {
210
- {Name : "a" , DependsOn : []string {"b " , "c " }},
205
+ {Name : "a" , DependsOn : []string {"c " , "b " }},
211
206
{Name : "b" , DependsOn : []string {"d" }},
212
207
{Name : "c" , DependsOn : []string {"d" }},
213
208
{Name : "d" },
@@ -276,8 +271,11 @@ func TestGetReleasesByLevel(t *testing.T) {
276
271
t .CheckDeepEqual (len (test .expected ), len (levels ))
277
272
278
273
// Check that each level contains expected releases
279
- for level , releases := range test .expected {
280
- t .CheckDeepEqual (releases , levels [level ])
274
+ opt := cmp .Comparer (func (x , y []string ) bool {
275
+ return slices .Equal (x , y )
276
+ })
277
+ if diff := cmp .Diff (test .expected , levels , opt ); diff != "" {
278
+ t .Errorf ("%s: got unexpected diff (-want +got):\n %s" , test .description , diff )
281
279
}
282
280
283
281
// Verify level assignments are correct
@@ -317,59 +315,3 @@ func TestGetReleasesByLevel(t *testing.T) {
317
315
})
318
316
}
319
317
}
320
-
321
- func TestOrderPreservationWithinLevels (t * testing.T ) {
322
- tests := []struct {
323
- description string
324
- releases []latest.HelmRelease
325
- expected map [int ][]string
326
- }{
327
- {
328
- description : "preserve order within same level" ,
329
- releases : []latest.HelmRelease {
330
- {Name : "a3" },
331
- {Name : "a2" },
332
- {Name : "a1" },
333
- {Name : "b3" , DependsOn : []string {"a3" , "a2" , "a1" }},
334
- {Name : "b2" , DependsOn : []string {"a1" , "a2" , "a3" }},
335
- {Name : "b1" , DependsOn : []string {"a1" , "a2" , "a3" }},
336
- },
337
- expected : map [int ][]string {
338
- 0 : {"a3" , "a2" , "a1" },
339
- 1 : {"b3" , "b2" , "b1" },
340
- },
341
- },
342
- {
343
- description : "preserve order with mixed dependencies" ,
344
- releases : []latest.HelmRelease {
345
- {Name : "c2" , DependsOn : []string {"a1" }},
346
- {Name : "a1" },
347
- {Name : "c1" , DependsOn : []string {"a1" }},
348
- {Name : "c3" , DependsOn : []string {"a1" }},
349
- {Name : "b1" , DependsOn : []string {"c1" , "c2" , "c3" }},
350
- },
351
- expected : map [int ][]string {
352
- 0 : {"a1" },
353
- 1 : {"c2" , "c1" , "c3" },
354
- 2 : {"b1" },
355
- },
356
- },
357
- }
358
-
359
- for _ , test := range tests {
360
- testutil .Run (t , test .description , func (t * testutil.T ) {
361
- graph , err := NewDependencyGraph (test .releases )
362
- t .CheckNoError (err )
363
-
364
- levels , err := graph .GetReleasesByLevel ()
365
- t .CheckNoError (err )
366
-
367
- // Verify exact ordering within each level
368
- for level , expectedReleases := range test .expected {
369
- actualReleases , exists := levels [level ]
370
- t .CheckTrue (exists )
371
- t .CheckDeepEqual (expectedReleases , actualReleases )
372
- }
373
- })
374
- }
375
- }
0 commit comments