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 (
"io/ioutil"
"math/rand"
"testing"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/testapi"
apitesting "k8s.io/kubernetes/pkg/api/testing"
"k8s.io/kubernetes/pkg/runtime"
)
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")
if err != nil {
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 {
b.Fatalf("Unexpected error decoding pod: %v", err)
}
items = append(items, pod)
width := len(items)
scheme := api.Scheme
var result *api.Pod
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 {
b.Fatalf("Conversion error: %v", err)
}
@ -48,9 +60,7 @@ func BenchmarkPodConversion(b *testing.B) {
}
result = obj.(*api.Pod)
}
if !api.Semantic.DeepDerivative(pod, *result) {
b.Fatalf("Incorrect conversion: expected %v, got %v", pod, *result)
}
b.Log(result)
}
func BenchmarkNodeConversion(b *testing.B) {

View File

@ -275,7 +275,13 @@ func benchmarkItems() []v1.Pod {
apiObjectFuzzer := apitesting.FuzzerFor(nil, api.SchemeGroupVersion, rand.NewSource(benchmarkSeed))
items := make([]v1.Pod, 2)
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
}