Skip to content

Commit e54dedc

Browse files
authored
Merge pull request kubernetes#129376 from carlory/update-fg
run hack/update-featuregates.sh
2 parents 46708fa + 9d55fba commit e54dedc

File tree

2 files changed

+128
-24
lines changed

2 files changed

+128
-24
lines changed

test/featuregates_linter/cmd/feature_gates.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,15 @@ func verifyOrUpdateFeatureList(rootPath, featureListFile string, update, version
162162
}
163163
}
164164

165+
featureListBytes, err := yaml.Marshal(featureList)
166+
if err != nil {
167+
return err
168+
}
165169
if update {
166-
data, err := yaml.Marshal(featureList)
167-
if err != nil {
168-
return err
169-
}
170-
return os.WriteFile(filePath, data, 0644)
170+
return os.WriteFile(filePath, featureListBytes, 0644)
171171
}
172172

173-
if diff := cmp.Diff(featureList, baseFeatureList); diff != "" {
173+
if diff := cmp.Diff(featureListBytes, baseFeatureListBytes); diff != "" {
174174
if versioned {
175175
return fmt.Errorf("detected diff in versioned feature list (%s), diff: \n%s", versionedFeatureListFile, diff)
176176
} else {

test/featuregates_linter/cmd/feature_gates_test.go

Lines changed: 122 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"os"
2525
"path/filepath"
2626
"reflect"
27-
"strings"
2827
"testing"
2928

3029
"github.com/google/go-cmp/cmp"
@@ -111,6 +110,7 @@ func TestVerifyOrUpdateFeatureListUnversioned(t *testing.T) {
111110
tests := []struct {
112111
name string
113112
goFileContent string
113+
featureListFileContent string
114114
updatedFeatureListFileContent string
115115
expectVerifyErr bool
116116
expectUpdateErr bool
@@ -132,8 +132,48 @@ var otherFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
132132
AppArmorFields: {Default: true, PreRelease: featuregate.Beta},
133133
}
134134
`,
135+
featureListFileContent: featureListFileContent,
135136
updatedFeatureListFileContent: featureListFileContent,
136137
},
138+
{
139+
name: "semantically equivalent, formatting wrong",
140+
goFileContent: `
141+
package features
142+
143+
import (
144+
"k8s.io/component-base/featuregate"
145+
)
146+
var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
147+
AppArmorFields: {Default: true, PreRelease: featuregate.Beta},
148+
CPUCFSQuotaPeriod: {Default: false, PreRelease: featuregate.Alpha},
149+
ClusterTrustBundleProjection: {Default: false, PreRelease: featuregate.Alpha},
150+
}
151+
var otherFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
152+
AppArmorFields: {Default: true, PreRelease: featuregate.Beta},
153+
}
154+
`,
155+
featureListFileContent: `- name: AppArmorFields
156+
versionedSpecs:
157+
- default: true
158+
lockToDefault: false
159+
preRelease: Beta
160+
version: ""
161+
- name: ClusterTrustBundleProjection
162+
versionedSpecs:
163+
- default: false
164+
lockToDefault: false
165+
preRelease: Alpha
166+
version: ""
167+
- name: CPUCFSQuotaPeriod
168+
versionedSpecs:
169+
- default: false
170+
lockToDefault: false
171+
preRelease: Alpha
172+
version: ""
173+
`,
174+
updatedFeatureListFileContent: featureListFileContent,
175+
expectVerifyErr: true,
176+
},
137177
{
138178
name: "same feature added twice with different lifecycle",
139179
goFileContent: `
@@ -151,8 +191,9 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
151191
AppArmorFields: {Default: true, PreRelease: featuregate.Alpha},
152192
}
153193
`,
154-
expectVerifyErr: true,
155-
expectUpdateErr: true,
194+
featureListFileContent: featureListFileContent,
195+
expectVerifyErr: true,
196+
expectUpdateErr: true,
156197
},
157198
{
158199
name: "new feature added",
@@ -169,8 +210,9 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
169210
SELinuxMount: {Default: false, PreRelease: featuregate.Alpha},
170211
}
171212
`,
172-
expectVerifyErr: true,
173-
expectUpdateErr: true,
213+
featureListFileContent: featureListFileContent,
214+
expectVerifyErr: true,
215+
expectUpdateErr: true,
174216
},
175217
{
176218
name: "delete feature",
@@ -185,7 +227,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
185227
ClusterTrustBundleProjection: {Default: false, PreRelease: featuregate.Alpha},
186228
}
187229
`,
188-
expectVerifyErr: true,
230+
featureListFileContent: featureListFileContent,
231+
expectVerifyErr: true,
189232
updatedFeatureListFileContent: `- name: AppArmorFields
190233
versionedSpecs:
191234
- default: true
@@ -214,13 +257,14 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
214257
ClusterTrustBundleProjection: {Default: false, PreRelease: featuregate.Alpha},
215258
}
216259
`,
217-
expectVerifyErr: true,
218-
expectUpdateErr: true,
260+
featureListFileContent: featureListFileContent,
261+
expectVerifyErr: true,
262+
expectUpdateErr: true,
219263
},
220264
}
221265
for _, tc := range tests {
222266
t.Run(tc.name, func(t *testing.T) {
223-
featureListFile := writeContentToTmpFile(t, "", "feature_list.yaml", strings.TrimSpace(featureListFileContent))
267+
featureListFile := writeContentToTmpFile(t, "", "feature_list.yaml", tc.featureListFileContent)
224268
tmpDir := filepath.Dir(featureListFile.Name())
225269
_ = writeContentToTmpFile(t, tmpDir, "pkg/new_features.go", tc.goFileContent)
226270
err := verifyOrUpdateFeatureList(tmpDir, filepath.Base(featureListFile.Name()), false, false)
@@ -229,7 +273,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
229273
}
230274
err = verifyOrUpdateFeatureList(tmpDir, filepath.Base(featureListFile.Name()), true, false)
231275
if tc.expectUpdateErr != (err != nil) {
232-
t.Errorf("expectVerifyErr=%v, got err: %s", tc.expectVerifyErr, err)
276+
t.Errorf("expectUpdateErr=%v, got err: %s", tc.expectUpdateErr, err)
233277
}
234278
if tc.expectUpdateErr {
235279
return
@@ -272,6 +316,7 @@ func TestVerifyOrUpdateFeatureListVersioned(t *testing.T) {
272316
tests := []struct {
273317
name string
274318
goFileContent string
319+
featureListFileContent string
275320
updatedFeatureListFileContent string
276321
expectVerifyErr bool
277322
expectUpdateErr bool
@@ -302,8 +347,62 @@ var otherFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
302347
{Version: version.MajorMinor(1, 30), Default: true, PreRelease: featuregate.Beta},
303348
},
304349
}
350+
`,
351+
featureListFileContent: featureListFileContent,
352+
updatedFeatureListFileContent: featureListFileContent,
353+
},
354+
{
355+
name: "semantically equivalent, formatting wrong",
356+
goFileContent: `
357+
package features
358+
359+
import (
360+
"k8s.io/apimachinery/pkg/util/version"
361+
"k8s.io/component-base/featuregate"
362+
)
363+
var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
364+
AppArmorFields: {
365+
{Version: version.MajorMinor(1, 30), Default: true, PreRelease: featuregate.Beta},
366+
},
367+
CPUCFSQuotaPeriod: {
368+
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
369+
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta},
370+
},
371+
genericfeatures.APIListChunking: {
372+
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
373+
},
374+
}
375+
var otherFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
376+
AppArmorFields: {
377+
{Version: version.MajorMinor(1, 30), Default: true, PreRelease: featuregate.Beta},
378+
},
379+
}
380+
`,
381+
featureListFileContent: `- name: APIListChunking
382+
versionedSpecs:
383+
- default: true
384+
lockToDefault: true
385+
preRelease: GA
386+
version: "1.30"
387+
- name: AppArmorFields
388+
versionedSpecs:
389+
- default: true
390+
lockToDefault: false
391+
preRelease: Beta
392+
version: "1.30"
393+
- name: CPUCFSQuotaPeriod
394+
versionedSpecs:
395+
- default: false
396+
lockToDefault: false
397+
preRelease: Alpha
398+
version: "1.30"
399+
- default: true
400+
lockToDefault: false
401+
preRelease: Beta
402+
version: "1.31"
305403
`,
306404
updatedFeatureListFileContent: featureListFileContent,
405+
expectVerifyErr: true,
307406
},
308407
{
309408
name: "same feature added twice with different lifecycle",
@@ -332,8 +431,9 @@ var otherFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
332431
},
333432
}
334433
`,
335-
expectVerifyErr: true,
336-
expectUpdateErr: true,
434+
featureListFileContent: featureListFileContent,
435+
expectVerifyErr: true,
436+
expectUpdateErr: true,
337437
},
338438
{
339439
name: "VersionedSpecs not ordered by version",
@@ -357,8 +457,9 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
357457
},
358458
}
359459
`,
360-
expectVerifyErr: true,
361-
expectUpdateErr: true,
460+
featureListFileContent: featureListFileContent,
461+
expectVerifyErr: true,
462+
expectUpdateErr: true,
362463
},
363464
{
364465
name: "add new feature",
@@ -385,7 +486,8 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
385486
},
386487
}
387488
`,
388-
expectVerifyErr: true,
489+
expectVerifyErr: true,
490+
featureListFileContent: featureListFileContent,
389491
updatedFeatureListFileContent: `- name: APIListChunking
390492
versionedSpecs:
391493
- default: true
@@ -435,7 +537,8 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
435537
},
436538
}
437539
`,
438-
expectVerifyErr: true,
540+
expectVerifyErr: true,
541+
featureListFileContent: featureListFileContent,
439542
updatedFeatureListFileContent: `- name: APIListChunking
440543
versionedSpecs:
441544
- default: true
@@ -477,7 +580,8 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
477580
},
478581
}
479582
`,
480-
expectVerifyErr: true,
583+
expectVerifyErr: true,
584+
featureListFileContent: featureListFileContent,
481585
updatedFeatureListFileContent: `- name: APIListChunking
482586
versionedSpecs:
483587
- default: true
@@ -509,7 +613,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
509613
}
510614
for _, tc := range tests {
511615
t.Run(tc.name, func(t *testing.T) {
512-
featureListFile := writeContentToTmpFile(t, "", "feature_list.yaml", strings.TrimSpace(featureListFileContent))
616+
featureListFile := writeContentToTmpFile(t, "", "feature_list.yaml", tc.featureListFileContent)
513617
tmpDir := filepath.Dir(featureListFile.Name())
514618
_ = writeContentToTmpFile(t, tmpDir, "pkg/new_features.go", tc.goFileContent)
515619
err := verifyOrUpdateFeatureList(tmpDir, filepath.Base(featureListFile.Name()), false, true)

0 commit comments

Comments
 (0)