Merge pull request #82927 from obitech/kube_proxy_strict_serializer

Enable strict serializer in kube-proxy
This commit is contained in:
Kubernetes Prow Robot 2019-10-09 11:05:50 -07:00 committed by GitHub
commit 0ff761b14f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 11 deletions

View File

@ -167,6 +167,7 @@ go_test(
"//pkg/proxy/apis/config:go_default_library", "//pkg/proxy/apis/config:go_default_library",
"//pkg/util/configz:go_default_library", "//pkg/util/configz:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//staging/src/k8s.io/component-base/config:go_default_library", "//staging/src/k8s.io/component-base/config:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library",

View File

@ -30,12 +30,14 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
utilpointer "k8s.io/utils/pointer"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kuberuntime "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/diff"
componentbaseconfig "k8s.io/component-base/config" componentbaseconfig "k8s.io/component-base/config"
kubeproxyconfig "k8s.io/kubernetes/pkg/proxy/apis/config" kubeproxyconfig "k8s.io/kubernetes/pkg/proxy/apis/config"
"k8s.io/kubernetes/pkg/util/configz" "k8s.io/kubernetes/pkg/util/configz"
utilpointer "k8s.io/utils/pointer"
) )
// This test verifies that NewProxyServer does not crash when CleanupAndExit is true. // This test verifies that NewProxyServer does not crash when CleanupAndExit is true.
@ -279,10 +281,16 @@ nodePortAddresses:
// TestLoadConfigFailures tests failure modes for loadConfig() // TestLoadConfigFailures tests failure modes for loadConfig()
func TestLoadConfigFailures(t *testing.T) { func TestLoadConfigFailures(t *testing.T) {
yamlTemplate := `bindAddress: 0.0.0.0
clusterCIDR: "1.2.3.0/24"
configSyncPeriod: 15s
kind: KubeProxyConfiguration`
testCases := []struct { testCases := []struct {
name string name string
config string config string
expErr string expErr string
checkFn func(err error) bool
}{ }{
{ {
name: "Decode error test", name: "Decode error test",
@ -299,15 +307,34 @@ func TestLoadConfigFailures(t *testing.T) {
config: "bindAddress: ::", config: "bindAddress: ::",
expErr: "mapping values are not allowed in this context", expErr: "mapping values are not allowed in this context",
}, },
{
name: "Duplicate fields",
config: fmt.Sprintf("%s\nbindAddess: 1.2.3.4", yamlTemplate),
checkFn: kuberuntime.IsStrictDecodingError,
},
{
name: "Unknown field",
config: fmt.Sprintf("%s\nfoo: bar", yamlTemplate),
checkFn: kuberuntime.IsStrictDecodingError,
},
} }
version := "apiVersion: kubeproxy.config.k8s.io/v1alpha1" version := "apiVersion: kubeproxy.config.k8s.io/v1alpha1"
for _, tc := range testCases { for _, tc := range testCases {
options := NewOptions() t.Run(tc.name, func(t *testing.T) {
config := fmt.Sprintf("%s\n%s", version, tc.config) options := NewOptions()
_, err := options.loadConfig([]byte(config)) config := fmt.Sprintf("%s\n%s", version, tc.config)
if assert.Error(t, err, tc.name) { _, err := options.loadConfig([]byte(config))
assert.Contains(t, err.Error(), tc.expErr, tc.name)
} if assert.Error(t, err, tc.name) {
if tc.expErr != "" {
assert.Contains(t, err.Error(), tc.expErr)
}
if tc.checkFn != nil {
assert.True(t, tc.checkFn(err), tc.name)
}
}
})
} }
} }

View File

@ -29,7 +29,7 @@ var (
Scheme = runtime.NewScheme() Scheme = runtime.NewScheme()
// Codecs provides methods for retrieving codecs and serializers for specific // Codecs provides methods for retrieving codecs and serializers for specific
// versions and content types. // versions and content types.
Codecs = serializer.NewCodecFactory(Scheme) Codecs = serializer.NewCodecFactory(Scheme, serializer.EnableStrict)
) )
func init() { func init() {