@@ -345,6 +345,33 @@ func TestDecode(t *testing.T) {
345
345
}
346
346
},
347
347
},
348
+ {
349
+ name : "raw types not transcoded" ,
350
+ options : []Option {Transcode (false )},
351
+ data : []byte {0xa4 , 0x41 , 'f' , 0xa1 , 0x41 , 'a' , 0x01 , 0x42 , 'f' , 'p' , 0xa1 , 0x41 , 'z' , 0x02 , 0x41 , 'r' , 0xa1 , 0x41 , 'b' , 0x03 , 0x42 , 'r' , 'p' , 0xa1 , 0x41 , 'y' , 0x04 },
352
+ gvk : & schema.GroupVersionKind {},
353
+ metaFactory : stubMetaFactory {gvk : & schema.GroupVersionKind {}},
354
+ typer : stubTyper {gvks : []schema.GroupVersionKind {{Group : "x" , Version : "y" , Kind : "z" }}},
355
+ into : & structWithRawFields {},
356
+ expectedObj : & structWithRawFields {
357
+ FieldsV1 : metav1.FieldsV1 {Raw : []byte {0xa1 , 0x41 , 'a' , 0x01 }},
358
+ FieldsV1Pointer : & metav1.FieldsV1 {Raw : []byte {0xa1 , 0x41 , 'z' , 0x02 }},
359
+ // RawExtension's UnmarshalCBOR ensures the self-described CBOR tag
360
+ // is present in the result so that there is never any ambiguity in
361
+ // distinguishing CBOR from JSON or Protobuf. It is unnecessary for
362
+ // FieldsV1 to do the same because the initial byte is always
363
+ // sufficient to distinguish a valid JSON-encoded FieldsV1 from a
364
+ // valid CBOR-encoded FieldsV1.
365
+ RawExtension : runtime.RawExtension {Raw : []byte {0xd9 , 0xd9 , 0xf7 , 0xa1 , 0x41 , 'b' , 0x03 }},
366
+ RawExtensionPointer : & runtime.RawExtension {Raw : []byte {0xd9 , 0xd9 , 0xf7 , 0xa1 , 0x41 , 'y' , 0x04 }},
367
+ },
368
+ expectedGVK : & schema.GroupVersionKind {Group : "x" , Version : "y" , Kind : "z" },
369
+ assertOnError : func (t * testing.T , err error ) {
370
+ if err != nil {
371
+ t .Errorf ("expected nil error, got: %v" , err )
372
+ }
373
+ },
374
+ },
348
375
{
349
376
name : "object with embedded typemeta and objectmeta" ,
350
377
data : []byte ("\xa2 \x48 metadata\xa1 \x44 name\x43 foo\x44 spec\xa0 " ), // {"metadata": {"name": "foo"}}
0 commit comments