Skip to content

Commit 79cdf01

Browse files
committed
Switch to using json encoding instead of yaml in conversion
When converting between v1alpha1 and v1alpha2, use the json serialization instead of the yaml serialization, since we only need to serialize and deserialize. The yaml package converts to/from json as an intermediate step. Signed-off-by: Angel Misevski <[email protected]>
1 parent 7dacbd1 commit 79cdf01

11 files changed

+58
-73
lines changed

pkg/apis/workspaces/v1alpha1/commands_conversion.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
package v1alpha1
22

33
import (
4+
"encoding/json"
5+
46
"github.com/devfile/api/pkg/apis/workspaces/v1alpha2"
5-
"sigs.k8s.io/yaml"
67
)
78

89
func convertCommandTo_v1alpha2(src *Command, dest *v1alpha2.Command) error {
910
id, err := src.Key()
1011
if err != nil {
1112
return err
1213
}
13-
yamlCommand, err := yaml.Marshal(src)
14+
jsonCommand, err := json.Marshal(src)
1415
if err != nil {
1516
return err
1617
}
17-
err = yaml.Unmarshal(yamlCommand, dest)
18+
err = json.Unmarshal(jsonCommand, dest)
1819
if err != nil {
1920
return err
2021
}
@@ -24,11 +25,11 @@ func convertCommandTo_v1alpha2(src *Command, dest *v1alpha2.Command) error {
2425

2526
func convertCommandFrom_v1alpha2(src *v1alpha2.Command, dest *Command) error {
2627
id := src.Key()
27-
yamlCommand, err := yaml.Marshal(src)
28+
jsonCommand, err := json.Marshal(src)
2829
if err != nil {
2930
return err
3031
}
31-
err = yaml.Unmarshal(yamlCommand, dest)
32+
err = json.Unmarshal(jsonCommand, dest)
3233
switch {
3334
case dest.Apply != nil:
3435
dest.Apply.Id = id

pkg/apis/workspaces/v1alpha1/commands_conversion_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
func TestCommandConversion_v1alpha1(t *testing.T) {
1313
f := fuzz.New().NilChance(fuzzNilChance).MaxDepth(100).Funcs(
1414
commandFuzzFunc,
15-
stringFuzzFunc,
1615
rawExtFuzzFunc,
1716
)
1817
for i := 0; i < fuzzIterations; i++ {

pkg/apis/workspaces/v1alpha1/components_conversion.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package v1alpha1
22

33
import (
4+
"encoding/json"
5+
46
"github.com/devfile/api/pkg/apis/workspaces/v1alpha2"
5-
"sigs.k8s.io/yaml"
67
)
78

89
func convertComponentTo_v1alpha2(src *Component, dest *v1alpha2.Component) error {
@@ -14,11 +15,11 @@ func convertComponentTo_v1alpha2(src *Component, dest *v1alpha2.Component) error
1415
if err != nil {
1516
return err
1617
}
17-
yamlComponent, err := yaml.Marshal(src)
18+
jsonComponent, err := json.Marshal(src)
1819
if err != nil {
1920
return err
2021
}
21-
err = yaml.Unmarshal(yamlComponent, dest)
22+
err = json.Unmarshal(jsonComponent, dest)
2223
if err != nil {
2324
return err
2425
}
@@ -32,11 +33,11 @@ func convertComponentFrom_v1alpha2(src *v1alpha2.Component, dest *Component) err
3233
return convertPluginComponentFrom_v1alpha2(src, dest)
3334
}
3435
name := src.Key()
35-
yamlComponent, err := yaml.Marshal(src)
36+
jsonComponent, err := json.Marshal(src)
3637
if err != nil {
3738
return err
3839
}
39-
err = yaml.Unmarshal(yamlComponent, dest)
40+
err = json.Unmarshal(jsonComponent, dest)
4041
switch {
4142
case dest.Container != nil:
4243
dest.Container.Name = name

pkg/apis/workspaces/v1alpha1/components_conversion_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ func TestComponentConversion_v1alpha1(t *testing.T) {
1515
commandFuzzFunc,
1616
pluginComponentsOverrideFuzzFunc,
1717
pluginComponentFuzzFunc,
18-
stringFuzzFunc,
1918
rawExtFuzzFunc,
2019
)
2120
for i := 0; i < fuzzIterations; i++ {

pkg/apis/workspaces/v1alpha1/conversion_test.go

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -169,18 +169,6 @@ var projectFuzzFunc = func(project *Project, c fuzz.Continue) {
169169
}
170170
}
171171

172-
// We have to limit the strings that can be generated because in rare cases,
173-
// gofuzz can generate map[string]string with invalid keys for json (e.g. '<<')
174-
// In the yaml-to-json conversion, these end up improperly quoted and an error
175-
// is thrown.
176-
var stringFuzzFunc = fuzz.UnicodeRanges{
177-
{First: 'a', Last: 'z'},
178-
{First: 'A', Last: 'Z'},
179-
{First: '0', Last: '9'},
180-
{First: '-', Last: '-'},
181-
{First: '_', Last: '_'},
182-
}.CustomStringFuzzFunc()
183-
184172
// embeddedResource.Object is an interface and hard to fuzz right now.
185173
var rawExtFuzzFunc = func(embeddedResource *runtime.RawExtension, c fuzz.Continue) {}
186174

@@ -194,7 +182,6 @@ func TestDevWorkspaceConversion_v1alpha1(t *testing.T) {
194182
projectFuzzFunc,
195183
pluginComponentsOverrideFuzzFunc,
196184
pluginComponentFuzzFunc,
197-
stringFuzzFunc,
198185
rawExtFuzzFunc,
199186
)
200187
for i := 0; i < fuzzIterations; i++ {
@@ -227,7 +214,6 @@ func TestDevWorkspaceTemplateConversion_v1alpha1(t *testing.T) {
227214
projectFuzzFunc,
228215
pluginComponentsOverrideFuzzFunc,
229216
pluginComponentFuzzFunc,
230-
stringFuzzFunc,
231217
rawExtFuzzFunc,
232218
)
233219
for i := 0; i < fuzzIterations; i++ {
@@ -260,7 +246,6 @@ func BenchmarkDevWorkspaceConversion(b *testing.B) {
260246
projectFuzzFunc,
261247
pluginComponentsOverrideFuzzFunc,
262248
pluginComponentFuzzFunc,
263-
stringFuzzFunc,
264249
rawExtFuzzFunc,
265250
)
266251
b.ResetTimer()

pkg/apis/workspaces/v1alpha1/events_conversion_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
)
1010

1111
func TestEventsConversion_v1alpha1(t *testing.T) {
12-
f := fuzz.New().NilChance(fuzzNilChance).Funcs(stringFuzzFunc)
12+
f := fuzz.New().NilChance(fuzzNilChance)
1313
for i := 0; i < fuzzIterations; i++ {
1414
original := &Events{}
1515
intermediate := &v1alpha2.Events{}

pkg/apis/workspaces/v1alpha1/parent_conversion.go

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package v1alpha1
22

33
import (
4+
"encoding/json"
5+
46
"github.com/devfile/api/pkg/apis/workspaces/v1alpha2"
5-
"sigs.k8s.io/yaml"
67
)
78

89
func convertParentTo_v1alpha2(src *Parent, dest *v1alpha2.Parent) error {
@@ -48,11 +49,11 @@ func convertParentTo_v1alpha2(src *Parent, dest *v1alpha2.Parent) error {
4849
return err
4950
}
5051
destParentProject := v1alpha2.ProjectParentOverride{}
51-
yamlProject, err := yaml.Marshal(destProject)
52+
jsonProject, err := json.Marshal(destProject)
5253
if err != nil {
5354
return err
5455
}
55-
err = yaml.Unmarshal(yamlProject, &destParentProject)
56+
err = json.Unmarshal(jsonProject, &destParentProject)
5657
if err != nil {
5758
return err
5859
}
@@ -66,11 +67,11 @@ func convertParentTo_v1alpha2(src *Parent, dest *v1alpha2.Parent) error {
6667
return err
6768
}
6869
destParentProject := v1alpha2.StarterProjectParentOverride{}
69-
yamlProject, err := yaml.Marshal(destProject)
70+
jsonProject, err := json.Marshal(destProject)
7071
if err != nil {
7172
return err
7273
}
73-
err = yaml.Unmarshal(yamlProject, &destParentProject)
74+
err = json.Unmarshal(jsonProject, &destParentProject)
7475
if err != nil {
7576
return err
7677
}
@@ -85,11 +86,11 @@ func convertParentCommandTo_v1alpha2(src *Command, dest *v1alpha2.CommandParentO
8586
if err != nil {
8687
return err
8788
}
88-
yamlCommand, err := yaml.Marshal(src)
89+
jsonCommand, err := json.Marshal(src)
8990
if err != nil {
9091
return err
9192
}
92-
err = yaml.Unmarshal(yamlCommand, &dest)
93+
err = json.Unmarshal(jsonCommand, &dest)
9394
if err != nil {
9495
return err
9596
}
@@ -110,22 +111,22 @@ func convertParentComponentTo_v1alpha2(src *Component, dest *v1alpha2.ComponentP
110111
if err != nil {
111112
return err
112113
}
113-
// Though identical in yaml representation, we can't assign between PluginComponentParentOverride and Plugin
114-
yamlPlugin, err := yaml.Marshal(pluginComponent)
114+
// Though identical in json representation, we can't assign between PluginComponentParentOverride and Plugin
115+
jsonPlugin, err := json.Marshal(pluginComponent)
115116
if err != nil {
116117
return err
117118
}
118-
err = yaml.Unmarshal(yamlPlugin, destPluginComponent)
119+
err = json.Unmarshal(jsonPlugin, destPluginComponent)
119120
if err != nil {
120121
return err
121122
}
122123
dest.Plugin = destPluginComponent
123124
} else {
124-
yamlComponent, err := yaml.Marshal(src)
125+
jsonComponent, err := json.Marshal(src)
125126
if err != nil {
126127
return err
127128
}
128-
err = yaml.Unmarshal(yamlComponent, &dest)
129+
err = json.Unmarshal(jsonComponent, &dest)
129130
if err != nil {
130131
return err
131132
}
@@ -165,11 +166,11 @@ func convertParentFrom_v1alpha2(src *v1alpha2.Parent, dest *Parent) error {
165166
for _, srcParentProject := range src.Projects {
166167
destProject := Project{}
167168
srcProject := v1alpha2.Project{}
168-
yamlProject, err := yaml.Marshal(srcParentProject)
169+
jsonProject, err := json.Marshal(srcParentProject)
169170
if err != nil {
170171
return err
171172
}
172-
err = yaml.Unmarshal(yamlProject, &srcProject)
173+
err = json.Unmarshal(jsonProject, &srcProject)
173174
if err != nil {
174175
return err
175176
}
@@ -183,11 +184,11 @@ func convertParentFrom_v1alpha2(src *v1alpha2.Parent, dest *Parent) error {
183184
for _, srcParentProject := range src.StarterProjects {
184185
destProject := StarterProject{}
185186
srcProject := v1alpha2.StarterProject{}
186-
yamlProject, err := yaml.Marshal(srcParentProject)
187+
jsonProject, err := json.Marshal(srcParentProject)
187188
if err != nil {
188189
return err
189190
}
190-
err = yaml.Unmarshal(yamlProject, &srcProject)
191+
err = json.Unmarshal(jsonProject, &srcProject)
191192
if err != nil {
192193
return err
193194
}
@@ -203,11 +204,11 @@ func convertParentFrom_v1alpha2(src *v1alpha2.Parent, dest *Parent) error {
203204

204205
func convertParentCommandFrom_v1alpha2(src *v1alpha2.CommandParentOverride, dest *Command) error {
205206
srcId := src.Key()
206-
yamlCommand, err := yaml.Marshal(src)
207+
jsonCommand, err := json.Marshal(src)
207208
if err != nil {
208209
return err
209210
}
210-
err = yaml.Unmarshal(yamlCommand, &dest)
211+
err = json.Unmarshal(jsonCommand, &dest)
211212
if err != nil {
212213
return err
213214
}
@@ -231,15 +232,15 @@ func convertParentComponentFrom_v1alpha2(src *v1alpha2.ComponentParentOverride,
231232

232233
if src.Plugin != nil {
233234
// If the parent component is a Plugin, we need to first convert it to v1alpha2.Component, then to a v1alpha1.Component
234-
// Through the yaml representation of v1alpha2 Plugin and PluginComponentParentOverride is identical they're not assignable in go
235-
// so we convert with a yaml intermediary
235+
// Through the json representation of v1alpha2 Plugin and PluginComponentParentOverride is identical they're not assignable in go
236+
// so we convert with a json intermediary
236237
srcPluginComponent := &v1alpha2.PluginComponent{}
237238
v1alpha2Component := v1alpha2.Component{}
238-
yamlPlugin, err := yaml.Marshal(src.Plugin)
239+
jsonPlugin, err := json.Marshal(src.Plugin)
239240
if err != nil {
240241
return err
241242
}
242-
err = yaml.Unmarshal(yamlPlugin, srcPluginComponent)
243+
err = json.Unmarshal(jsonPlugin, srcPluginComponent)
243244
if err != nil {
244245
return err
245246
}
@@ -250,11 +251,11 @@ func convertParentComponentFrom_v1alpha2(src *v1alpha2.ComponentParentOverride,
250251
return err
251252
}
252253
} else {
253-
yamlComponent, err := yaml.Marshal(src)
254+
jsonComponent, err := json.Marshal(src)
254255
if err != nil {
255256
return err
256257
}
257-
err = yaml.Unmarshal(yamlComponent, &dest)
258+
err = json.Unmarshal(jsonComponent, &dest)
258259
if err != nil {
259260
return err
260261
}

pkg/apis/workspaces/v1alpha1/parent_conversion_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ func TestParentConversion_v1alpha1(t *testing.T) {
1616
parentProjectFuzzFunc,
1717
pluginComponentsOverrideFuzzFunc,
1818
pluginComponentFuzzFunc,
19-
stringFuzzFunc,
2019
rawExtFuzzFunc,
2120
)
2221
for i := 0; i < fuzzIterations; i++ {

pkg/apis/workspaces/v1alpha1/plugin_conversion.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package v1alpha1
22

33
import (
4+
"encoding/json"
5+
46
"github.com/devfile/api/pkg/apis/workspaces/v1alpha2"
5-
"sigs.k8s.io/yaml"
67
)
78

89
func convertPluginComponentTo_v1alpha2(srcComponent *Component, destComponent *v1alpha2.Component) error {
@@ -54,11 +55,11 @@ func convertPluginComponentCommandTo_v1alpha2(src *Command, dest *v1alpha2.Comma
5455
if err != nil {
5556
return err
5657
}
57-
yamlCommand, err := yaml.Marshal(src)
58+
jsonCommand, err := json.Marshal(src)
5859
if err != nil {
5960
return err
6061
}
61-
err = yaml.Unmarshal(yamlCommand, &dest)
62+
err = json.Unmarshal(jsonCommand, &dest)
6263
if err != nil {
6364
return err
6465
}
@@ -71,11 +72,11 @@ func convertPluginComponentSubComponentTo_v1alpha2(src *PluginComponentsOverride
7172
if err != nil {
7273
return err
7374
}
74-
yamlComponent, err := yaml.Marshal(src)
75+
jsonComponent, err := json.Marshal(src)
7576
if err != nil {
7677
return err
7778
}
78-
err = yaml.Unmarshal(yamlComponent, dest)
79+
err = json.Unmarshal(jsonComponent, dest)
7980
if err != nil {
8081
return err
8182
}
@@ -122,11 +123,11 @@ func convertPluginComponentFrom_v1alpha2(srcComponent *v1alpha2.Component, destC
122123

123124
func convertPluginComponentCommandFrom_v1alpha2(src *v1alpha2.CommandPluginOverride, dest *Command) error {
124125
srcId := src.Key()
125-
yamlCommand, err := yaml.Marshal(src)
126+
jsonCommand, err := json.Marshal(src)
126127
if err != nil {
127128
return err
128129
}
129-
err = yaml.Unmarshal(yamlCommand, &dest)
130+
err = json.Unmarshal(jsonCommand, &dest)
130131
if err != nil {
131132
return err
132133
}
@@ -147,11 +148,11 @@ func convertPluginComponentCommandFrom_v1alpha2(src *v1alpha2.CommandPluginOverr
147148

148149
func convertPluginComponentSubComponentFrom_v1alpha2(src *v1alpha2.ComponentPluginOverride, dest *PluginComponentsOverride) error {
149150
srcName := src.Key()
150-
yamlComponent, err := yaml.Marshal(src)
151+
jsonComponent, err := json.Marshal(src)
151152
if err != nil {
152153
return err
153154
}
154-
err = yaml.Unmarshal(yamlComponent, &dest)
155+
err = json.Unmarshal(jsonComponent, &dest)
155156
if err != nil {
156157
return err
157158
}

0 commit comments

Comments
 (0)