Skip to content

Commit ae20937

Browse files
committed
AdmissionConfiguration now uses strict validation
1 parent d1e03f3 commit ae20937

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

staging/src/k8s.io/apiserver/pkg/admission/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func ReadAdmissionConfiguration(pluginNames []string, configFilePath string, con
6363
if err != nil {
6464
return nil, fmt.Errorf("unable to read admission control configuration from %q [%v]", configFilePath, err)
6565
}
66-
codecs := serializer.NewCodecFactory(configScheme)
66+
codecs := serializer.NewCodecFactory(configScheme, serializer.EnableStrict)
6767
decoder := codecs.UniversalDecoder()
6868
decodedObj, err := runtime.Decode(decoder, data)
6969
// we were able to decode the file successfully

staging/src/k8s.io/apiserver/pkg/admission/config_test.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"reflect"
2323
"testing"
2424

25+
"github.com/stretchr/testify/assert"
2526
"github.com/stretchr/testify/require"
2627

2728
"k8s.io/apimachinery/pkg/runtime"
@@ -52,7 +53,28 @@ func TestReadAdmissionConfiguration(t *testing.T) {
5253
ConfigBody string
5354
ExpectedAdmissionConfig *apiserver.AdmissionConfiguration
5455
PluginNames []string
56+
ExpectedError string
5557
}{
58+
"duplicate field configuration error": {
59+
ConfigBody: `{
60+
"apiVersion": "apiserver.k8s.io/v1alpha1",
61+
"kind": "AdmissionConfiguration",
62+
"plugins": [
63+
{"name": "ImagePolicyWebhook-duplicate", "name": "ImagePolicyWebhook", "path": "image-policy-webhook.json"},
64+
{"name": "ResourceQuota"}
65+
]}`,
66+
ExpectedError: "strict decoding error: duplicate field",
67+
},
68+
"unknown field configuration error": {
69+
ConfigBody: `{
70+
"apiVersion": "apiserver.k8s.io/v1alpha1",
71+
"kind": "AdmissionConfiguration",
72+
"plugins": [
73+
{"foo": "bar", "name": "ImagePolicyWebhook", "path": "image-policy-webhook.json"},
74+
{"name": "ResourceQuota"}
75+
]}`,
76+
ExpectedError: "strict decoding error: unknown field",
77+
},
5678
"v1alpha1 configuration - path fixup": {
5779
ConfigBody: `{
5880
"apiVersion": "apiserver.k8s.io/v1alpha1",
@@ -192,12 +214,18 @@ func TestReadAdmissionConfiguration(t *testing.T) {
192214
t.Fatalf("unexpected err writing temp file: %v", err)
193215
}
194216
config, err := ReadAdmissionConfiguration(testCase.PluginNames, configFileName, scheme)
195-
if err != nil {
217+
if testCase.ExpectedError != "" {
218+
if err != nil {
219+
assert.Contains(t, err.Error(), testCase.ExpectedError)
220+
} else {
221+
t.Fatalf("expected error %q but received none", testCase.ExpectedError)
222+
}
223+
} else if err != nil {
196224
t.Fatalf("unexpected err: %v", err)
225+
} else if !reflect.DeepEqual(config.(configProvider).config, testCase.ExpectedAdmissionConfig) {
226+
t.Fatalf("%s: Expected:\n\t%#v\nGot:\n\t%#v", testName, testCase.ExpectedAdmissionConfig, config.(configProvider).config)
197227
}
198-
if !reflect.DeepEqual(config.(configProvider).config, testCase.ExpectedAdmissionConfig) {
199-
t.Errorf("%s: Expected:\n\t%#v\nGot:\n\t%#v", testName, testCase.ExpectedAdmissionConfig, config.(configProvider).config)
200-
}
228+
201229
}
202230
}
203231

0 commit comments

Comments
 (0)