Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
6b6b6c74
Commit
6b6b6c74
authored
Jan 24, 2017
by
Dr. Stefan Schimanski
Committed by
Dr. Stefan Schimanski
Jan 29, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pkg/api/testing: split fuzzer between apimachinery and kube
parent
a12c6617
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
234 additions
and
37 deletions
+234
-37
conversion_test.go
pkg/api/conversion_test.go
+3
-2
copy_test.go
pkg/api/copy_test.go
+4
-3
serialization_proto_test.go
pkg/api/serialization_proto_test.go
+8
-7
serialization_test.go
pkg/api/serialization_test.go
+14
-13
fuzzer.go
pkg/api/testing/fuzzer.go
+0
-0
unstructured_test.go
pkg/api/unstructured_test.go
+4
-3
schema_test.go
pkg/api/validation/schema_test.go
+3
-2
apiserver_test.go
pkg/genericapiserver/endpoints/apiserver_test.go
+5
-4
watch_test.go
pkg/genericapiserver/endpoints/watch_test.go
+3
-3
fuzzer.go
staging/src/k8s.io/apimachinery/pkg/api/testing/fuzzer.go
+133
-0
register.go
staging/src/k8s.io/apimachinery/pkg/api/testing/register.go
+57
-0
No files found.
pkg/api/conversion_test.go
View file @
6b6b6c74
...
@@ -21,15 +21,16 @@ import (
...
@@ -21,15 +21,16 @@ import (
"math/rand"
"math/rand"
"testing"
"testing"
apitesting
"k8s.io/apimachinery/pkg/api/testing"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/diff"
"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"
k
apitesting
"k8s.io/kubernetes/pkg/api/testing"
)
)
func
BenchmarkPodConversion
(
b
*
testing
.
B
)
{
func
BenchmarkPodConversion
(
b
*
testing
.
B
)
{
apiObjectFuzzer
:=
apitesting
.
FuzzerFor
(
nil
,
api
.
SchemeGroupVersion
,
rand
.
NewSource
(
benchmarkSeed
))
apiObjectFuzzer
:=
apitesting
.
FuzzerFor
(
kapitesting
.
FuzzerFuncs
(
b
)
,
rand
.
NewSource
(
benchmarkSeed
))
items
:=
make
([]
api
.
Pod
,
4
)
items
:=
make
([]
api
.
Pod
,
4
)
for
i
:=
range
items
{
for
i
:=
range
items
{
apiObjectFuzzer
.
Fuzz
(
&
items
[
i
])
apiObjectFuzzer
.
Fuzz
(
&
items
[
i
])
...
...
pkg/api/copy_test.go
View file @
6b6b6c74
...
@@ -22,11 +22,12 @@ import (
...
@@ -22,11 +22,12 @@ import (
"reflect"
"reflect"
"testing"
"testing"
apitesting
"k8s.io/apimachinery/pkg/api/testing"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/diff"
"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"
k
apitesting
"k8s.io/kubernetes/pkg/api/testing"
"github.com/google/gofuzz"
"github.com/google/gofuzz"
)
)
...
@@ -34,7 +35,7 @@ import (
...
@@ -34,7 +35,7 @@ import (
func
TestDeepCopyApiObjects
(
t
*
testing
.
T
)
{
func
TestDeepCopyApiObjects
(
t
*
testing
.
T
)
{
for
i
:=
0
;
i
<
*
fuzzIters
;
i
++
{
for
i
:=
0
;
i
<
*
fuzzIters
;
i
++
{
for
_
,
version
:=
range
[]
schema
.
GroupVersion
{
testapi
.
Default
.
InternalGroupVersion
(),
api
.
Registry
.
GroupOrDie
(
api
.
GroupName
)
.
GroupVersion
}
{
for
_
,
version
:=
range
[]
schema
.
GroupVersion
{
testapi
.
Default
.
InternalGroupVersion
(),
api
.
Registry
.
GroupOrDie
(
api
.
GroupName
)
.
GroupVersion
}
{
f
:=
apitesting
.
FuzzerFor
(
t
,
version
,
rand
.
NewSource
(
rand
.
Int63
()))
f
:=
apitesting
.
FuzzerFor
(
kapitesting
.
FuzzerFuncs
(
t
)
,
rand
.
NewSource
(
rand
.
Int63
()))
for
kind
:=
range
api
.
Scheme
.
KnownTypes
(
version
)
{
for
kind
:=
range
api
.
Scheme
.
KnownTypes
(
version
)
{
doDeepCopyTest
(
t
,
version
.
WithKind
(
kind
),
f
)
doDeepCopyTest
(
t
,
version
.
WithKind
(
kind
),
f
)
}
}
...
@@ -83,7 +84,7 @@ func doDeepCopyTest(t *testing.T, kind schema.GroupVersionKind, f *fuzz.Fuzzer)
...
@@ -83,7 +84,7 @@ func doDeepCopyTest(t *testing.T, kind schema.GroupVersionKind, f *fuzz.Fuzzer)
func
TestDeepCopySingleType
(
t
*
testing
.
T
)
{
func
TestDeepCopySingleType
(
t
*
testing
.
T
)
{
for
i
:=
0
;
i
<
*
fuzzIters
;
i
++
{
for
i
:=
0
;
i
<
*
fuzzIters
;
i
++
{
for
_
,
version
:=
range
[]
schema
.
GroupVersion
{
testapi
.
Default
.
InternalGroupVersion
(),
api
.
Registry
.
GroupOrDie
(
api
.
GroupName
)
.
GroupVersion
}
{
for
_
,
version
:=
range
[]
schema
.
GroupVersion
{
testapi
.
Default
.
InternalGroupVersion
(),
api
.
Registry
.
GroupOrDie
(
api
.
GroupName
)
.
GroupVersion
}
{
f
:=
apitesting
.
FuzzerFor
(
t
,
version
,
rand
.
NewSource
(
rand
.
Int63
()))
f
:=
apitesting
.
FuzzerFor
(
kapitesting
.
FuzzerFuncs
(
t
)
,
rand
.
NewSource
(
rand
.
Int63
()))
doDeepCopyTest
(
t
,
version
.
WithKind
(
"Pod"
),
f
)
doDeepCopyTest
(
t
,
version
.
WithKind
(
"Pod"
),
f
)
}
}
}
}
...
...
pkg/api/serialization_proto_test.go
View file @
6b6b6c74
...
@@ -23,6 +23,7 @@ import (
...
@@ -23,6 +23,7 @@ import (
"testing"
"testing"
"github.com/gogo/protobuf/proto"
"github.com/gogo/protobuf/proto"
apitesting
"k8s.io/apimachinery/pkg/api/testing"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/schema"
...
@@ -31,7 +32,7 @@ import (
...
@@ -31,7 +32,7 @@ import (
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/sets"
"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"
k
apitesting
"k8s.io/kubernetes/pkg/api/testing"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1"
_
"k8s.io/kubernetes/pkg/apis/extensions"
_
"k8s.io/kubernetes/pkg/apis/extensions"
_
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
_
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
...
@@ -75,7 +76,7 @@ func TestUniversalDeserializer(t *testing.T) {
...
@@ -75,7 +76,7 @@ func TestUniversalDeserializer(t *testing.T) {
func
TestProtobufRoundTrip
(
t
*
testing
.
T
)
{
func
TestProtobufRoundTrip
(
t
*
testing
.
T
)
{
obj
:=
&
v1
.
Pod
{}
obj
:=
&
v1
.
Pod
{}
apitesting
.
FuzzerFor
(
t
,
v1
.
SchemeGroupVersion
,
rand
.
NewSource
(
benchmarkSeed
))
.
Fuzz
(
obj
)
apitesting
.
FuzzerFor
(
kapitesting
.
FuzzerFuncs
(
t
)
,
rand
.
NewSource
(
benchmarkSeed
))
.
Fuzz
(
obj
)
// InitContainers are turned into annotations by conversion.
// InitContainers are turned into annotations by conversion.
obj
.
Spec
.
InitContainers
=
nil
obj
.
Spec
.
InitContainers
=
nil
obj
.
Status
.
InitContainerStatuses
=
nil
obj
.
Status
.
InitContainerStatuses
=
nil
...
@@ -96,7 +97,7 @@ func TestProtobufRoundTrip(t *testing.T) {
...
@@ -96,7 +97,7 @@ func TestProtobufRoundTrip(t *testing.T) {
// BenchmarkEncodeCodec measures the cost of performing a codec encode, which includes
// BenchmarkEncodeCodec measures the cost of performing a codec encode, which includes
// reflection (to clear APIVersion and Kind)
// reflection (to clear APIVersion and Kind)
func
BenchmarkEncodeCodecProtobuf
(
b
*
testing
.
B
)
{
func
BenchmarkEncodeCodecProtobuf
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
s
:=
protobuf
.
NewSerializer
(
nil
,
nil
,
"application/arbitrary.content.type"
)
s
:=
protobuf
.
NewSerializer
(
nil
,
nil
,
"application/arbitrary.content.type"
)
b
.
ResetTimer
()
b
.
ResetTimer
()
...
@@ -111,7 +112,7 @@ func BenchmarkEncodeCodecProtobuf(b *testing.B) {
...
@@ -111,7 +112,7 @@ func BenchmarkEncodeCodecProtobuf(b *testing.B) {
// BenchmarkEncodeCodecFromInternalProtobuf measures the cost of performing a codec encode,
// BenchmarkEncodeCodecFromInternalProtobuf measures the cost of performing a codec encode,
// including conversions and any type setting. This is a "full" encode.
// including conversions and any type setting. This is a "full" encode.
func
BenchmarkEncodeCodecFromInternalProtobuf
(
b
*
testing
.
B
)
{
func
BenchmarkEncodeCodecFromInternalProtobuf
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
encodable
:=
make
([]
api
.
Pod
,
width
)
encodable
:=
make
([]
api
.
Pod
,
width
)
for
i
:=
range
items
{
for
i
:=
range
items
{
...
@@ -131,7 +132,7 @@ func BenchmarkEncodeCodecFromInternalProtobuf(b *testing.B) {
...
@@ -131,7 +132,7 @@ func BenchmarkEncodeCodecFromInternalProtobuf(b *testing.B) {
}
}
func
BenchmarkEncodeProtobufGeneratedMarshal
(
b
*
testing
.
B
)
{
func
BenchmarkEncodeProtobufGeneratedMarshal
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
b
.
ResetTimer
()
b
.
ResetTimer
()
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
...
@@ -145,7 +146,7 @@ func BenchmarkEncodeProtobufGeneratedMarshal(b *testing.B) {
...
@@ -145,7 +146,7 @@ func BenchmarkEncodeProtobufGeneratedMarshal(b *testing.B) {
// BenchmarkDecodeCodecToInternalProtobuf measures the cost of performing a codec decode,
// BenchmarkDecodeCodecToInternalProtobuf measures the cost of performing a codec decode,
// including conversions and any type setting. This is a "full" decode.
// including conversions and any type setting. This is a "full" decode.
func
BenchmarkDecodeCodecToInternalProtobuf
(
b
*
testing
.
B
)
{
func
BenchmarkDecodeCodecToInternalProtobuf
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
s
:=
protobuf
.
NewSerializer
(
api
.
Scheme
,
api
.
Scheme
,
"application/arbitrary.content.type"
)
s
:=
protobuf
.
NewSerializer
(
api
.
Scheme
,
api
.
Scheme
,
"application/arbitrary.content.type"
)
encoder
:=
api
.
Codecs
.
EncoderForVersion
(
s
,
v1
.
SchemeGroupVersion
)
encoder
:=
api
.
Codecs
.
EncoderForVersion
(
s
,
v1
.
SchemeGroupVersion
)
...
@@ -170,7 +171,7 @@ func BenchmarkDecodeCodecToInternalProtobuf(b *testing.B) {
...
@@ -170,7 +171,7 @@ func BenchmarkDecodeCodecToInternalProtobuf(b *testing.B) {
// BenchmarkDecodeJSON provides a baseline for regular JSON decode performance
// BenchmarkDecodeJSON provides a baseline for regular JSON decode performance
func
BenchmarkDecodeIntoProtobuf
(
b
*
testing
.
B
)
{
func
BenchmarkDecodeIntoProtobuf
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
encoded
:=
make
([][]
byte
,
width
)
encoded
:=
make
([][]
byte
,
width
)
for
i
:=
range
items
{
for
i
:=
range
items
{
...
...
pkg/api/serialization_test.go
View file @
6b6b6c74
...
@@ -33,6 +33,7 @@ import (
...
@@ -33,6 +33,7 @@ import (
"github.com/ugorji/go/codec"
"github.com/ugorji/go/codec"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/api/meta"
apitesting
"k8s.io/apimachinery/pkg/api/testing"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/conversion"
"k8s.io/apimachinery/pkg/conversion"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
...
@@ -43,7 +44,7 @@ import (
...
@@ -43,7 +44,7 @@ import (
"k8s.io/apimachinery/pkg/watch"
"k8s.io/apimachinery/pkg/watch"
"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"
k
apitesting
"k8s.io/kubernetes/pkg/api/testing"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
...
@@ -63,7 +64,7 @@ var codecsToTest = []func(version schema.GroupVersion, item runtime.Object) (run
...
@@ -63,7 +64,7 @@ var codecsToTest = []func(version schema.GroupVersion, item runtime.Object) (run
// fuzzInternalObject fuzzes an arbitrary runtime object using the appropriate
// fuzzInternalObject fuzzes an arbitrary runtime object using the appropriate
// fuzzer registered with the apitesting package.
// fuzzer registered with the apitesting package.
func
fuzzInternalObject
(
t
*
testing
.
T
,
forVersion
schema
.
GroupVersion
,
item
runtime
.
Object
,
seed
int64
)
runtime
.
Object
{
func
fuzzInternalObject
(
t
*
testing
.
T
,
forVersion
schema
.
GroupVersion
,
item
runtime
.
Object
,
seed
int64
)
runtime
.
Object
{
apitesting
.
FuzzerFor
(
t
,
forVersion
,
rand
.
NewSource
(
seed
))
.
Fuzz
(
item
)
apitesting
.
FuzzerFor
(
kapitesting
.
FuzzerFuncs
(
t
)
,
rand
.
NewSource
(
seed
))
.
Fuzz
(
item
)
j
,
err
:=
meta
.
TypeAccessor
(
item
)
j
,
err
:=
meta
.
TypeAccessor
(
item
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -440,7 +441,7 @@ func TestUnversionedTypes(t *testing.T) {
...
@@ -440,7 +441,7 @@ func TestUnversionedTypes(t *testing.T) {
// TestObjectWatchFraming establishes that a watch event can be encoded and
// TestObjectWatchFraming establishes that a watch event can be encoded and
// decoded correctly through each of the supported RFC2046 media types.
// decoded correctly through each of the supported RFC2046 media types.
func
TestObjectWatchFraming
(
t
*
testing
.
T
)
{
func
TestObjectWatchFraming
(
t
*
testing
.
T
)
{
f
:=
apitesting
.
FuzzerFor
(
nil
,
api
.
SchemeGroupVersion
,
rand
.
NewSource
(
benchmarkSeed
))
f
:=
apitesting
.
FuzzerFor
(
kapitesting
.
FuzzerFuncs
(
t
)
,
rand
.
NewSource
(
benchmarkSeed
))
secret
:=
&
api
.
Secret
{}
secret
:=
&
api
.
Secret
{}
f
.
Fuzz
(
secret
)
f
.
Fuzz
(
secret
)
secret
.
Data
[
"binary"
]
=
[]
byte
{
0x00
,
0x10
,
0x30
,
0x55
,
0xff
,
0x00
}
secret
.
Data
[
"binary"
]
=
[]
byte
{
0x00
,
0x10
,
0x30
,
0x55
,
0xff
,
0x00
}
...
@@ -521,8 +522,8 @@ func TestObjectWatchFraming(t *testing.T) {
...
@@ -521,8 +522,8 @@ func TestObjectWatchFraming(t *testing.T) {
const
benchmarkSeed
=
100
const
benchmarkSeed
=
100
func
benchmarkItems
()
[]
v1
.
Pod
{
func
benchmarkItems
(
b
*
testing
.
B
)
[]
v1
.
Pod
{
apiObjectFuzzer
:=
apitesting
.
FuzzerFor
(
nil
,
api
.
SchemeGroupVersion
,
rand
.
NewSource
(
benchmarkSeed
))
apiObjectFuzzer
:=
apitesting
.
FuzzerFor
(
kapitesting
.
FuzzerFuncs
(
b
)
,
rand
.
NewSource
(
benchmarkSeed
))
items
:=
make
([]
v1
.
Pod
,
10
)
items
:=
make
([]
v1
.
Pod
,
10
)
for
i
:=
range
items
{
for
i
:=
range
items
{
var
pod
api
.
Pod
var
pod
api
.
Pod
...
@@ -540,7 +541,7 @@ func benchmarkItems() []v1.Pod {
...
@@ -540,7 +541,7 @@ func benchmarkItems() []v1.Pod {
// BenchmarkEncodeCodec measures the cost of performing a codec encode, which includes
// BenchmarkEncodeCodec measures the cost of performing a codec encode, which includes
// reflection (to clear APIVersion and Kind)
// reflection (to clear APIVersion and Kind)
func
BenchmarkEncodeCodec
(
b
*
testing
.
B
)
{
func
BenchmarkEncodeCodec
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
b
.
ResetTimer
()
b
.
ResetTimer
()
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
...
@@ -554,7 +555,7 @@ func BenchmarkEncodeCodec(b *testing.B) {
...
@@ -554,7 +555,7 @@ func BenchmarkEncodeCodec(b *testing.B) {
// BenchmarkEncodeCodecFromInternal measures the cost of performing a codec encode,
// BenchmarkEncodeCodecFromInternal measures the cost of performing a codec encode,
// including conversions.
// including conversions.
func
BenchmarkEncodeCodecFromInternal
(
b
*
testing
.
B
)
{
func
BenchmarkEncodeCodecFromInternal
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
encodable
:=
make
([]
api
.
Pod
,
width
)
encodable
:=
make
([]
api
.
Pod
,
width
)
for
i
:=
range
items
{
for
i
:=
range
items
{
...
@@ -573,7 +574,7 @@ func BenchmarkEncodeCodecFromInternal(b *testing.B) {
...
@@ -573,7 +574,7 @@ func BenchmarkEncodeCodecFromInternal(b *testing.B) {
// BenchmarkEncodeJSONMarshal provides a baseline for regular JSON encode performance
// BenchmarkEncodeJSONMarshal provides a baseline for regular JSON encode performance
func
BenchmarkEncodeJSONMarshal
(
b
*
testing
.
B
)
{
func
BenchmarkEncodeJSONMarshal
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
b
.
ResetTimer
()
b
.
ResetTimer
()
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
...
@@ -586,7 +587,7 @@ func BenchmarkEncodeJSONMarshal(b *testing.B) {
...
@@ -586,7 +587,7 @@ func BenchmarkEncodeJSONMarshal(b *testing.B) {
func
BenchmarkDecodeCodec
(
b
*
testing
.
B
)
{
func
BenchmarkDecodeCodec
(
b
*
testing
.
B
)
{
codec
:=
testapi
.
Default
.
Codec
()
codec
:=
testapi
.
Default
.
Codec
()
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
encoded
:=
make
([][]
byte
,
width
)
encoded
:=
make
([][]
byte
,
width
)
for
i
:=
range
items
{
for
i
:=
range
items
{
...
@@ -608,7 +609,7 @@ func BenchmarkDecodeCodec(b *testing.B) {
...
@@ -608,7 +609,7 @@ func BenchmarkDecodeCodec(b *testing.B) {
func
BenchmarkDecodeIntoExternalCodec
(
b
*
testing
.
B
)
{
func
BenchmarkDecodeIntoExternalCodec
(
b
*
testing
.
B
)
{
codec
:=
testapi
.
Default
.
Codec
()
codec
:=
testapi
.
Default
.
Codec
()
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
encoded
:=
make
([][]
byte
,
width
)
encoded
:=
make
([][]
byte
,
width
)
for
i
:=
range
items
{
for
i
:=
range
items
{
...
@@ -631,7 +632,7 @@ func BenchmarkDecodeIntoExternalCodec(b *testing.B) {
...
@@ -631,7 +632,7 @@ func BenchmarkDecodeIntoExternalCodec(b *testing.B) {
func
BenchmarkDecodeIntoInternalCodec
(
b
*
testing
.
B
)
{
func
BenchmarkDecodeIntoInternalCodec
(
b
*
testing
.
B
)
{
codec
:=
testapi
.
Default
.
Codec
()
codec
:=
testapi
.
Default
.
Codec
()
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
encoded
:=
make
([][]
byte
,
width
)
encoded
:=
make
([][]
byte
,
width
)
for
i
:=
range
items
{
for
i
:=
range
items
{
...
@@ -655,7 +656,7 @@ func BenchmarkDecodeIntoInternalCodec(b *testing.B) {
...
@@ -655,7 +656,7 @@ func BenchmarkDecodeIntoInternalCodec(b *testing.B) {
// BenchmarkDecodeJSON provides a baseline for regular JSON decode performance
// BenchmarkDecodeJSON provides a baseline for regular JSON decode performance
func
BenchmarkDecodeIntoJSON
(
b
*
testing
.
B
)
{
func
BenchmarkDecodeIntoJSON
(
b
*
testing
.
B
)
{
codec
:=
testapi
.
Default
.
Codec
()
codec
:=
testapi
.
Default
.
Codec
()
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
encoded
:=
make
([][]
byte
,
width
)
encoded
:=
make
([][]
byte
,
width
)
for
i
:=
range
items
{
for
i
:=
range
items
{
...
@@ -679,7 +680,7 @@ func BenchmarkDecodeIntoJSON(b *testing.B) {
...
@@ -679,7 +680,7 @@ func BenchmarkDecodeIntoJSON(b *testing.B) {
// BenchmarkDecodeJSON provides a baseline for codecgen JSON decode performance
// BenchmarkDecodeJSON provides a baseline for codecgen JSON decode performance
func
BenchmarkDecodeIntoJSONCodecGen
(
b
*
testing
.
B
)
{
func
BenchmarkDecodeIntoJSONCodecGen
(
b
*
testing
.
B
)
{
kcodec
:=
testapi
.
Default
.
Codec
()
kcodec
:=
testapi
.
Default
.
Codec
()
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
width
:=
len
(
items
)
width
:=
len
(
items
)
encoded
:=
make
([][]
byte
,
width
)
encoded
:=
make
([][]
byte
,
width
)
for
i
:=
range
items
{
for
i
:=
range
items
{
...
...
pkg/api/testing/fuzzer.go
View file @
6b6b6c74
This diff is collapsed.
Click to expand it.
pkg/api/unstructured_test.go
View file @
6b6b6c74
...
@@ -21,9 +21,10 @@ import (
...
@@ -21,9 +21,10 @@ import (
"reflect"
"reflect"
"testing"
"testing"
apitesting
"k8s.io/apimachinery/pkg/api/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"
k
apitesting
"k8s.io/kubernetes/pkg/api/testing"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/diff"
...
@@ -41,7 +42,7 @@ func doRoundTrip(t *testing.T, group testapi.TestGroup, kind string) {
...
@@ -41,7 +42,7 @@ func doRoundTrip(t *testing.T, group testapi.TestGroup, kind string) {
t
.
Fatalf
(
"Couldn't create internal object %v: %v"
,
kind
,
err
)
t
.
Fatalf
(
"Couldn't create internal object %v: %v"
,
kind
,
err
)
}
}
seed
:=
rand
.
Int63
()
seed
:=
rand
.
Int63
()
apitesting
.
FuzzerFor
(
t
,
group
.
InternalGroupVersion
(
),
rand
.
NewSource
(
seed
))
.
apitesting
.
FuzzerFor
(
kapitesting
.
FuzzerFuncs
(
t
),
rand
.
NewSource
(
seed
))
.
// We are explicitly overwriting custom fuzzing functions, to ensure
// We are explicitly overwriting custom fuzzing functions, to ensure
// that InitContainers and their statuses are not generated. This is
// that InitContainers and their statuses are not generated. This is
// because in thise test we are simply doing json operations, in which
// because in thise test we are simply doing json operations, in which
...
@@ -155,7 +156,7 @@ func BenchmarkToFromUnstructured(b *testing.B) {
...
@@ -155,7 +156,7 @@ func BenchmarkToFromUnstructured(b *testing.B) {
*/
*/
func
BenchmarkToFromUnstructuredViaJSON
(
b
*
testing
.
B
)
{
func
BenchmarkToFromUnstructuredViaJSON
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
size
:=
len
(
items
)
size
:=
len
(
items
)
b
.
ResetTimer
()
b
.
ResetTimer
()
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
...
...
pkg/api/validation/schema_test.go
View file @
6b6b6c74
...
@@ -24,11 +24,12 @@ import (
...
@@ -24,11 +24,12 @@ import (
"strings"
"strings"
"testing"
"testing"
apitesting
"k8s.io/apimachinery/pkg/api/testing"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
k8syaml
"k8s.io/apimachinery/pkg/util/yaml"
k8syaml
"k8s.io/apimachinery/pkg/util/yaml"
"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"
k
apitesting
"k8s.io/kubernetes/pkg/api/testing"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
...
@@ -148,7 +149,7 @@ func TestValidateOk(t *testing.T) {
...
@@ -148,7 +149,7 @@ func TestValidateOk(t *testing.T) {
}
}
seed
:=
rand
.
Int63
()
seed
:=
rand
.
Int63
()
apiObjectFuzzer
:=
apitesting
.
FuzzerFor
(
nil
,
testapi
.
Default
.
InternalGroupVersion
(
),
rand
.
NewSource
(
seed
))
apiObjectFuzzer
:=
apitesting
.
FuzzerFor
(
kapitesting
.
FuzzerFuncs
(
t
),
rand
.
NewSource
(
seed
))
for
i
:=
0
;
i
<
5
;
i
++
{
for
i
:=
0
;
i
<
5
;
i
++
{
for
_
,
test
:=
range
tests
{
for
_
,
test
:=
range
tests
{
testObj
:=
test
.
obj
testObj
:=
test
.
obj
...
...
pkg/genericapiserver/endpoints/apiserver_test.go
View file @
6b6b6c74
...
@@ -36,6 +36,7 @@ import (
...
@@ -36,6 +36,7 @@ import (
apierrs
"k8s.io/apimachinery/pkg/api/errors"
apierrs
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/api/meta"
apitesting
"k8s.io/apimachinery/pkg/api/testing"
metainternalversion
"k8s.io/apimachinery/pkg/apis/meta/internalversion"
metainternalversion
"k8s.io/apimachinery/pkg/apis/meta/internalversion"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/fields"
...
@@ -48,7 +49,7 @@ import (
...
@@ -48,7 +49,7 @@ import (
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api"
apitesting
"k8s.io/kubernetes/pkg/api/testing"
k
apitesting
"k8s.io/kubernetes/pkg/api/testing"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1"
genericapifilters
"k8s.io/kubernetes/pkg/genericapiserver/endpoints/filters"
genericapifilters
"k8s.io/kubernetes/pkg/genericapiserver/endpoints/filters"
"k8s.io/kubernetes/pkg/genericapiserver/endpoints/handlers/responsewriters"
"k8s.io/kubernetes/pkg/genericapiserver/endpoints/handlers/responsewriters"
...
@@ -3338,7 +3339,7 @@ func readBodyOrDie(r io.Reader) []byte {
...
@@ -3338,7 +3339,7 @@ func readBodyOrDie(r io.Reader) []byte {
// BenchmarkUpdateProtobuf measures the cost of processing an update on the server in proto
// BenchmarkUpdateProtobuf measures the cost of processing an update on the server in proto
func
BenchmarkUpdateProtobuf
(
b
*
testing
.
B
)
{
func
BenchmarkUpdateProtobuf
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
simpleStorage
:=
&
SimpleRESTStorage
{}
simpleStorage
:=
&
SimpleRESTStorage
{}
handler
:=
handle
(
map
[
string
]
rest
.
Storage
{
"simples"
:
simpleStorage
})
handler
:=
handle
(
map
[
string
]
rest
.
Storage
{
"simples"
:
simpleStorage
})
...
@@ -3394,8 +3395,8 @@ func newTestRequestInfoResolver() *request.RequestInfoFactory {
...
@@ -3394,8 +3395,8 @@ func newTestRequestInfoResolver() *request.RequestInfoFactory {
const
benchmarkSeed
=
100
const
benchmarkSeed
=
100
func
benchmarkItems
()
[]
api
.
Pod
{
func
benchmarkItems
(
b
*
testing
.
B
)
[]
api
.
Pod
{
apiObjectFuzzer
:=
apitesting
.
FuzzerFor
(
nil
,
api
.
SchemeGroupVersion
,
rand
.
NewSource
(
benchmarkSeed
))
apiObjectFuzzer
:=
apitesting
.
FuzzerFor
(
kapitesting
.
FuzzerFuncs
(
b
)
,
rand
.
NewSource
(
benchmarkSeed
))
items
:=
make
([]
api
.
Pod
,
3
)
items
:=
make
([]
api
.
Pod
,
3
)
for
i
:=
range
items
{
for
i
:=
range
items
{
apiObjectFuzzer
.
Fuzz
(
&
items
[
i
])
apiObjectFuzzer
.
Fuzz
(
&
items
[
i
])
...
...
pkg/genericapiserver/endpoints/watch_test.go
View file @
6b6b6c74
...
@@ -631,7 +631,7 @@ func TestWatchHTTPTimeout(t *testing.T) {
...
@@ -631,7 +631,7 @@ func TestWatchHTTPTimeout(t *testing.T) {
// BenchmarkWatchHTTP measures the cost of serving a watch.
// BenchmarkWatchHTTP measures the cost of serving a watch.
func
BenchmarkWatchHTTP
(
b
*
testing
.
B
)
{
func
BenchmarkWatchHTTP
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
simpleStorage
:=
&
SimpleRESTStorage
{}
simpleStorage
:=
&
SimpleRESTStorage
{}
handler
:=
handle
(
map
[
string
]
rest
.
Storage
{
"simples"
:
simpleStorage
})
handler
:=
handle
(
map
[
string
]
rest
.
Storage
{
"simples"
:
simpleStorage
})
...
@@ -678,7 +678,7 @@ func BenchmarkWatchHTTP(b *testing.B) {
...
@@ -678,7 +678,7 @@ func BenchmarkWatchHTTP(b *testing.B) {
// BenchmarkWatchWebsocket measures the cost of serving a watch.
// BenchmarkWatchWebsocket measures the cost of serving a watch.
func
BenchmarkWatchWebsocket
(
b
*
testing
.
B
)
{
func
BenchmarkWatchWebsocket
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
simpleStorage
:=
&
SimpleRESTStorage
{}
simpleStorage
:=
&
SimpleRESTStorage
{}
handler
:=
handle
(
map
[
string
]
rest
.
Storage
{
"simples"
:
simpleStorage
})
handler
:=
handle
(
map
[
string
]
rest
.
Storage
{
"simples"
:
simpleStorage
})
...
@@ -718,7 +718,7 @@ func BenchmarkWatchWebsocket(b *testing.B) {
...
@@ -718,7 +718,7 @@ func BenchmarkWatchWebsocket(b *testing.B) {
// BenchmarkWatchProtobuf measures the cost of serving a watch.
// BenchmarkWatchProtobuf measures the cost of serving a watch.
func
BenchmarkWatchProtobuf
(
b
*
testing
.
B
)
{
func
BenchmarkWatchProtobuf
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
items
:=
benchmarkItems
(
b
)
simpleStorage
:=
&
SimpleRESTStorage
{}
simpleStorage
:=
&
SimpleRESTStorage
{}
handler
:=
handle
(
map
[
string
]
rest
.
Storage
{
"simples"
:
simpleStorage
})
handler
:=
handle
(
map
[
string
]
rest
.
Storage
{
"simples"
:
simpleStorage
})
...
...
staging/src/k8s.io/apimachinery/pkg/api/testing/fuzzer.go
0 → 100644
View file @
6b6b6c74
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
testing
import
(
"strconv"
"math/rand"
"testing"
"github.com/google/gofuzz"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
)
func
GenericFuzzerFuncs
(
t
TestingCommon
)
[]
interface
{}
{
return
[]
interface
{}{
func
(
j
*
int
,
c
fuzz
.
Continue
)
{
*
j
=
int
(
c
.
Int31
())
},
func
(
j
**
int
,
c
fuzz
.
Continue
)
{
if
c
.
RandBool
()
{
i
:=
int
(
c
.
Int31
())
*
j
=
&
i
}
else
{
*
j
=
nil
}
},
func
(
j
*
runtime
.
TypeMeta
,
c
fuzz
.
Continue
)
{
// We have to customize the randomization of TypeMetas because their
// APIVersion and Kind must remain blank in memory.
j
.
APIVersion
=
""
j
.
Kind
=
""
},
func
(
j
*
metav1
.
TypeMeta
,
c
fuzz
.
Continue
)
{
// We have to customize the randomization of TypeMetas because their
// APIVersion and Kind must remain blank in memory.
j
.
APIVersion
=
""
j
.
Kind
=
""
},
func
(
j
*
metav1
.
ObjectMeta
,
c
fuzz
.
Continue
)
{
j
.
Name
=
c
.
RandString
()
j
.
ResourceVersion
=
strconv
.
FormatUint
(
c
.
RandUint64
(),
10
)
j
.
SelfLink
=
c
.
RandString
()
j
.
UID
=
types
.
UID
(
c
.
RandString
())
j
.
GenerateName
=
c
.
RandString
()
var
sec
,
nsec
int64
c
.
Fuzz
(
&
sec
)
c
.
Fuzz
(
&
nsec
)
j
.
CreationTimestamp
=
metav1
.
Unix
(
sec
,
nsec
)
.
Rfc3339Copy
()
},
func
(
j
*
metav1
.
ListMeta
,
c
fuzz
.
Continue
)
{
j
.
ResourceVersion
=
strconv
.
FormatUint
(
c
.
RandUint64
(),
10
)
j
.
SelfLink
=
c
.
RandString
()
},
func
(
j
*
runtime
.
Object
,
c
fuzz
.
Continue
)
{
// TODO: uncomment when round trip starts from a versioned object
if
true
{
//c.RandBool() {
*
j
=
&
runtime
.
Unknown
{
// We do not set TypeMeta here because it is not carried through a round trip
Raw
:
[]
byte
(
`{"apiVersion":"unknown.group/unknown","kind":"Something","someKey":"someValue"}`
),
ContentType
:
runtime
.
ContentTypeJSON
,
}
}
else
{
types
:=
[]
runtime
.
Object
{
&
metav1
.
Status
{},
&
metav1
.
APIGroup
{}}
t
:=
types
[
c
.
Rand
.
Intn
(
len
(
types
))]
c
.
Fuzz
(
t
)
*
j
=
t
}
},
func
(
r
*
runtime
.
RawExtension
,
c
fuzz
.
Continue
)
{
// Pick an arbitrary type and fuzz it
types
:=
[]
runtime
.
Object
{
&
metav1
.
Status
{},
&
metav1
.
APIGroup
{}}
obj
:=
types
[
c
.
Rand
.
Intn
(
len
(
types
))]
c
.
Fuzz
(
obj
)
// Find a codec for converting the object to raw bytes. This is necessary for the
// api version and kind to be correctly set be serialization.
var
codec
=
Codec
(
metav1
.
SchemeGroupVersion
)
// Convert the object to raw bytes
bytes
,
err
:=
runtime
.
Encode
(
codec
,
obj
)
if
err
!=
nil
{
t
.
Errorf
(
"Failed to encode object: %v"
,
err
)
return
}
// Set the bytes field on the RawExtension
r
.
Raw
=
bytes
},
}
}
// TestingCommon abstracts testing.T and testing.B
type
TestingCommon
interface
{
Log
(
args
...
interface
{})
Logf
(
format
string
,
args
...
interface
{})
Error
(
args
...
interface
{})
Errorf
(
format
string
,
args
...
interface
{})
Fatal
(
args
...
interface
{})
Fatalf
(
format
string
,
args
...
interface
{})
}
var
(
_
TestingCommon
=
&
testing
.
T
{}
_
TestingCommon
=
&
testing
.
B
{}
)
// FuzzerFor can randomly populate api objects that are destined for version.
func
FuzzerFor
(
funcs
[]
interface
{},
src
rand
.
Source
)
*
fuzz
.
Fuzzer
{
f
:=
fuzz
.
New
()
.
NilChance
(
.5
)
.
NumElements
(
0
,
1
)
if
src
!=
nil
{
f
.
RandSource
(
src
)
}
f
.
Funcs
(
funcs
...
)
return
f
}
staging/src/k8s.io/apimachinery/pkg/api/testing/register.go
0 → 100644
View file @
6b6b6c74
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
testing
import
(
"os"
"mime"
"fmt"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
runtimeserializer
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apimachinery/pkg/runtime/schema"
)
var
scheme
=
runtime
.
NewScheme
()
var
codecs
=
runtimeserializer
.
NewCodecFactory
(
scheme
)
var
serializer
runtime
.
SerializerInfo
// Codec returns the codec for the API version to test against, as set by the
// KUBE_TEST_API_TYPE env var.
func
Codec
(
gvs
...
schema
.
GroupVersion
)
runtime
.
Codec
{
if
serializer
.
Serializer
==
nil
{
return
codecs
.
LegacyCodec
(
gvs
...
)
}
return
codecs
.
CodecForVersions
(
serializer
.
Serializer
,
codecs
.
UniversalDeserializer
(),
schema
.
GroupVersions
(
gvs
),
nil
)
}
func
init
()
{
metav1
.
AddToGroupVersion
(
scheme
,
metav1
.
SchemeGroupVersion
)
if
apiMediaType
:=
os
.
Getenv
(
"KUBE_TEST_API_TYPE"
);
len
(
apiMediaType
)
>
0
{
var
ok
bool
mediaType
,
_
,
err
:=
mime
.
ParseMediaType
(
apiMediaType
)
if
err
!=
nil
{
panic
(
err
)
}
serializer
,
ok
=
runtime
.
SerializerInfoForMediaType
(
codecs
.
SupportedMediaTypes
(),
mediaType
)
if
!
ok
{
panic
(
fmt
.
Sprintf
(
"no serializer for %s"
,
apiMediaType
))
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment