Skip to content

Commit 63d80ac

Browse files
committed
Add test cases for merging duplicate volume components
Signed-off-by: Angel Misevski <[email protected]>
1 parent f8de98f commit 63d80ac

6 files changed

+261
-0
lines changed

pkg/library/flatten/flatten_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,30 @@ func TestResolveDevWorkspaceWorkspaceEnv(t *testing.T) {
235235
}
236236
}
237237

238+
func TestMergesDuplicateVolumeComponents(t *testing.T) {
239+
tests := testutil.LoadAllTestsOrPanic(t, "testdata/volume_merging")
240+
testutil.SetupControllerCfg()
241+
for _, tt := range tests {
242+
t.Run(tt.Name, func(t *testing.T) {
243+
// sanity check: input defines components
244+
assert.True(t, len(tt.Input.DevWorkspace.Components) > 0, "Test case defines workspace with no components")
245+
testResolverTools := getTestingTools(tt.Input, "test-ignored")
246+
247+
outputWorkspace, _, err := ResolveDevWorkspace(tt.Input.DevWorkspace, testResolverTools)
248+
if tt.Output.ErrRegexp != nil && assert.Error(t, err) {
249+
assert.Regexp(t, *tt.Output.ErrRegexp, err.Error(), "Error message should match")
250+
} else {
251+
if !assert.NoError(t, err, "Should not return error") {
252+
return
253+
}
254+
assert.Truef(t, cmp.Equal(tt.Output.DevWorkspace, outputWorkspace, testutil.WorkspaceTemplateDiffOpts),
255+
"DevWorkspace should match expected output:\n%s",
256+
cmp.Diff(tt.Output.DevWorkspace, outputWorkspace, testutil.WorkspaceTemplateDiffOpts))
257+
}
258+
})
259+
}
260+
}
261+
238262
func getTestingTools(input testutil.TestInput, testNamespace string) ResolverTools {
239263
testHttpGetter := &testutil.FakeHTTPGetter{
240264
DevfileResources: input.DevfileResources,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
name: "Error when a to-be-merged volume has invalid size"
2+
3+
input:
4+
devworkspace:
5+
parent:
6+
uri: "parent"
7+
components:
8+
- name: duplicated-volume
9+
volume: {}
10+
11+
devfileResources:
12+
"parent":
13+
schemaVersion: 2.0.0
14+
metadata:
15+
name: "parent"
16+
components:
17+
- name: duplicated-volume
18+
volume:
19+
size: "invalid"
20+
21+
output:
22+
errRegexp: "failed to merge DevWorkspace volumes: quantities.*"
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: "Merging duplicate volumes leaves other elements unchanged"
2+
3+
input:
4+
devworkspace:
5+
parent:
6+
uri: "parent"
7+
components:
8+
- name: duplicated-volume
9+
volume: {}
10+
- name: "plugin-1"
11+
plugin:
12+
uri: "plugin-1"
13+
- name: "plugin-2"
14+
plugin:
15+
uri: "plugin-2"
16+
- name: "main-container"
17+
container:
18+
image: test/image
19+
devfileResources:
20+
"parent":
21+
schemaVersion: 2.0.0
22+
metadata:
23+
name: "parent"
24+
components:
25+
- name: duplicated-volume
26+
volume: {}
27+
- name: new-parent-volume
28+
volume: {}
29+
- name: "parent-container"
30+
container:
31+
image: test/image-parent
32+
"plugin-1":
33+
schemaVersion: 2.0.0
34+
metadata:
35+
name: "plugin-1"
36+
components:
37+
- name: duplicated-volume
38+
volume: {}
39+
- name: new-plugin-1-volume
40+
volume: {}
41+
- name: "plugin-1-container"
42+
container:
43+
image: test/image-plugin-1
44+
45+
"plugin-2":
46+
schemaVersion: 2.0.0
47+
metadata:
48+
name: "plugin-2"
49+
components:
50+
- name: duplicated-volume
51+
volume: {}
52+
- name: "plugin-2-container"
53+
container:
54+
image: test/image-plugin-2
55+
56+
57+
output:
58+
devworkspace:
59+
components:
60+
- name: duplicated-volume
61+
volume: {}
62+
- name: new-parent-volume
63+
attributes:
64+
"controller.devfile.io/imported-by": parent
65+
volume: {}
66+
- name: new-plugin-1-volume
67+
attributes:
68+
"controller.devfile.io/imported-by": plugin-1
69+
volume: {}
70+
- name: "main-container"
71+
container:
72+
image: test/image
73+
- name: "parent-container"
74+
attributes:
75+
"controller.devfile.io/imported-by": parent
76+
container:
77+
image: test/image-parent
78+
- name: "plugin-1-container"
79+
attributes:
80+
"controller.devfile.io/imported-by": plugin-1
81+
container:
82+
image: test/image-plugin-1
83+
- name: "plugin-2-container"
84+
attributes:
85+
"controller.devfile.io/imported-by": plugin-2
86+
container:
87+
image: test/image-plugin-2
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
name: "Makes merged volume persistent if duplicate is persistent"
2+
3+
input:
4+
devworkspace:
5+
parent:
6+
uri: "parent"
7+
components:
8+
- name: duplicated-volume
9+
volume:
10+
emphemeral: true
11+
- name: "plugin-1"
12+
plugin:
13+
uri: "plugin-1"
14+
15+
devfileResources:
16+
"parent":
17+
schemaVersion: 2.0.0
18+
metadata:
19+
name: "parent"
20+
components:
21+
- name: duplicated-volume
22+
volume:
23+
emphemeral: true
24+
"plugin-1":
25+
schemaVersion: 2.0.0
26+
metadata:
27+
name: "plugin-1"
28+
components:
29+
- name: duplicated-volume
30+
volume: {}
31+
32+
output:
33+
devworkspace:
34+
components:
35+
- name: duplicated-volume
36+
volume: {}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: "Makes merged volume persistent use largest size from duplicates"
2+
3+
input:
4+
devworkspace:
5+
parent:
6+
uri: "parent"
7+
components:
8+
- name: duplicated-volume
9+
volume: {}
10+
- name: "plugin-1"
11+
plugin:
12+
uri: "plugin-1"
13+
14+
devfileResources:
15+
"parent":
16+
schemaVersion: 2.0.0
17+
metadata:
18+
name: "parent"
19+
components:
20+
- name: duplicated-volume
21+
volume:
22+
size: 2Gi
23+
"plugin-1":
24+
schemaVersion: 2.0.0
25+
metadata:
26+
name: "plugin-1"
27+
components:
28+
- name: duplicated-volume
29+
volume:
30+
size: 1Gi
31+
32+
output:
33+
devworkspace:
34+
components:
35+
- name: duplicated-volume
36+
volume:
37+
size: 2Gi
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
name: "Merges volume components from parent and plugins"
2+
3+
input:
4+
devworkspace:
5+
parent:
6+
uri: "parent"
7+
components:
8+
- name: duplicated-volume
9+
volume: {}
10+
- name: "plugin-1"
11+
plugin:
12+
uri: "plugin-1"
13+
- name: "plugin-2"
14+
plugin:
15+
uri: "plugin-2"
16+
devfileResources:
17+
"parent":
18+
schemaVersion: 2.0.0
19+
metadata:
20+
name: "parent"
21+
components:
22+
- name: duplicated-volume
23+
volume: {}
24+
- name: new-parent-volume
25+
volume: {}
26+
"plugin-1":
27+
schemaVersion: 2.0.0
28+
metadata:
29+
name: "plugin-1"
30+
components:
31+
- name: duplicated-volume
32+
volume: {}
33+
- name: new-plugin-1-volume
34+
volume: {}
35+
"plugin-2":
36+
schemaVersion: 2.0.0
37+
metadata:
38+
name: "plugin-2"
39+
components:
40+
- name: duplicated-volume
41+
volume: {}
42+
43+
output:
44+
devworkspace:
45+
components:
46+
- name: duplicated-volume
47+
volume: {}
48+
- name: new-parent-volume
49+
attributes:
50+
"controller.devfile.io/imported-by": parent
51+
volume: {}
52+
- name: new-plugin-1-volume
53+
attributes:
54+
"controller.devfile.io/imported-by": plugin-1
55+
volume: {}

0 commit comments

Comments
 (0)