mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
pkg/genericapiserver/endpoints: cutting off pkg/api deps
This commit is contained in:
parent
b51252ab5b
commit
a5d5527e96
@ -46,14 +46,15 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
"k8s.io/apimachinery/pkg/util/diff"
|
"k8s.io/apimachinery/pkg/util/diff"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
|
"k8s.io/apiserver/pkg/apis/example"
|
||||||
|
examplefuzzer "k8s.io/apiserver/pkg/apis/example/fuzzer"
|
||||||
|
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
|
||||||
"k8s.io/apiserver/pkg/endpoints/request"
|
"k8s.io/apiserver/pkg/endpoints/request"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
|
||||||
kapitesting "k8s.io/kubernetes/pkg/api/testing"
|
|
||||||
"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"
|
||||||
genericapitesting "k8s.io/kubernetes/pkg/genericapiserver/endpoints/testing"
|
genericapitesting "k8s.io/kubernetes/pkg/genericapiserver/endpoints/testing"
|
||||||
@ -78,9 +79,13 @@ var grouplessPrefix = "api"
|
|||||||
|
|
||||||
var groupVersions = []schema.GroupVersion{grouplessGroupVersion, testGroupVersion, newGroupVersion}
|
var groupVersions = []schema.GroupVersion{grouplessGroupVersion, testGroupVersion, newGroupVersion}
|
||||||
|
|
||||||
var codec = api.Codecs.LegacyCodec(groupVersions...)
|
var scheme = runtime.NewScheme()
|
||||||
var testCodec = api.Codecs.LegacyCodec(testGroupVersion)
|
var codecs = serializer.NewCodecFactory(scheme)
|
||||||
var newCodec = api.Codecs.LegacyCodec(newGroupVersion)
|
|
||||||
|
var codec = codecs.LegacyCodec(groupVersions...)
|
||||||
|
var testCodec = codecs.LegacyCodec(testGroupVersion)
|
||||||
|
var newCodec = codecs.LegacyCodec(newGroupVersion)
|
||||||
|
var parameterCodec = runtime.NewParameterCodec(scheme)
|
||||||
|
|
||||||
var accessor = meta.NewAccessor()
|
var accessor = meta.NewAccessor()
|
||||||
var selfLinker runtime.SelfLinker = accessor
|
var selfLinker runtime.SelfLinker = accessor
|
||||||
@ -88,26 +93,37 @@ var mapper, namespaceMapper meta.RESTMapper // The mappers with namespace and wi
|
|||||||
var admissionControl admission.Interface
|
var admissionControl admission.Interface
|
||||||
var requestContextMapper request.RequestContextMapper
|
var requestContextMapper request.RequestContextMapper
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
metav1.AddToGroupVersion(scheme, metav1.SchemeGroupVersion)
|
||||||
|
|
||||||
|
// unnamed core group
|
||||||
|
scheme.AddUnversionedTypes(grouplessGroupVersion, &metav1.Status{})
|
||||||
|
metav1.AddToGroupVersion(scheme, grouplessGroupVersion)
|
||||||
|
|
||||||
|
example.AddToScheme(scheme)
|
||||||
|
examplev1.AddToScheme(scheme)
|
||||||
|
}
|
||||||
|
|
||||||
func interfacesFor(version schema.GroupVersion) (*meta.VersionInterfaces, error) {
|
func interfacesFor(version schema.GroupVersion) (*meta.VersionInterfaces, error) {
|
||||||
switch version {
|
switch version {
|
||||||
case testGroupVersion:
|
case testGroupVersion:
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
ObjectConvertor: api.Scheme,
|
ObjectConvertor: scheme,
|
||||||
MetadataAccessor: accessor,
|
MetadataAccessor: accessor,
|
||||||
}, nil
|
}, nil
|
||||||
case newGroupVersion:
|
case newGroupVersion:
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
ObjectConvertor: api.Scheme,
|
ObjectConvertor: scheme,
|
||||||
MetadataAccessor: accessor,
|
MetadataAccessor: accessor,
|
||||||
}, nil
|
}, nil
|
||||||
case grouplessGroupVersion:
|
case grouplessGroupVersion:
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
ObjectConvertor: api.Scheme,
|
ObjectConvertor: scheme,
|
||||||
MetadataAccessor: accessor,
|
MetadataAccessor: accessor,
|
||||||
}, nil
|
}, nil
|
||||||
case testGroup2Version:
|
case testGroup2Version:
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
ObjectConvertor: api.Scheme,
|
ObjectConvertor: scheme,
|
||||||
MetadataAccessor: accessor,
|
MetadataAccessor: accessor,
|
||||||
}, nil
|
}, nil
|
||||||
default:
|
default:
|
||||||
@ -120,10 +136,10 @@ func newMapper() *meta.DefaultRESTMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addGrouplessTypes() {
|
func addGrouplessTypes() {
|
||||||
api.Scheme.AddKnownTypes(grouplessGroupVersion,
|
scheme.AddKnownTypes(grouplessGroupVersion,
|
||||||
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ListOptions{}, &metav1.ExportOptions{},
|
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ListOptions{}, &metav1.ExportOptions{},
|
||||||
&metav1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{})
|
&metav1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{})
|
||||||
api.Scheme.AddKnownTypes(grouplessInternalGroupVersion,
|
scheme.AddKnownTypes(grouplessInternalGroupVersion,
|
||||||
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{},
|
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{},
|
||||||
&genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{})
|
&genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{})
|
||||||
}
|
}
|
||||||
@ -138,31 +154,31 @@ func addTestTypes() {
|
|||||||
ResourceVersion string `json:"resourceVersion,omitempty"`
|
ResourceVersion string `json:"resourceVersion,omitempty"`
|
||||||
TimeoutSeconds *int64 `json:"timeoutSeconds,omitempty"`
|
TimeoutSeconds *int64 `json:"timeoutSeconds,omitempty"`
|
||||||
}
|
}
|
||||||
api.Scheme.AddKnownTypes(testGroupVersion,
|
scheme.AddKnownTypes(testGroupVersion,
|
||||||
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{},
|
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{},
|
||||||
&metav1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
|
&metav1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
|
||||||
&SimpleXGSubresource{})
|
&SimpleXGSubresource{})
|
||||||
api.Scheme.AddKnownTypes(testGroupVersion, &v1.Pod{})
|
scheme.AddKnownTypes(testGroupVersion, &examplev1.Pod{})
|
||||||
api.Scheme.AddKnownTypes(testInternalGroupVersion,
|
scheme.AddKnownTypes(testInternalGroupVersion,
|
||||||
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{},
|
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{},
|
||||||
&genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
|
&genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
|
||||||
&SimpleXGSubresource{})
|
&SimpleXGSubresource{})
|
||||||
api.Scheme.AddKnownTypes(testInternalGroupVersion, &api.Pod{})
|
scheme.AddKnownTypes(testInternalGroupVersion, &example.Pod{})
|
||||||
// Register SimpleXGSubresource in both testGroupVersion and testGroup2Version, and also their
|
// Register SimpleXGSubresource in both testGroupVersion and testGroup2Version, and also their
|
||||||
// their corresponding internal versions, to verify that the desired group version object is
|
// their corresponding internal versions, to verify that the desired group version object is
|
||||||
// served in the tests.
|
// served in the tests.
|
||||||
api.Scheme.AddKnownTypes(testGroup2Version, &SimpleXGSubresource{}, &metav1.ExportOptions{})
|
scheme.AddKnownTypes(testGroup2Version, &SimpleXGSubresource{}, &metav1.ExportOptions{})
|
||||||
api.Scheme.AddKnownTypes(testInternalGroup2Version, &SimpleXGSubresource{}, &metav1.ExportOptions{})
|
scheme.AddKnownTypes(testInternalGroup2Version, &SimpleXGSubresource{}, &metav1.ExportOptions{})
|
||||||
metav1.AddToGroupVersion(api.Scheme, testGroupVersion)
|
metav1.AddToGroupVersion(scheme, testGroupVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
func addNewTestTypes() {
|
func addNewTestTypes() {
|
||||||
api.Scheme.AddKnownTypes(newGroupVersion,
|
scheme.AddKnownTypes(newGroupVersion,
|
||||||
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{},
|
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{},
|
||||||
&metav1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
|
&metav1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
|
||||||
&v1.Pod{},
|
&examplev1.Pod{},
|
||||||
)
|
)
|
||||||
metav1.AddToGroupVersion(api.Scheme, newGroupVersion)
|
metav1.AddToGroupVersion(scheme, newGroupVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -178,7 +194,7 @@ func init() {
|
|||||||
// enumerate all supported versions, get the kinds, and register with
|
// enumerate all supported versions, get the kinds, and register with
|
||||||
// the mapper how to address our resources
|
// the mapper how to address our resources
|
||||||
for _, gv := range groupVersions {
|
for _, gv := range groupVersions {
|
||||||
for kind := range api.Scheme.KnownTypes(gv) {
|
for kind := range scheme.KnownTypes(gv) {
|
||||||
gvk := gv.WithKind(kind)
|
gvk := gv.WithKind(kind)
|
||||||
root := bool(kind == "SimpleRoot")
|
root := bool(kind == "SimpleRoot")
|
||||||
if root {
|
if root {
|
||||||
@ -194,17 +210,17 @@ func init() {
|
|||||||
admissionControl = admit.NewAlwaysAdmit()
|
admissionControl = admit.NewAlwaysAdmit()
|
||||||
requestContextMapper = request.NewRequestContextMapper()
|
requestContextMapper = request.NewRequestContextMapper()
|
||||||
|
|
||||||
api.Scheme.AddFieldLabelConversionFunc(grouplessGroupVersion.String(), "Simple",
|
scheme.AddFieldLabelConversionFunc(grouplessGroupVersion.String(), "Simple",
|
||||||
func(label, value string) (string, string, error) {
|
func(label, value string) (string, string, error) {
|
||||||
return label, value, nil
|
return label, value, nil
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
api.Scheme.AddFieldLabelConversionFunc(testGroupVersion.String(), "Simple",
|
scheme.AddFieldLabelConversionFunc(testGroupVersion.String(), "Simple",
|
||||||
func(label, value string) (string, string, error) {
|
func(label, value string) (string, string, error) {
|
||||||
return label, value, nil
|
return label, value, nil
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
api.Scheme.AddFieldLabelConversionFunc(newGroupVersion.String(), "Simple",
|
scheme.AddFieldLabelConversionFunc(newGroupVersion.String(), "Simple",
|
||||||
func(label, value string) (string, string, error) {
|
func(label, value string) (string, string, error) {
|
||||||
return label, value, nil
|
return label, value, nil
|
||||||
},
|
},
|
||||||
@ -245,14 +261,14 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
|
|||||||
template := APIGroupVersion{
|
template := APIGroupVersion{
|
||||||
Storage: storage,
|
Storage: storage,
|
||||||
|
|
||||||
Creater: api.Scheme,
|
Creater: scheme,
|
||||||
Convertor: api.Scheme,
|
Convertor: scheme,
|
||||||
Copier: api.Scheme,
|
Copier: scheme,
|
||||||
Typer: api.Scheme,
|
Typer: scheme,
|
||||||
Linker: selfLinker,
|
Linker: selfLinker,
|
||||||
Mapper: namespaceMapper,
|
Mapper: namespaceMapper,
|
||||||
|
|
||||||
ParameterCodec: api.ParameterCodec,
|
ParameterCodec: parameterCodec,
|
||||||
|
|
||||||
Admit: admissionControl,
|
Admit: admissionControl,
|
||||||
Context: requestContextMapper,
|
Context: requestContextMapper,
|
||||||
@ -264,7 +280,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
|
|||||||
group.Root = "/" + grouplessPrefix
|
group.Root = "/" + grouplessPrefix
|
||||||
group.GroupVersion = grouplessGroupVersion
|
group.GroupVersion = grouplessGroupVersion
|
||||||
group.OptionsExternalVersion = &grouplessGroupVersion
|
group.OptionsExternalVersion = &grouplessGroupVersion
|
||||||
group.Serializer = api.Codecs
|
group.Serializer = codecs
|
||||||
if err := (&group).InstallREST(container); err != nil {
|
if err := (&group).InstallREST(container); err != nil {
|
||||||
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
||||||
}
|
}
|
||||||
@ -276,7 +292,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
|
|||||||
group.Root = "/" + prefix
|
group.Root = "/" + prefix
|
||||||
group.GroupVersion = testGroupVersion
|
group.GroupVersion = testGroupVersion
|
||||||
group.OptionsExternalVersion = &testGroupVersion
|
group.OptionsExternalVersion = &testGroupVersion
|
||||||
group.Serializer = api.Codecs
|
group.Serializer = codecs
|
||||||
if err := (&group).InstallREST(container); err != nil {
|
if err := (&group).InstallREST(container); err != nil {
|
||||||
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
||||||
}
|
}
|
||||||
@ -288,7 +304,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
|
|||||||
group.Root = "/" + prefix
|
group.Root = "/" + prefix
|
||||||
group.GroupVersion = newGroupVersion
|
group.GroupVersion = newGroupVersion
|
||||||
group.OptionsExternalVersion = &newGroupVersion
|
group.OptionsExternalVersion = &newGroupVersion
|
||||||
group.Serializer = api.Codecs
|
group.Serializer = codecs
|
||||||
if err := (&group).InstallREST(container); err != nil {
|
if err := (&group).InstallREST(container); err != nil {
|
||||||
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
||||||
}
|
}
|
||||||
@ -430,7 +446,7 @@ func (storage *SimpleRESTStorage) Get(ctx request.Context, id string, options *m
|
|||||||
if id == "binary" {
|
if id == "binary" {
|
||||||
return storage.stream, storage.errors["get"]
|
return storage.stream, storage.errors["get"]
|
||||||
}
|
}
|
||||||
copied, err := api.Scheme.Copy(&storage.item)
|
copied, err := scheme.Copy(&storage.item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -664,7 +680,7 @@ func (storage *SimpleTypedStorage) New() runtime.Object {
|
|||||||
|
|
||||||
func (storage *SimpleTypedStorage) Get(ctx request.Context, id string, options *metav1.GetOptions) (runtime.Object, error) {
|
func (storage *SimpleTypedStorage) Get(ctx request.Context, id string, options *metav1.GetOptions) (runtime.Object, error) {
|
||||||
storage.checkContext(ctx)
|
storage.checkContext(ctx)
|
||||||
copied, err := api.Scheme.Copy(storage.item)
|
copied, err := scheme.Copy(storage.item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -1627,7 +1643,7 @@ func TestGetNamespaceSelfLink(t *testing.T) {
|
|||||||
func TestGetMissing(t *testing.T) {
|
func TestGetMissing(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
simpleStorage := SimpleRESTStorage{
|
simpleStorage := SimpleRESTStorage{
|
||||||
errors: map[string]error{"get": apierrs.NewNotFound(api.Resource("simples"), "id")},
|
errors: map[string]error{"get": apierrs.NewNotFound(schema.GroupResource{Resource: "simples"}, "id")},
|
||||||
}
|
}
|
||||||
storage["simple"] = &simpleStorage
|
storage["simple"] = &simpleStorage
|
||||||
handler := handle(storage)
|
handler := handle(storage)
|
||||||
@ -1647,7 +1663,7 @@ func TestGetMissing(t *testing.T) {
|
|||||||
func TestGetRetryAfter(t *testing.T) {
|
func TestGetRetryAfter(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
simpleStorage := SimpleRESTStorage{
|
simpleStorage := SimpleRESTStorage{
|
||||||
errors: map[string]error{"get": apierrs.NewServerTimeout(api.Resource("simples"), "id", 2)},
|
errors: map[string]error{"get": apierrs.NewServerTimeout(schema.GroupResource{Resource: "simples"}, "id", 2)},
|
||||||
}
|
}
|
||||||
storage["simple"] = &simpleStorage
|
storage["simple"] = &simpleStorage
|
||||||
handler := handle(storage)
|
handler := handle(storage)
|
||||||
@ -1750,7 +1766,7 @@ func TestConnectResponderError(t *testing.T) {
|
|||||||
connectStorage := &ConnecterRESTStorage{}
|
connectStorage := &ConnecterRESTStorage{}
|
||||||
connectStorage.handlerFunc = func() http.Handler {
|
connectStorage.handlerFunc = func() http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||||
connectStorage.receivedResponder.Error(apierrs.NewForbidden(api.Resource("simples"), itemID, errors.New("you are terminated")))
|
connectStorage.receivedResponder.Error(apierrs.NewForbidden(schema.GroupResource{Resource: "simples"}, itemID, errors.New("you are terminated")))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
storage := map[string]rest.Storage{
|
storage := map[string]rest.Storage{
|
||||||
@ -2135,7 +2151,7 @@ func TestDeleteMissing(t *testing.T) {
|
|||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
ID := "id"
|
ID := "id"
|
||||||
simpleStorage := SimpleRESTStorage{
|
simpleStorage := SimpleRESTStorage{
|
||||||
errors: map[string]error{"delete": apierrs.NewNotFound(api.Resource("simples"), ID)},
|
errors: map[string]error{"delete": apierrs.NewNotFound(schema.GroupResource{Resource: "simples"}, ID)},
|
||||||
}
|
}
|
||||||
storage["simple"] = &simpleStorage
|
storage["simple"] = &simpleStorage
|
||||||
handler := handle(storage)
|
handler := handle(storage)
|
||||||
@ -2438,7 +2454,7 @@ func TestUpdateMissing(t *testing.T) {
|
|||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
ID := "id"
|
ID := "id"
|
||||||
simpleStorage := SimpleRESTStorage{
|
simpleStorage := SimpleRESTStorage{
|
||||||
errors: map[string]error{"update": apierrs.NewNotFound(api.Resource("simples"), ID)},
|
errors: map[string]error{"update": apierrs.NewNotFound(schema.GroupResource{Resource: "simples"}, ID)},
|
||||||
}
|
}
|
||||||
storage["simple"] = &simpleStorage
|
storage["simple"] = &simpleStorage
|
||||||
handler := handle(storage)
|
handler := handle(storage)
|
||||||
@ -2473,7 +2489,7 @@ func TestCreateNotFound(t *testing.T) {
|
|||||||
"simple": &SimpleRESTStorage{
|
"simple": &SimpleRESTStorage{
|
||||||
// storage.Create can fail with not found error in theory.
|
// storage.Create can fail with not found error in theory.
|
||||||
// See http://pr.k8s.io/486#discussion_r15037092.
|
// See http://pr.k8s.io/486#discussion_r15037092.
|
||||||
errors: map[string]error{"create": apierrs.NewNotFound(api.Resource("simples"), "id")},
|
errors: map[string]error{"create": apierrs.NewNotFound(schema.GroupResource{Resource: "simples"}, "id")},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
server := httptest.NewServer(handler)
|
server := httptest.NewServer(handler)
|
||||||
@ -2506,7 +2522,7 @@ func TestCreateChecksDecode(t *testing.T) {
|
|||||||
defer server.Close()
|
defer server.Close()
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
|
|
||||||
simple := &api.Pod{}
|
simple := &example.Pod{}
|
||||||
data, err := runtime.Encode(testCodec, simple)
|
data, err := runtime.Encode(testCodec, simple)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
@ -2537,10 +2553,10 @@ func TestUpdateREST(t *testing.T) {
|
|||||||
return &APIGroupVersion{
|
return &APIGroupVersion{
|
||||||
Storage: storage,
|
Storage: storage,
|
||||||
Root: "/" + prefix,
|
Root: "/" + prefix,
|
||||||
Creater: api.Scheme,
|
Creater: scheme,
|
||||||
Convertor: api.Scheme,
|
Convertor: scheme,
|
||||||
Copier: api.Scheme,
|
Copier: scheme,
|
||||||
Typer: api.Scheme,
|
Typer: scheme,
|
||||||
Linker: selfLinker,
|
Linker: selfLinker,
|
||||||
|
|
||||||
Admit: admissionControl,
|
Admit: admissionControl,
|
||||||
@ -2550,8 +2566,8 @@ func TestUpdateREST(t *testing.T) {
|
|||||||
GroupVersion: newGroupVersion,
|
GroupVersion: newGroupVersion,
|
||||||
OptionsExternalVersion: &newGroupVersion,
|
OptionsExternalVersion: &newGroupVersion,
|
||||||
|
|
||||||
Serializer: api.Codecs,
|
Serializer: codecs,
|
||||||
ParameterCodec: api.ParameterCodec,
|
ParameterCodec: parameterCodec,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2621,10 +2637,10 @@ func TestParentResourceIsRequired(t *testing.T) {
|
|||||||
"simple/sub": storage,
|
"simple/sub": storage,
|
||||||
},
|
},
|
||||||
Root: "/" + prefix,
|
Root: "/" + prefix,
|
||||||
Creater: api.Scheme,
|
Creater: scheme,
|
||||||
Convertor: api.Scheme,
|
Convertor: scheme,
|
||||||
Copier: api.Scheme,
|
Copier: scheme,
|
||||||
Typer: api.Scheme,
|
Typer: scheme,
|
||||||
Linker: selfLinker,
|
Linker: selfLinker,
|
||||||
|
|
||||||
Admit: admissionControl,
|
Admit: admissionControl,
|
||||||
@ -2634,8 +2650,8 @@ func TestParentResourceIsRequired(t *testing.T) {
|
|||||||
GroupVersion: newGroupVersion,
|
GroupVersion: newGroupVersion,
|
||||||
OptionsExternalVersion: &newGroupVersion,
|
OptionsExternalVersion: &newGroupVersion,
|
||||||
|
|
||||||
Serializer: api.Codecs,
|
Serializer: codecs,
|
||||||
ParameterCodec: api.ParameterCodec,
|
ParameterCodec: parameterCodec,
|
||||||
}
|
}
|
||||||
container := restful.NewContainer()
|
container := restful.NewContainer()
|
||||||
if err := group.InstallREST(container); err == nil {
|
if err := group.InstallREST(container); err == nil {
|
||||||
@ -2652,10 +2668,10 @@ func TestParentResourceIsRequired(t *testing.T) {
|
|||||||
"simple/sub": storage,
|
"simple/sub": storage,
|
||||||
},
|
},
|
||||||
Root: "/" + prefix,
|
Root: "/" + prefix,
|
||||||
Creater: api.Scheme,
|
Creater: scheme,
|
||||||
Convertor: api.Scheme,
|
Convertor: scheme,
|
||||||
Copier: api.Scheme,
|
Copier: scheme,
|
||||||
Typer: api.Scheme,
|
Typer: scheme,
|
||||||
Linker: selfLinker,
|
Linker: selfLinker,
|
||||||
|
|
||||||
Admit: admissionControl,
|
Admit: admissionControl,
|
||||||
@ -2665,8 +2681,8 @@ func TestParentResourceIsRequired(t *testing.T) {
|
|||||||
GroupVersion: newGroupVersion,
|
GroupVersion: newGroupVersion,
|
||||||
OptionsExternalVersion: &newGroupVersion,
|
OptionsExternalVersion: &newGroupVersion,
|
||||||
|
|
||||||
Serializer: api.Codecs,
|
Serializer: codecs,
|
||||||
ParameterCodec: api.ParameterCodec,
|
ParameterCodec: parameterCodec,
|
||||||
}
|
}
|
||||||
container = restful.NewContainer()
|
container = restful.NewContainer()
|
||||||
if err := group.InstallREST(container); err != nil {
|
if err := group.InstallREST(container); err != nil {
|
||||||
@ -2729,7 +2745,7 @@ func TestUpdateChecksDecode(t *testing.T) {
|
|||||||
defer server.Close()
|
defer server.Close()
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
|
|
||||||
simple := &api.Pod{}
|
simple := &example.Pod{}
|
||||||
data, err := runtime.Encode(testCodec, simple)
|
data, err := runtime.Encode(testCodec, simple)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
@ -2855,12 +2871,12 @@ func TestCreateYAML(t *testing.T) {
|
|||||||
simple := &genericapitesting.Simple{
|
simple := &genericapitesting.Simple{
|
||||||
Other: "bar",
|
Other: "bar",
|
||||||
}
|
}
|
||||||
info, ok := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), "application/yaml")
|
info, ok := runtime.SerializerInfoForMediaType(codecs.SupportedMediaTypes(), "application/yaml")
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Fatal("No yaml serializer")
|
t.Fatal("No yaml serializer")
|
||||||
}
|
}
|
||||||
encoder := api.Codecs.EncoderForVersion(info.Serializer, testGroupVersion)
|
encoder := codecs.EncoderForVersion(info.Serializer, testGroupVersion)
|
||||||
decoder := api.Codecs.DecoderToVersion(info.Serializer, testInternalGroupVersion)
|
decoder := codecs.DecoderToVersion(info.Serializer, testInternalGroupVersion)
|
||||||
|
|
||||||
data, err := runtime.Encode(encoder, simple)
|
data, err := runtime.Encode(encoder, simple)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -3034,7 +3050,7 @@ func expectApiStatus(t *testing.T, method, url string, data []byte, code int) *m
|
|||||||
func TestDelayReturnsError(t *testing.T) {
|
func TestDelayReturnsError(t *testing.T) {
|
||||||
storage := SimpleRESTStorage{
|
storage := SimpleRESTStorage{
|
||||||
injectedFunction: func(obj runtime.Object) (runtime.Object, error) {
|
injectedFunction: func(obj runtime.Object) (runtime.Object, error) {
|
||||||
return nil, apierrs.NewAlreadyExists(api.Resource("foos"), "bar")
|
return nil, apierrs.NewAlreadyExists(schema.GroupResource{Resource: "foos"}, "bar")
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
handler := handle(map[string]rest.Storage{"foo": &storage})
|
handler := handle(map[string]rest.Storage{"foo": &storage})
|
||||||
@ -3057,7 +3073,7 @@ func (obj *UnregisteredAPIObject) GetObjectKind() schema.ObjectKind {
|
|||||||
|
|
||||||
func TestWriteJSONDecodeError(t *testing.T) {
|
func TestWriteJSONDecodeError(t *testing.T) {
|
||||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||||
responsewriters.WriteObjectNegotiated(api.Codecs, newGroupVersion, w, req, http.StatusOK, &UnregisteredAPIObject{"Undecodable"})
|
responsewriters.WriteObjectNegotiated(codecs, newGroupVersion, w, req, http.StatusOK, &UnregisteredAPIObject{"Undecodable"})
|
||||||
}))
|
}))
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
// We send a 200 status code before we encode the object, so we expect OK, but there will
|
// We send a 200 status code before we encode the object, so we expect OK, but there will
|
||||||
@ -3239,7 +3255,7 @@ func (storage *SimpleXGSubresourceRESTStorage) New() runtime.Object {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (storage *SimpleXGSubresourceRESTStorage) Get(ctx request.Context, id string, options *metav1.GetOptions) (runtime.Object, error) {
|
func (storage *SimpleXGSubresourceRESTStorage) Get(ctx request.Context, id string, options *metav1.GetOptions) (runtime.Object, error) {
|
||||||
copied, err := api.Scheme.Copy(&storage.item)
|
copied, err := scheme.Copy(&storage.item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -3265,14 +3281,14 @@ func TestXGSubresource(t *testing.T) {
|
|||||||
group := APIGroupVersion{
|
group := APIGroupVersion{
|
||||||
Storage: storage,
|
Storage: storage,
|
||||||
|
|
||||||
Creater: api.Scheme,
|
Creater: scheme,
|
||||||
Convertor: api.Scheme,
|
Convertor: scheme,
|
||||||
Copier: api.Scheme,
|
Copier: scheme,
|
||||||
Typer: api.Scheme,
|
Typer: scheme,
|
||||||
Linker: selfLinker,
|
Linker: selfLinker,
|
||||||
Mapper: namespaceMapper,
|
Mapper: namespaceMapper,
|
||||||
|
|
||||||
ParameterCodec: api.ParameterCodec,
|
ParameterCodec: parameterCodec,
|
||||||
|
|
||||||
Admit: admissionControl,
|
Admit: admissionControl,
|
||||||
Context: requestContextMapper,
|
Context: requestContextMapper,
|
||||||
@ -3280,7 +3296,7 @@ func TestXGSubresource(t *testing.T) {
|
|||||||
Root: "/" + prefix,
|
Root: "/" + prefix,
|
||||||
GroupVersion: testGroupVersion,
|
GroupVersion: testGroupVersion,
|
||||||
OptionsExternalVersion: &testGroupVersion,
|
OptionsExternalVersion: &testGroupVersion,
|
||||||
Serializer: api.Codecs,
|
Serializer: codecs,
|
||||||
|
|
||||||
SubresourceGroupVersionKind: map[string]schema.GroupVersionKind{
|
SubresourceGroupVersionKind: map[string]schema.GroupVersionKind{
|
||||||
"simple/subsimple": testGroup2Version.WithKind("SimpleXGSubresource"),
|
"simple/subsimple": testGroup2Version.WithKind("SimpleXGSubresource"),
|
||||||
@ -3352,8 +3368,8 @@ func BenchmarkUpdateProtobuf(b *testing.B) {
|
|||||||
dest.Path = "/" + prefix + "/" + newGroupVersion.Group + "/" + newGroupVersion.Version + "/namespaces/foo/simples/bar"
|
dest.Path = "/" + prefix + "/" + newGroupVersion.Group + "/" + newGroupVersion.Version + "/namespaces/foo/simples/bar"
|
||||||
dest.RawQuery = ""
|
dest.RawQuery = ""
|
||||||
|
|
||||||
info, _ := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), "application/vnd.kubernetes.protobuf")
|
info, _ := runtime.SerializerInfoForMediaType(codecs.SupportedMediaTypes(), "application/vnd.kubernetes.protobuf")
|
||||||
e := api.Codecs.EncoderForVersion(info.Serializer, newGroupVersion)
|
e := codecs.EncoderForVersion(info.Serializer, newGroupVersion)
|
||||||
data, err := runtime.Encode(e, &items[0])
|
data, err := runtime.Encode(e, &items[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatal(err)
|
b.Fatal(err)
|
||||||
@ -3396,12 +3412,11 @@ func newTestRequestInfoResolver() *request.RequestInfoFactory {
|
|||||||
|
|
||||||
const benchmarkSeed = 100
|
const benchmarkSeed = 100
|
||||||
|
|
||||||
func benchmarkItems(b *testing.B) []api.Pod {
|
func benchmarkItems(b *testing.B) []example.Pod {
|
||||||
apiObjectFuzzer := apitesting.FuzzerFor(kapitesting.FuzzerFuncs(b), rand.NewSource(benchmarkSeed))
|
clientapiObjectFuzzer := apitesting.FuzzerFor(examplefuzzer.Funcs(b, codecs), rand.NewSource(benchmarkSeed))
|
||||||
items := make([]api.Pod, 3)
|
items := make([]example.Pod, 3)
|
||||||
for i := range items {
|
for i := range items {
|
||||||
apiObjectFuzzer.Fuzz(&items[i])
|
clientapiObjectFuzzer.Fuzz(&items[i])
|
||||||
items[i].Spec.InitContainers, items[i].Status.InitContainerStatuses = nil, nil
|
|
||||||
}
|
}
|
||||||
return items
|
return items
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/net/websocket"
|
"golang.org/x/net/websocket"
|
||||||
|
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||||
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"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
@ -38,7 +39,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/util/diff"
|
"k8s.io/apimachinery/pkg/util/diff"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
example "k8s.io/apiserver/pkg/apis/example"
|
||||||
"k8s.io/kubernetes/pkg/genericapiserver/endpoints/handlers"
|
"k8s.io/kubernetes/pkg/genericapiserver/endpoints/handlers"
|
||||||
apitesting "k8s.io/kubernetes/pkg/genericapiserver/endpoints/testing"
|
apitesting "k8s.io/kubernetes/pkg/genericapiserver/endpoints/testing"
|
||||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||||
@ -72,13 +73,19 @@ var watchTestTable = []struct {
|
|||||||
{watch.Deleted, &apitesting.Simple{ObjectMeta: metav1.ObjectMeta{Name: "bar"}}},
|
{watch.Deleted, &apitesting.Simple{ObjectMeta: metav1.ObjectMeta{Name: "bar"}}},
|
||||||
}
|
}
|
||||||
|
|
||||||
var podWatchTestTable = []struct {
|
func podWatchTestTable() []struct {
|
||||||
t watch.EventType
|
t watch.EventType
|
||||||
obj runtime.Object
|
obj runtime.Object
|
||||||
}{
|
} {
|
||||||
{watch.Added, roundTripOrDie(codec, &api.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}})},
|
// creaze lazily here in a func because podWatchTestTable can only be used after all types are registered.
|
||||||
{watch.Modified, roundTripOrDie(codec, &api.Pod{ObjectMeta: metav1.ObjectMeta{Name: "bar"}})},
|
return []struct {
|
||||||
{watch.Deleted, roundTripOrDie(codec, &api.Pod{ObjectMeta: metav1.ObjectMeta{Name: "bar"}})},
|
t watch.EventType
|
||||||
|
obj runtime.Object
|
||||||
|
}{
|
||||||
|
{watch.Added, roundTripOrDie(codec, &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}})},
|
||||||
|
{watch.Modified, roundTripOrDie(codec, &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "bar"}})},
|
||||||
|
{watch.Deleted, roundTripOrDie(codec, &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "bar"}})},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestWatchWebsocket(t *testing.T) {
|
func TestWatchWebsocket(t *testing.T) {
|
||||||
@ -114,9 +121,6 @@ func TestWatchWebsocket(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Decode error: %v\n%v", err, got)
|
t.Fatalf("Decode error: %v\n%v", err, got)
|
||||||
}
|
}
|
||||||
if _, err := api.GetReference(api.Scheme, gotObj); err != nil {
|
|
||||||
t.Errorf("Unable to construct reference: %v", err)
|
|
||||||
}
|
|
||||||
if e, a := object, gotObj; !reflect.DeepEqual(e, a) {
|
if e, a := object, gotObj; !reflect.DeepEqual(e, a) {
|
||||||
t.Errorf("Expected %#v, got %#v", e, a)
|
t.Errorf("Expected %#v, got %#v", e, a)
|
||||||
}
|
}
|
||||||
@ -167,9 +171,6 @@ func TestWatchWebsocketClientClose(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Decode error: %v\n%v", err, got)
|
t.Fatalf("Decode error: %v\n%v", err, got)
|
||||||
}
|
}
|
||||||
if _, err := api.GetReference(api.Scheme, gotObj); err != nil {
|
|
||||||
t.Errorf("Unable to construct reference: %v", err)
|
|
||||||
}
|
|
||||||
if e, a := object, gotObj; !reflect.DeepEqual(e, a) {
|
if e, a := object, gotObj; !reflect.DeepEqual(e, a) {
|
||||||
t.Errorf("Expected %#v, got %#v", e, a)
|
t.Errorf("Expected %#v, got %#v", e, a)
|
||||||
}
|
}
|
||||||
@ -300,7 +301,7 @@ func TestWatchRead(t *testing.T) {
|
|||||||
for _, protocol := range protocols {
|
for _, protocol := range protocols {
|
||||||
for _, test := range testCases {
|
for _, test := range testCases {
|
||||||
func() {
|
func() {
|
||||||
info, ok := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), test.MediaType)
|
info, ok := runtime.SerializerInfoForMediaType(codecs.SupportedMediaTypes(), test.MediaType)
|
||||||
if !ok || info.StreamSerializer == nil {
|
if !ok || info.StreamSerializer == nil {
|
||||||
t.Fatal(info)
|
t.Fatal(info)
|
||||||
}
|
}
|
||||||
@ -312,7 +313,7 @@ func TestWatchRead(t *testing.T) {
|
|||||||
if contentType != "__default__" && contentType != test.ExpectedContentType {
|
if contentType != "__default__" && contentType != test.ExpectedContentType {
|
||||||
t.Errorf("Unexpected content type: %#v", contentType)
|
t.Errorf("Unexpected content type: %#v", contentType)
|
||||||
}
|
}
|
||||||
objectCodec := api.Codecs.DecoderToVersion(info.Serializer, testInternalGroupVersion)
|
objectCodec := codecs.DecoderToVersion(info.Serializer, testInternalGroupVersion)
|
||||||
|
|
||||||
var fr io.ReadCloser = r
|
var fr io.ReadCloser = r
|
||||||
if !protocol.selfFraming {
|
if !protocol.selfFraming {
|
||||||
@ -326,7 +327,7 @@ func TestWatchRead(t *testing.T) {
|
|||||||
time.Sleep(time.Millisecond)
|
time.Sleep(time.Millisecond)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, item := range podWatchTestTable {
|
for i, item := range podWatchTestTable() {
|
||||||
action, object := item.t, item.obj
|
action, object := item.t, item.obj
|
||||||
name := fmt.Sprintf("%s-%s-%d", protocol.name, test.MediaType, i)
|
name := fmt.Sprintf("%s-%s-%d", protocol.name, test.MediaType, i)
|
||||||
|
|
||||||
@ -346,10 +347,7 @@ func TestWatchRead(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("%s: Decode error: %v", name, err)
|
t.Fatalf("%s: Decode error: %v", name, err)
|
||||||
}
|
}
|
||||||
if _, err := api.GetReference(api.Scheme, gotObj); err != nil {
|
if e, a := object, gotObj; !apiequality.Semantic.DeepEqual(e, a) {
|
||||||
t.Errorf("%s: Unable to construct reference: %v", name, err)
|
|
||||||
}
|
|
||||||
if e, a := object, gotObj; !api.Semantic.DeepEqual(e, a) {
|
|
||||||
t.Errorf("%s: different: %s", name, diff.ObjectDiff(e, a))
|
t.Errorf("%s: different: %s", name, diff.ObjectDiff(e, a))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -569,7 +567,7 @@ func TestWatchHTTPTimeout(t *testing.T) {
|
|||||||
timeoutCh := make(chan time.Time)
|
timeoutCh := make(chan time.Time)
|
||||||
done := make(chan struct{})
|
done := make(chan struct{})
|
||||||
|
|
||||||
info, ok := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), runtime.ContentTypeJSON)
|
info, ok := runtime.SerializerInfoForMediaType(codecs.SupportedMediaTypes(), runtime.ContentTypeJSON)
|
||||||
if !ok || info.StreamSerializer == nil {
|
if !ok || info.StreamSerializer == nil {
|
||||||
t.Fatal(info)
|
t.Fatal(info)
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package example
|
package fuzzer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/google/gofuzz"
|
"github.com/google/gofuzz"
|
||||||
@ -23,6 +23,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
|
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
|
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
|
||||||
|
"k8s.io/apiserver/pkg/apis/example"
|
||||||
)
|
)
|
||||||
|
|
||||||
// overrideGenericFuncs override some generic fuzzer funcs from k8s.io/apiserver in order to have more realistic
|
// overrideGenericFuncs override some generic fuzzer funcs from k8s.io/apiserver in order to have more realistic
|
||||||
@ -38,7 +39,7 @@ func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.C
|
|||||||
ContentType: runtime.ContentTypeJSON,
|
ContentType: runtime.ContentTypeJSON,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
types := []runtime.Object{&Pod{}}
|
types := []runtime.Object{&example.Pod{}}
|
||||||
t := types[c.Rand.Intn(len(types))]
|
t := types[c.Rand.Intn(len(types))]
|
||||||
c.Fuzz(t)
|
c.Fuzz(t)
|
||||||
*j = t
|
*j = t
|
||||||
@ -46,7 +47,7 @@ func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.C
|
|||||||
},
|
},
|
||||||
func(r *runtime.RawExtension, c fuzz.Continue) {
|
func(r *runtime.RawExtension, c fuzz.Continue) {
|
||||||
// Pick an arbitrary type and fuzz it
|
// Pick an arbitrary type and fuzz it
|
||||||
types := []runtime.Object{&Pod{}}
|
types := []runtime.Object{&example.Pod{}}
|
||||||
obj := types[c.Rand.Intn(len(types))]
|
obj := types[c.Rand.Intn(len(types))]
|
||||||
c.Fuzz(obj)
|
c.Fuzz(obj)
|
||||||
|
|
||||||
@ -65,7 +66,7 @@ func overrideGenericFuncs(t apitesting.TestingCommon, codecs runtimeserializer.C
|
|||||||
|
|
||||||
func exampleFuncs(t apitesting.TestingCommon) []interface{} {
|
func exampleFuncs(t apitesting.TestingCommon) []interface{} {
|
||||||
return []interface{}{
|
return []interface{}{
|
||||||
func(s *PodSpec, c fuzz.Continue) {
|
func(s *example.PodSpec, c fuzz.Continue) {
|
||||||
c.FuzzNoCustom(s)
|
c.FuzzNoCustom(s)
|
||||||
// has a default value
|
// has a default value
|
||||||
ttl := int64(30)
|
ttl := int64(30)
|
||||||
@ -78,18 +79,18 @@ func exampleFuncs(t apitesting.TestingCommon) []interface{} {
|
|||||||
s.SchedulerName = "default-scheduler"
|
s.SchedulerName = "default-scheduler"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
func(j *PodPhase, c fuzz.Continue) {
|
func(j *example.PodPhase, c fuzz.Continue) {
|
||||||
statuses := []PodPhase{"Pending", "Running", "Succeeded", "Failed", "Unknown"}
|
statuses := []example.PodPhase{"Pending", "Running", "Succeeded", "Failed", "Unknown"}
|
||||||
*j = statuses[c.Rand.Intn(len(statuses))]
|
*j = statuses[c.Rand.Intn(len(statuses))]
|
||||||
},
|
},
|
||||||
func(rp *RestartPolicy, c fuzz.Continue) {
|
func(rp *example.RestartPolicy, c fuzz.Continue) {
|
||||||
policies := []RestartPolicy{"Always", "Never", "OnFailure"}
|
policies := []example.RestartPolicy{"Always", "Never", "OnFailure"}
|
||||||
*rp = policies[c.Rand.Intn(len(policies))]
|
*rp = policies[c.Rand.Intn(len(policies))]
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func FuzzerFuncs(t apitesting.TestingCommon, codecs runtimeserializer.CodecFactory) []interface{} {
|
func Funcs(t apitesting.TestingCommon, codecs runtimeserializer.CodecFactory) []interface{} {
|
||||||
return apitesting.MergeFuzzerFuncs(t,
|
return apitesting.MergeFuzzerFuncs(t,
|
||||||
apitesting.GenericFuzzerFuncs(t, codecs),
|
apitesting.GenericFuzzerFuncs(t, codecs),
|
||||||
overrideGenericFuncs(t, codecs),
|
overrideGenericFuncs(t, codecs),
|
Loading…
Reference in New Issue
Block a user