diff --git a/pkg/api/testing/BUILD b/pkg/api/testing/BUILD index b1a1b19be3b..66a98efbe00 100644 --- a/pkg/api/testing/BUILD +++ b/pkg/api/testing/BUILD @@ -112,5 +112,6 @@ go_test( "//vendor/github.com/gogo/protobuf/proto:go_default_library", "//vendor/github.com/google/gofuzz:go_default_library", "//vendor/github.com/json-iterator/go:go_default_library", + "//vendor/sigs.k8s.io/yaml:go_default_library", ], ) diff --git a/pkg/api/testing/serialization_test.go b/pkg/api/testing/serialization_test.go index e841f956f64..5c10f07a4e7 100644 --- a/pkg/api/testing/serialization_test.go +++ b/pkg/api/testing/serialization_test.go @@ -47,6 +47,7 @@ import ( k8s_apps_v1 "k8s.io/kubernetes/pkg/apis/apps/v1" api "k8s.io/kubernetes/pkg/apis/core" k8s_api_v1 "k8s.io/kubernetes/pkg/apis/core/v1" + "sigs.k8s.io/yaml" ) // fuzzInternalObject fuzzes an arbitrary runtime object using the appropriate @@ -634,3 +635,40 @@ func BenchmarkDecodeIntoJSONCodecGenConfigCompatibleWithStandardLibrary(b *testi } b.StopTimer() } + +// BenchmarkEncodeYAMLMarshal provides a baseline for regular YAML encode performance +func BenchmarkEncodeYAMLMarshal(b *testing.B) { + items := benchmarkItems(b) + width := len(items) + b.ResetTimer() + for i := 0; i < b.N; i++ { + if _, err := yaml.Marshal(&items[i%width]); err != nil { + b.Fatal(err) + } + } + b.StopTimer() +} + +// BenchmarkDecodeYAML provides a baseline for regular YAML decode performance +func BenchmarkDecodeIntoYAML(b *testing.B) { + codec := testapi.Default.Codec() + items := benchmarkItems(b) + width := len(items) + encoded := make([][]byte, width) + for i := range items { + data, err := runtime.Encode(codec, &items[i]) + if err != nil { + b.Fatal(err) + } + encoded[i] = data + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + obj := v1.Pod{} + if err := yaml.Unmarshal(encoded[i%width], &obj); err != nil { + b.Fatal(err) + } + } + b.StopTimer() +}