123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package json
- import (
- "bytes"
- "k8s.io/apimachinery/pkg/runtime"
- "k8s.io/apimachinery/pkg/runtime/schema"
- "k8s.io/apimachinery/pkg/runtime/serializer/json"
- )
- var (
- gvk = &schema.GroupVersionKind{Version: "v1"}
- strictOpt = json.SerializerOptions{Yaml: false, Pretty: false, Strict: true}
- strictYamlOpt = json.SerializerOptions{Yaml: true, Pretty: false, Strict: true}
- strictPrettyOpt = json.SerializerOptions{Yaml: false, Pretty: true, Strict: true}
- nonstrictOpt = json.SerializerOptions{Yaml: false, Pretty: false, Strict: false}
- nonstrictYamlOpt = json.SerializerOptions{Yaml: true, Pretty: false, Strict: false}
- nonstrictPrettyOpt = json.SerializerOptions{Yaml: false, Pretty: true, Strict: false}
- scheme = runtime.NewScheme()
- strictSer = json.NewSerializerWithOptions(json.DefaultMetaFactory, scheme, scheme, strictOpt)
- ysSer = json.NewSerializerWithOptions(json.DefaultMetaFactory, scheme, scheme, strictYamlOpt)
- psSer = json.NewSerializerWithOptions(json.DefaultMetaFactory, scheme, scheme, strictPrettyOpt)
- nonstrictSer = json.NewSerializerWithOptions(json.DefaultMetaFactory, scheme, scheme, nonstrictOpt)
- ynsSer = json.NewSerializerWithOptions(json.DefaultMetaFactory, scheme, scheme, nonstrictYamlOpt)
- pnsSer = json.NewSerializerWithOptions(json.DefaultMetaFactory, scheme, scheme, nonstrictPrettyOpt)
- )
- func FuzzStrictDecode(data []byte) int {
- obj0, _, err0 := strictSer.Decode(data, gvk, nil)
- obj1, _, err1 := nonstrictSer.Decode(data, gvk, nil)
- obj2, _, err2 := ysSer.Decode(data, gvk, nil)
- obj3, _, err3 := psSer.Decode(data, gvk, nil)
- if obj0 == nil {
- if obj1 != nil {
- panic("NonStrict is stricter than Strict")
- }
- if obj2 != nil {
- panic("Yaml strict different from plain strict")
- }
- if obj3 != nil {
- panic("Pretty strict different from plain strict")
- }
- if err0 == nil || err1 == nil || err2 == nil || err3 == nil {
- panic("no error")
- }
- return 0
- }
- if err0 != nil {
- panic("got object and error for strict")
- }
- if err2 != nil {
- panic("got object and error for yaml strict")
- }
- if err3 != nil {
- panic("got object and error pretty strict")
- }
- var b0 bytes.Buffer
- err4 := strictSer.Encode(obj0, &b0)
- if err4 != nil {
- panic("Can't encode decoded data")
- }
- if !bytes.Equal(b0.Bytes(), data) {
- panic("Encoded data doesn't match original")
- }
- b0.Reset()
- err5 := ysSer.Encode(obj1, &b0)
- if err5 != nil {
- panic("Can't encode yaml strict decoded data")
- }
- if !bytes.Equal(b0.Bytes(), data) {
- panic("Encoded yaml strict data doesn't match original")
- }
- b0.Reset()
- err6 := psSer.Encode(obj2, &b0)
- if err6 != nil {
- panic("Can't encode pretty strict decoded data")
- }
- if !bytes.Equal(b0.Bytes(), data) {
- panic("Encoded pretty strict data doesn't match original")
- }
- b0.Reset()
- err7 := nonstrictSer.Encode(obj3, &b0)
- if err7 != nil {
- panic("Can't encode nonstrict decoded data")
- }
- if !bytes.Equal(b0.Bytes(), data) {
- panic("Encoded nonstrict data doesn't match original")
- }
- return 1
- }
- func FuzzNonStrictDecode(data []byte) int {
- obj0, _, err0 := nonstrictSer.Decode(data, gvk, nil)
- if err0 != nil {
- return 0
- }
- var b0 bytes.Buffer
- err1 := nonstrictSer.Encode(obj0, &b0)
- if err1 != nil {
- panic("Can't nonstrict encode decoded data")
- }
- _, _, err2 := nonstrictSer.Decode(b0.Bytes(), gvk, nil)
- if err2 != nil {
- panic("Can't nonstrict decode encoded data")
- }
- b0.Reset()
- err3 := ynsSer.Encode(obj0, &b0)
- if err3 != nil {
- panic("Can't yaml strict encode decoded data")
- }
- _, _, err4 := nonstrictSer.Decode(b0.Bytes(), gvk, nil)
- if err4 != nil {
- panic("Can't nonstrict decode encoded data")
- }
- b0.Reset()
- err5 := pnsSer.Encode(obj0, &b0)
- if err5 != nil {
- panic("Can't pretty strict encode decoded data")
- }
- _, _, err6 := nonstrictSer.Decode(b0.Bytes(), gvk, nil)
- if err6 != nil {
- panic("Can't nonstrict decode encoded data")
- }
- return 1
- }
|