| ... | ... |
@@ -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) {
|