Browse code

Handle content type correctly in extensions

Clayton Coleman authored on 2016/07/14 05:40:00
Showing 3 changed files
... ...
@@ -70,8 +70,16 @@ func DecodeNestedRawExtensionOrUnknown(d runtime.Decoder, ext *runtime.RawExtens
70 70
 	}
71 71
 	obj, gvk, err := d.Decode(ext.Raw, nil, nil)
72 72
 	if err != nil {
73
-		// TODO: record mime-type with the object
74 73
 		unk := &runtime.Unknown{Raw: ext.Raw}
74
+		if runtime.IsNotRegisteredError(err) {
75
+			if _, gvk, err := d.Decode(ext.Raw, nil, unk); err == nil {
76
+				unk.APIVersion = gvk.GroupVersion().String()
77
+				unk.Kind = gvk.Kind
78
+				ext.Object = unk
79
+				return
80
+			}
81
+		}
82
+		// TODO: record mime-type with the object
75 83
 		if gvk != nil {
76 84
 			unk.APIVersion = gvk.GroupVersion().String()
77 85
 			unk.Kind = gvk.Kind
... ...
@@ -144,7 +144,7 @@ func fuzzInternalObject(t *testing.T, forVersion unversioned.GroupVersion, item
144 144
 			case 0:
145 145
 				j.AttributeRestrictions = &authorizationapi.IsPersonalSubjectAccessReview{}
146 146
 			case 1:
147
-				j.AttributeRestrictions = &runtime.Unknown{TypeMeta: runtime.TypeMeta{Kind: "Type", APIVersion: "other"}, Raw: []byte(`{"apiVersion":"other","kind":"Type"}`)}
147
+				j.AttributeRestrictions = &runtime.Unknown{TypeMeta: runtime.TypeMeta{Kind: "Type", APIVersion: "other"}, ContentType: "application/json", Raw: []byte(`{"apiVersion":"other","kind":"Type"}`)}
148 148
 			default:
149 149
 				j.AttributeRestrictions = nil
150 150
 			}
... ...
@@ -380,7 +380,7 @@ func TestSpecificRoundTrips(t *testing.T) {
380 380
 							Raw:    []byte(`{"kind":"LDAPSyncConfig","apiVersion":"v1","bindDN":"second"}`),
381 381
 						}},
382 382
 						"test3": {Configuration: runtime.RawExtension{
383
-							Object: &runtime.Unknown{TypeMeta: runtime.TypeMeta{Kind: "Unknown", APIVersion: "some/version"}, Raw: []byte(`{"kind":"Unknown","apiVersion":"some/version"}`)},
383
+							Object: &runtime.Unknown{TypeMeta: runtime.TypeMeta{Kind: "Unknown", APIVersion: "some/version"}, ContentType: "application/json", Raw: []byte(`{"kind":"Unknown","apiVersion":"some/version"}`)},
384 384
 							Raw:    []byte(`{"kind":"Unknown","apiVersion":"some/version"}`),
385 385
 						}},
386 386
 						"test4": {},
... ...
@@ -437,7 +437,8 @@ func fuzzerFor(t *testing.T, version unversioned.GroupVersion, src rand.Source)
437 437
 					APIVersion: "unknown.group/unknown",
438 438
 					Kind:       "Something",
439 439
 				},
440
-				Raw: []byte(`{"apiVersion":"unknown.group/unknown","kind":"Something","someKey":"someValue"}`),
440
+				ContentType: "application/json",
441
+				Raw:         []byte(`{"apiVersion":"unknown.group/unknown","kind":"Something","someKey":"someValue"}`),
441 442
 			}
442 443
 		},
443 444
 		func(j *unversioned.TypeMeta, c fuzz.Continue) {