Merge pull request #24906 from smarterclayton/better_benchmark

Automatic merge from submit-queue

Slightly more effective conversion test (better variety)

Exercises more code paths for debugging memory allocations.
pull/6/head
k8s-merge-robot 2016-04-28 23:17:57 -07:00
commit 8f9bff5b25
2 changed files with 21 additions and 5 deletions

View File

@ -18,14 +18,23 @@ package api_test
import ( import (
"io/ioutil" "io/ioutil"
"math/rand"
"testing" "testing"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/testapi"
apitesting "k8s.io/kubernetes/pkg/api/testing"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
) )
func BenchmarkPodConversion(b *testing.B) { func BenchmarkPodConversion(b *testing.B) {
apiObjectFuzzer := apitesting.FuzzerFor(nil, api.SchemeGroupVersion, rand.NewSource(benchmarkSeed))
items := make([]api.Pod, 4)
for i := range items {
apiObjectFuzzer.Fuzz(&items[i])
}
// add a fixed item
data, err := ioutil.ReadFile("pod_example.json") data, err := ioutil.ReadFile("pod_example.json")
if err != nil { if err != nil {
b.Fatalf("Unexpected error while reading file: %v", err) b.Fatalf("Unexpected error while reading file: %v", err)
@ -34,11 +43,14 @@ func BenchmarkPodConversion(b *testing.B) {
if err := runtime.DecodeInto(testapi.Default.Codec(), data, &pod); err != nil { if err := runtime.DecodeInto(testapi.Default.Codec(), data, &pod); err != nil {
b.Fatalf("Unexpected error decoding pod: %v", err) b.Fatalf("Unexpected error decoding pod: %v", err)
} }
items = append(items, pod)
width := len(items)
scheme := api.Scheme scheme := api.Scheme
var result *api.Pod var result *api.Pod
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
versionedObj, err := scheme.ConvertToVersion(&pod, testapi.Default.GroupVersion().String()) pod := &items[i%width]
versionedObj, err := scheme.ConvertToVersion(pod, testapi.Default.GroupVersion().String())
if err != nil { if err != nil {
b.Fatalf("Conversion error: %v", err) b.Fatalf("Conversion error: %v", err)
} }
@ -48,9 +60,7 @@ func BenchmarkPodConversion(b *testing.B) {
} }
result = obj.(*api.Pod) result = obj.(*api.Pod)
} }
if !api.Semantic.DeepDerivative(pod, *result) { b.Log(result)
b.Fatalf("Incorrect conversion: expected %v, got %v", pod, *result)
}
} }
func BenchmarkNodeConversion(b *testing.B) { func BenchmarkNodeConversion(b *testing.B) {

View File

@ -275,7 +275,13 @@ func benchmarkItems() []v1.Pod {
apiObjectFuzzer := apitesting.FuzzerFor(nil, api.SchemeGroupVersion, rand.NewSource(benchmarkSeed)) apiObjectFuzzer := apitesting.FuzzerFor(nil, api.SchemeGroupVersion, rand.NewSource(benchmarkSeed))
items := make([]v1.Pod, 2) items := make([]v1.Pod, 2)
for i := range items { for i := range items {
apiObjectFuzzer.Fuzz(&items[i]) var pod api.Pod
apiObjectFuzzer.Fuzz(&pod)
out, err := api.Scheme.ConvertToVersion(&pod, "v1")
if err != nil {
panic(err)
}
items[i] = *out.(*v1.Pod)
} }
return items return items
} }