Skip to content

Commit 6dde8da

Browse files
authored
Merge pull request kubernetes#83030 from obitech/kube_scheduler_strict_serializer
Enable strict serializer in kube-scheduler
2 parents 7fab683 + 6acef2b commit 6dde8da

File tree

3 files changed

+55
-7
lines changed

3 files changed

+55
-7
lines changed

cmd/kube-scheduler/app/options/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,6 @@ go_test(
7575
"//staging/src/k8s.io/apimachinery/pkg/util/rand:go_default_library",
7676
"//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library",
7777
"//staging/src/k8s.io/component-base/config:go_default_library",
78+
"//vendor/github.com/stretchr/testify/assert:go_default_library",
7879
],
7980
)

cmd/kube-scheduler/app/options/options_test.go

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

30+
"github.com/stretchr/testify/assert"
31+
3132
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3233
"k8s.io/apimachinery/pkg/runtime"
3334
"k8s.io/apimachinery/pkg/util/diff"
@@ -112,7 +113,7 @@ leaderElection:
112113
t.Fatal(err)
113114
}
114115

115-
invalidconfigFile := filepath.Join(tmpDir, "scheduler_invalid.yaml")
116+
invalidconfigFile := filepath.Join(tmpDir, "scheduler_invalid_wrong_api_version.yaml")
116117
if err := ioutil.WriteFile(invalidconfigFile, []byte(fmt.Sprintf(`
117118
apiVersion: componentconfig/v1alpha2
118119
kind: KubeSchedulerConfiguration
@@ -123,6 +124,30 @@ leaderElection:
123124
t.Fatal(err)
124125
}
125126

127+
unknownFieldConfig := filepath.Join(tmpDir, "scheduler_invalid_unknown_field.yaml")
128+
if err := ioutil.WriteFile(unknownFieldConfig, []byte(fmt.Sprintf(`
129+
apiVersion: kubescheduler.config.k8s.io/v1alpha1
130+
kind: KubeSchedulerConfiguration
131+
clientConnection:
132+
kubeconfig: "%s"
133+
leaderElection:
134+
leaderElect: true
135+
foo: bar`, configKubeconfig)), os.FileMode(0600)); err != nil {
136+
t.Fatal(err)
137+
}
138+
139+
duplicateFieldConfig := filepath.Join(tmpDir, "scheduler_invalid_duplicate_fields.yaml")
140+
if err := ioutil.WriteFile(duplicateFieldConfig, []byte(fmt.Sprintf(`
141+
apiVersion: kubescheduler.config.k8s.io/v1alpha1
142+
kind: KubeSchedulerConfiguration
143+
clientConnection:
144+
kubeconfig: "%s"
145+
leaderElection:
146+
leaderElect: true
147+
leaderElect: false`, configKubeconfig)), os.FileMode(0600)); err != nil {
148+
t.Fatal(err)
149+
}
150+
126151
// flag-specified kubeconfig
127152
flagKubeconfig := filepath.Join(tmpDir, "flag.kubeconfig")
128153
if err := ioutil.WriteFile(flagKubeconfig, []byte(fmt.Sprintf(`
@@ -189,6 +214,7 @@ pluginConfig:
189214
expectedUsername string
190215
expectedError string
191216
expectedConfig kubeschedulerconfig.KubeSchedulerConfiguration
217+
checkErrFn func(err error) bool
192218
}{
193219
{
194220
name: "config file",
@@ -433,6 +459,22 @@ pluginConfig:
433459
options: &Options{},
434460
expectedError: "no configuration has been provided",
435461
},
462+
{
463+
name: "unknown field",
464+
options: &Options{
465+
ConfigFile: unknownFieldConfig,
466+
},
467+
expectedError: "found unknown field: foo",
468+
checkErrFn: runtime.IsStrictDecodingError,
469+
},
470+
{
471+
name: "duplicate fields",
472+
options: &Options{
473+
ConfigFile: duplicateFieldConfig,
474+
},
475+
expectedError: `key "leaderElect" already set`,
476+
checkErrFn: runtime.IsStrictDecodingError,
477+
},
436478
}
437479

438480
for _, tc := range testcases {
@@ -442,11 +484,16 @@ pluginConfig:
442484

443485
// handle errors
444486
if err != nil {
445-
if tc.expectedError == "" {
446-
t.Error(err)
447-
} else if !strings.Contains(err.Error(), tc.expectedError) {
448-
t.Errorf("expected %q, got %q", tc.expectedError, err.Error())
487+
if tc.expectedError != "" || tc.checkErrFn != nil {
488+
if tc.expectedError != "" {
489+
assert.Contains(t, err.Error(), tc.expectedError, tc.name)
490+
}
491+
if tc.checkErrFn != nil {
492+
assert.True(t, tc.checkErrFn(err), "got error: %v", err)
493+
}
494+
return
449495
}
496+
assert.NoError(t, err)
450497
return
451498
}
452499

pkg/scheduler/apis/config/scheme/scheme.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ var (
2929
Scheme = runtime.NewScheme()
3030

3131
// Codecs provides access to encoding and decoding for the scheme.
32-
Codecs = serializer.NewCodecFactory(Scheme)
32+
Codecs = serializer.NewCodecFactory(Scheme, serializer.EnableStrict)
3333
)
3434

3535
func init() {

0 commit comments

Comments
 (0)