1 package rollouts
2
3 import (
4 _ "embed"
5 "fmt"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 )
10
11
12 var simpleGraph []byte
13
14
15 var simplePlan []byte
16
17
18 var badEdgePlan []byte
19
20
21 var badEdgeGraph []byte
22
23 var fakeGraphID = "abc1234-def"
24 var fakePlanID = "abc1234-def"
25
26 func testSimpleEdges(edges []RolloutGraphEdge) error {
27 if len(edges) != 7 {
28 return fmt.Errorf("expected 7 edges, got %d", len(edges))
29 }
30 return nil
31 }
32
33 func testSimpleNodes(nodes map[NodeKey]RolloutGraphNode) error {
34 if len(nodes) != 7 {
35 return fmt.Errorf("expected 7 nodes, got %d", len(nodes))
36 }
37
38 tg1 := nodes["tg1"]
39 if tg1 == nil {
40 return fmt.Errorf("expected node with key %s, got nil", "tg1")
41 }
42 if len(tg1.GetDependsOn()) != 0 {
43 return fmt.Errorf("expected first node, tg1, to have no dependencies, got %d", len(tg1.GetDependsOn()))
44 }
45 if len(tg1.GetNext()) != 1 {
46 return fmt.Errorf("expected first node, tg1, to have 1 next node, got %d", len(tg1.GetNext()))
47 }
48
49 tg2 := nodes["tg2"]
50 if tg2 == nil {
51 return fmt.Errorf("expected node with key %s, got nil", "tg2")
52 }
53 if len(tg2.GetDependsOn()) != 1 {
54 return fmt.Errorf("expected node tg2, to have 1 dependencies, got %d", len(tg2.GetDependsOn()))
55 }
56 if len(tg2.GetNext()) != 1 {
57 return fmt.Errorf("expected node tg2, to have 1 next node, got %d", len(tg2.GetNext()))
58 }
59
60 tg3 := nodes["tg3"]
61 if tg3 == nil {
62 return fmt.Errorf("expected node with key %s, got nil", "tg3")
63 }
64 if len(tg3.GetDependsOn()) != 1 {
65 return fmt.Errorf("expected node tg3, to have 1 dependencies, got %d", len(tg3.GetDependsOn()))
66 }
67 if len(tg3.GetNext()) != 1 {
68 return fmt.Errorf("expected node tg3, to have 1 next node, got %d", len(tg3.GetNext()))
69 }
70
71 tg4 := nodes["tg4"]
72 if tg4 == nil {
73 return fmt.Errorf("expected node with key %s, got nil", "tg4")
74 }
75 if len(tg4.GetDependsOn()) != 1 {
76 return fmt.Errorf("expected node tg4, to have 1 dependencies, got %d", len(tg4.GetDependsOn()))
77 }
78 if len(tg4.GetNext()) != 0 {
79 return fmt.Errorf("expected terminal node, tg4, to have 0 next nodes, got %d", len(tg4.GetNext()))
80 }
81
82 tg5 := nodes["tg5"]
83 if tg5 == nil {
84 return fmt.Errorf("expected node with key %s, got nil", "tg5")
85 }
86 if len(tg5.GetDependsOn()) != 1 {
87 return fmt.Errorf("expected node tg5, to have 1 dependencies, got %d", len(tg5.GetDependsOn()))
88 }
89 if len(tg5.GetNext()) != 0 {
90 return fmt.Errorf("expected terminal node, tg5, to have 0 next nodes, got %d", len(tg5.GetNext()))
91 }
92
93 g1 := nodes["g1"]
94 if g1 == nil {
95 return fmt.Errorf("expected node with key %s, got nil", "g1")
96 }
97 if len(g1.GetDependsOn()) != 1 {
98 return fmt.Errorf("expected node g1 to have 1 dependencies, got %d", len(g1.GetDependsOn()))
99 }
100 if len(g1.GetNext()) != 2 {
101 return fmt.Errorf("expected node g1 to have 2 next nodes, got %d", len(g1.GetNext()))
102 }
103
104 g2 := nodes["g2"]
105 if g2 == nil {
106 return fmt.Errorf("expected node with key %s, got nil", "g2")
107 }
108 if len(g2.GetDependsOn()) != 2 {
109 return fmt.Errorf("expected node g2 to have 2 dependencies, got %d", len(g2.GetDependsOn()))
110 }
111 if len(g2.GetNext()) != 2 {
112 return fmt.Errorf("expected node g2 to have 2 next nodes, got %d", len(g2.GetNext()))
113 }
114
115 return nil
116 }
117
118 func TestCreateRolloutPlanFromJSON(t *testing.T) {
119 plan, err := NewRolloutPlanFromJSON(simplePlan)
120 fmt.Printf("%+v\n", plan)
121 if err != nil {
122 t.Fatalf("failed to create test plan from JSON: %v", err)
123 }
124
125 if len(plan.Initial) != 1 {
126 t.Fatalf("expecting Initial nodes to be len 1 but got %d", len(plan.Initial))
127 }
128
129 assert.Equal(t, plan.ID, fakePlanID)
130
131 nodesErr := testSimpleNodes(plan.Nodes)
132 if nodesErr != nil {
133 t.Fatal(nodesErr)
134 }
135
136 edgesErr := testSimpleEdges(plan.Edges)
137 if edgesErr != nil {
138 t.Fatal(edgesErr)
139 }
140 }
141
142 func TestRolloutPlanJSONBadEdge(t *testing.T) {
143 plan, err := NewRolloutPlanFromJSON(badEdgePlan)
144 fmt.Printf("%+v\n", plan)
145 if err != nil {
146 t.Logf("successful error: %s", err)
147 fmt.Println(err)
148 } else {
149 t.Fatal("didn't log error")
150 }
151 }
152
153 func TestRolloutGraphJSONBadEdge(t *testing.T) {
154 graph, err := NewRolloutGraphFromJSON(badEdgeGraph)
155 fmt.Printf("%+v\n", graph)
156 if err != nil {
157 t.Logf("successful error: %s", err)
158 fmt.Println(err)
159 } else {
160 t.Fatal("didn't log error")
161 }
162 }
163
164 func TestCreateRolloutGraphFromJSON(t *testing.T) {
165 rollout, err := NewRolloutGraphFromJSON(simpleGraph)
166 if err != nil {
167 t.Fatalf("failed create test rollout graph from JSON: %v", err)
168 }
169
170 assert.Equal(t, rollout.ID, fakeGraphID)
171
172 nodesErr := testSimpleNodes(rollout.Nodes)
173 if nodesErr != nil {
174 t.Fatal(nodesErr)
175 }
176
177 edgesErr := testSimpleEdges(rollout.Edges)
178 if edgesErr != nil {
179 t.Fatal(edgesErr)
180 }
181 }
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
View as plain text