mirror of https://github.com/k3s-io/k3s
Merge pull request #15362 from wojtek-t/refactor_test_objects
Refactor test objects to a separate packagepull/6/head
commit
e4c910a35a
|
@ -38,6 +38,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/rest"
|
"k8s.io/kubernetes/pkg/api/rest"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
apiservertesting "k8s.io/kubernetes/pkg/apiserver/testing"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
@ -102,7 +103,9 @@ func addTestTypes() {
|
||||||
Watch bool `json:"watch,omitempty"`
|
Watch bool `json:"watch,omitempty"`
|
||||||
ResourceVersion string `json:"resourceVersion,omitempty"`
|
ResourceVersion string `json:"resourceVersion,omitempty"`
|
||||||
}
|
}
|
||||||
api.Scheme.AddKnownTypes(testVersion, &Simple{}, &SimpleList{}, &unversioned.Status{}, &ListOptions{}, &api.DeleteOptions{}, &SimpleGetOptions{}, &SimpleRoot{})
|
api.Scheme.AddKnownTypes(
|
||||||
|
testVersion, &apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &unversioned.Status{},
|
||||||
|
&ListOptions{}, &api.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{})
|
||||||
api.Scheme.AddKnownTypes(testVersion, &api.Pod{})
|
api.Scheme.AddKnownTypes(testVersion, &api.Pod{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +118,9 @@ func addNewTestTypes() {
|
||||||
Watch bool `json:"watch,omitempty"`
|
Watch bool `json:"watch,omitempty"`
|
||||||
ResourceVersion string `json:"resourceVersion,omitempty"`
|
ResourceVersion string `json:"resourceVersion,omitempty"`
|
||||||
}
|
}
|
||||||
api.Scheme.AddKnownTypes(newVersion, &Simple{}, &SimpleList{}, &unversioned.Status{}, &ListOptions{}, &api.DeleteOptions{}, &SimpleGetOptions{}, &SimpleRoot{})
|
api.Scheme.AddKnownTypes(
|
||||||
|
newVersion, &apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &unversioned.Status{},
|
||||||
|
&ListOptions{}, &api.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -123,7 +128,9 @@ func init() {
|
||||||
// api.Status is returned in errors
|
// api.Status is returned in errors
|
||||||
|
|
||||||
// "internal" version
|
// "internal" version
|
||||||
api.Scheme.AddKnownTypes("", &Simple{}, &SimpleList{}, &unversioned.Status{}, &api.ListOptions{}, &SimpleGetOptions{}, &SimpleRoot{})
|
api.Scheme.AddKnownTypes(
|
||||||
|
"", &apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &unversioned.Status{},
|
||||||
|
&api.ListOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{})
|
||||||
addTestTypes()
|
addTestTypes()
|
||||||
addNewTestTypes()
|
addNewTestTypes()
|
||||||
|
|
||||||
|
@ -234,50 +241,8 @@ func handleInternal(legacy bool, storage map[string]rest.Storage, admissionContr
|
||||||
return &defaultAPIServer{mux, group, container}
|
return &defaultAPIServer{mux, group, container}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Simple struct {
|
|
||||||
unversioned.TypeMeta `json:",inline"`
|
|
||||||
api.ObjectMeta `json:"metadata"`
|
|
||||||
Other string `json:"other,omitempty"`
|
|
||||||
Labels map[string]string `json:"labels,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Simple) IsAnAPIObject() {}
|
|
||||||
|
|
||||||
type SimpleRoot struct {
|
|
||||||
unversioned.TypeMeta `json:",inline"`
|
|
||||||
api.ObjectMeta `json:"metadata"`
|
|
||||||
Other string `json:"other,omitempty"`
|
|
||||||
Labels map[string]string `json:"labels,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*SimpleRoot) IsAnAPIObject() {}
|
|
||||||
|
|
||||||
type SimpleGetOptions struct {
|
|
||||||
unversioned.TypeMeta `json:",inline"`
|
|
||||||
Param1 string `json:"param1"`
|
|
||||||
Param2 string `json:"param2"`
|
|
||||||
Path string `json:"atAPath"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (SimpleGetOptions) SwaggerDoc() map[string]string {
|
|
||||||
return map[string]string{
|
|
||||||
"param1": "description for param1",
|
|
||||||
"param2": "description for param2",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*SimpleGetOptions) IsAnAPIObject() {}
|
|
||||||
|
|
||||||
type SimpleList struct {
|
|
||||||
unversioned.TypeMeta `json:",inline"`
|
|
||||||
unversioned.ListMeta `json:"metadata,inline"`
|
|
||||||
Items []Simple `json:"items,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*SimpleList) IsAnAPIObject() {}
|
|
||||||
|
|
||||||
func TestSimpleSetupRight(t *testing.T) {
|
func TestSimpleSetupRight(t *testing.T) {
|
||||||
s := &Simple{ObjectMeta: api.ObjectMeta{Name: "aName"}}
|
s := &apiservertesting.Simple{ObjectMeta: api.ObjectMeta{Name: "aName"}}
|
||||||
wire, err := codec.Encode(s)
|
wire, err := codec.Encode(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
@ -292,7 +257,7 @@ func TestSimpleSetupRight(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSimpleOptionsSetupRight(t *testing.T) {
|
func TestSimpleOptionsSetupRight(t *testing.T) {
|
||||||
s := &SimpleGetOptions{}
|
s := &apiservertesting.SimpleGetOptions{}
|
||||||
wire, err := codec.Encode(s)
|
wire, err := codec.Encode(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
@ -308,11 +273,11 @@ func TestSimpleOptionsSetupRight(t *testing.T) {
|
||||||
|
|
||||||
type SimpleRESTStorage struct {
|
type SimpleRESTStorage struct {
|
||||||
errors map[string]error
|
errors map[string]error
|
||||||
list []Simple
|
list []apiservertesting.Simple
|
||||||
item Simple
|
item apiservertesting.Simple
|
||||||
|
|
||||||
updated *Simple
|
updated *apiservertesting.Simple
|
||||||
created *Simple
|
created *apiservertesting.Simple
|
||||||
|
|
||||||
stream *SimpleStream
|
stream *SimpleStream
|
||||||
|
|
||||||
|
@ -342,7 +307,7 @@ type SimpleRESTStorage struct {
|
||||||
|
|
||||||
func (storage *SimpleRESTStorage) List(ctx api.Context, label labels.Selector, field fields.Selector) (runtime.Object, error) {
|
func (storage *SimpleRESTStorage) List(ctx api.Context, label labels.Selector, field fields.Selector) (runtime.Object, error) {
|
||||||
storage.checkContext(ctx)
|
storage.checkContext(ctx)
|
||||||
result := &SimpleList{
|
result := &apiservertesting.SimpleList{
|
||||||
Items: storage.list,
|
Items: storage.list,
|
||||||
}
|
}
|
||||||
storage.requestedLabelSelector = label
|
storage.requestedLabelSelector = label
|
||||||
|
@ -408,22 +373,22 @@ func (storage *SimpleRESTStorage) Delete(ctx api.Context, id string, options *ap
|
||||||
var obj runtime.Object = &unversioned.Status{Status: unversioned.StatusSuccess}
|
var obj runtime.Object = &unversioned.Status{Status: unversioned.StatusSuccess}
|
||||||
var err error
|
var err error
|
||||||
if storage.injectedFunction != nil {
|
if storage.injectedFunction != nil {
|
||||||
obj, err = storage.injectedFunction(&Simple{ObjectMeta: api.ObjectMeta{Name: id}})
|
obj, err = storage.injectedFunction(&apiservertesting.Simple{ObjectMeta: api.ObjectMeta{Name: id}})
|
||||||
}
|
}
|
||||||
return obj, err
|
return obj, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (storage *SimpleRESTStorage) New() runtime.Object {
|
func (storage *SimpleRESTStorage) New() runtime.Object {
|
||||||
return &Simple{}
|
return &apiservertesting.Simple{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (storage *SimpleRESTStorage) NewList() runtime.Object {
|
func (storage *SimpleRESTStorage) NewList() runtime.Object {
|
||||||
return &SimpleList{}
|
return &apiservertesting.SimpleList{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (storage *SimpleRESTStorage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) {
|
func (storage *SimpleRESTStorage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) {
|
||||||
storage.checkContext(ctx)
|
storage.checkContext(ctx)
|
||||||
storage.created = obj.(*Simple)
|
storage.created = obj.(*apiservertesting.Simple)
|
||||||
if err := storage.errors["create"]; err != nil {
|
if err := storage.errors["create"]; err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -436,7 +401,7 @@ func (storage *SimpleRESTStorage) Create(ctx api.Context, obj runtime.Object) (r
|
||||||
|
|
||||||
func (storage *SimpleRESTStorage) Update(ctx api.Context, obj runtime.Object) (runtime.Object, bool, error) {
|
func (storage *SimpleRESTStorage) Update(ctx api.Context, obj runtime.Object) (runtime.Object, bool, error) {
|
||||||
storage.checkContext(ctx)
|
storage.checkContext(ctx)
|
||||||
storage.updated = obj.(*Simple)
|
storage.updated = obj.(*apiservertesting.Simple)
|
||||||
if err := storage.errors["update"]; err != nil {
|
if err := storage.errors["update"]; err != nil {
|
||||||
return nil, false, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
|
@ -494,7 +459,7 @@ type ConnecterRESTStorage struct {
|
||||||
var _ = rest.Connecter(&ConnecterRESTStorage{})
|
var _ = rest.Connecter(&ConnecterRESTStorage{})
|
||||||
|
|
||||||
func (s *ConnecterRESTStorage) New() runtime.Object {
|
func (s *ConnecterRESTStorage) New() runtime.Object {
|
||||||
return &Simple{}
|
return &apiservertesting.Simple{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ConnecterRESTStorage) Connect(ctx api.Context, id string, options runtime.Object) (rest.ConnectHandler, error) {
|
func (s *ConnecterRESTStorage) Connect(ctx api.Context, id string, options runtime.Object) (rest.ConnectHandler, error) {
|
||||||
|
@ -540,7 +505,7 @@ type GetWithOptionsRESTStorage struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *GetWithOptionsRESTStorage) Get(ctx api.Context, name string, options runtime.Object) (runtime.Object, error) {
|
func (r *GetWithOptionsRESTStorage) Get(ctx api.Context, name string, options runtime.Object) (runtime.Object, error) {
|
||||||
if _, ok := options.(*SimpleGetOptions); !ok {
|
if _, ok := options.(*apiservertesting.SimpleGetOptions); !ok {
|
||||||
return nil, fmt.Errorf("Unexpected options object: %#v", options)
|
return nil, fmt.Errorf("Unexpected options object: %#v", options)
|
||||||
}
|
}
|
||||||
r.optionsReceived = options
|
r.optionsReceived = options
|
||||||
|
@ -549,9 +514,9 @@ func (r *GetWithOptionsRESTStorage) Get(ctx api.Context, name string, options ru
|
||||||
|
|
||||||
func (r *GetWithOptionsRESTStorage) NewGetOptions() (runtime.Object, bool, string) {
|
func (r *GetWithOptionsRESTStorage) NewGetOptions() (runtime.Object, bool, string) {
|
||||||
if len(r.takesPath) > 0 {
|
if len(r.takesPath) > 0 {
|
||||||
return &SimpleGetOptions{}, true, r.takesPath
|
return &apiservertesting.SimpleGetOptions{}, true, r.takesPath
|
||||||
}
|
}
|
||||||
return &SimpleGetOptions{}, false, ""
|
return &apiservertesting.SimpleGetOptions{}, false, ""
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ rest.GetterWithOptions = &GetWithOptionsRESTStorage{}
|
var _ rest.GetterWithOptions = &GetWithOptionsRESTStorage{}
|
||||||
|
@ -563,7 +528,7 @@ type NamedCreaterRESTStorage struct {
|
||||||
|
|
||||||
func (storage *NamedCreaterRESTStorage) Create(ctx api.Context, name string, obj runtime.Object) (runtime.Object, error) {
|
func (storage *NamedCreaterRESTStorage) Create(ctx api.Context, name string, obj runtime.Object) (runtime.Object, error) {
|
||||||
storage.checkContext(ctx)
|
storage.checkContext(ctx)
|
||||||
storage.created = obj.(*Simple)
|
storage.created = obj.(*apiservertesting.Simple)
|
||||||
storage.createdName = name
|
storage.createdName = name
|
||||||
if err := storage.errors["create"]; err != nil {
|
if err := storage.errors["create"]; err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -673,7 +638,7 @@ func TestNotFound(t *testing.T) {
|
||||||
type UnimplementedRESTStorage struct{}
|
type UnimplementedRESTStorage struct{}
|
||||||
|
|
||||||
func (UnimplementedRESTStorage) New() runtime.Object {
|
func (UnimplementedRESTStorage) New() runtime.Object {
|
||||||
return &Simple{}
|
return &apiservertesting.Simple{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestUnimplementedRESTStorage ensures that if a rest.Storage does not implement a given
|
// TestUnimplementedRESTStorage ensures that if a rest.Storage does not implement a given
|
||||||
|
@ -910,7 +875,7 @@ func TestErrorList(t *testing.T) {
|
||||||
func TestNonEmptyList(t *testing.T) {
|
func TestNonEmptyList(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
simpleStorage := SimpleRESTStorage{
|
simpleStorage := SimpleRESTStorage{
|
||||||
list: []Simple{
|
list: []apiservertesting.Simple{
|
||||||
{
|
{
|
||||||
ObjectMeta: api.ObjectMeta{Name: "something", Namespace: "other"},
|
ObjectMeta: api.ObjectMeta{Name: "something", Namespace: "other"},
|
||||||
Other: "foo",
|
Other: "foo",
|
||||||
|
@ -936,7 +901,7 @@ func TestNonEmptyList(t *testing.T) {
|
||||||
t.Logf("Data: %s", string(body))
|
t.Logf("Data: %s", string(body))
|
||||||
}
|
}
|
||||||
|
|
||||||
var listOut SimpleList
|
var listOut apiservertesting.SimpleList
|
||||||
body, err := extractBody(resp, &listOut)
|
body, err := extractBody(resp, &listOut)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
@ -961,7 +926,7 @@ func TestNonEmptyList(t *testing.T) {
|
||||||
func TestSelfLinkSkipsEmptyName(t *testing.T) {
|
func TestSelfLinkSkipsEmptyName(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
simpleStorage := SimpleRESTStorage{
|
simpleStorage := SimpleRESTStorage{
|
||||||
list: []Simple{
|
list: []apiservertesting.Simple{
|
||||||
{
|
{
|
||||||
ObjectMeta: api.ObjectMeta{Namespace: "other"},
|
ObjectMeta: api.ObjectMeta{Namespace: "other"},
|
||||||
Other: "foo",
|
Other: "foo",
|
||||||
|
@ -986,7 +951,7 @@ func TestSelfLinkSkipsEmptyName(t *testing.T) {
|
||||||
}
|
}
|
||||||
t.Logf("Data: %s", string(body))
|
t.Logf("Data: %s", string(body))
|
||||||
}
|
}
|
||||||
var listOut SimpleList
|
var listOut apiservertesting.SimpleList
|
||||||
body, err := extractBody(resp, &listOut)
|
body, err := extractBody(resp, &listOut)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
@ -1031,7 +996,7 @@ func TestMetadata(t *testing.T) {
|
||||||
func TestGet(t *testing.T) {
|
func TestGet(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
simpleStorage := SimpleRESTStorage{
|
simpleStorage := SimpleRESTStorage{
|
||||||
item: Simple{
|
item: apiservertesting.Simple{
|
||||||
Other: "foo",
|
Other: "foo",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -1053,7 +1018,7 @@ func TestGet(t *testing.T) {
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
t.Fatalf("unexpected response: %#v", resp)
|
t.Fatalf("unexpected response: %#v", resp)
|
||||||
}
|
}
|
||||||
var itemOut Simple
|
var itemOut apiservertesting.Simple
|
||||||
body, err := extractBody(resp, &itemOut)
|
body, err := extractBody(resp, &itemOut)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -1145,7 +1110,7 @@ func TestGetWithOptions(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
simpleStorage := GetWithOptionsRESTStorage{
|
simpleStorage := GetWithOptionsRESTStorage{
|
||||||
SimpleRESTStorage: &SimpleRESTStorage{
|
SimpleRESTStorage: &SimpleRESTStorage{
|
||||||
item: Simple{
|
item: apiservertesting.Simple{
|
||||||
Other: "foo",
|
Other: "foo",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1162,7 +1127,7 @@ func TestGetWithOptions(t *testing.T) {
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
t.Fatalf("unexpected response: %#v", resp)
|
t.Fatalf("unexpected response: %#v", resp)
|
||||||
}
|
}
|
||||||
var itemOut Simple
|
var itemOut apiservertesting.Simple
|
||||||
body, err := extractBody(resp, &itemOut)
|
body, err := extractBody(resp, &itemOut)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -1172,7 +1137,7 @@ func TestGetWithOptions(t *testing.T) {
|
||||||
t.Errorf("Unexpected data: %#v, expected %#v (%s)", itemOut, simpleStorage.item, string(body))
|
t.Errorf("Unexpected data: %#v, expected %#v (%s)", itemOut, simpleStorage.item, string(body))
|
||||||
}
|
}
|
||||||
|
|
||||||
opts, ok := simpleStorage.optionsReceived.(*SimpleGetOptions)
|
opts, ok := simpleStorage.optionsReceived.(*apiservertesting.SimpleGetOptions)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Errorf("Unexpected options object received: %#v", simpleStorage.optionsReceived)
|
t.Errorf("Unexpected options object received: %#v", simpleStorage.optionsReceived)
|
||||||
return
|
return
|
||||||
|
@ -1186,7 +1151,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
simpleStorage := GetWithOptionsRESTStorage{
|
simpleStorage := GetWithOptionsRESTStorage{
|
||||||
SimpleRESTStorage: &SimpleRESTStorage{
|
SimpleRESTStorage: &SimpleRESTStorage{
|
||||||
item: Simple{
|
item: apiservertesting.Simple{
|
||||||
Other: "foo",
|
Other: "foo",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1204,7 +1169,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
t.Fatalf("unexpected response: %#v", resp)
|
t.Fatalf("unexpected response: %#v", resp)
|
||||||
}
|
}
|
||||||
var itemOut Simple
|
var itemOut apiservertesting.Simple
|
||||||
body, err := extractBody(resp, &itemOut)
|
body, err := extractBody(resp, &itemOut)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -1214,7 +1179,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
|
||||||
t.Errorf("Unexpected data: %#v, expected %#v (%s)", itemOut, simpleStorage.item, string(body))
|
t.Errorf("Unexpected data: %#v, expected %#v (%s)", itemOut, simpleStorage.item, string(body))
|
||||||
}
|
}
|
||||||
|
|
||||||
opts, ok := simpleStorage.optionsReceived.(*SimpleGetOptions)
|
opts, ok := simpleStorage.optionsReceived.(*apiservertesting.SimpleGetOptions)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Errorf("Unexpected options object received: %#v", simpleStorage.optionsReceived)
|
t.Errorf("Unexpected options object received: %#v", simpleStorage.optionsReceived)
|
||||||
return
|
return
|
||||||
|
@ -1226,7 +1191,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
|
||||||
func TestGetAlternateSelfLink(t *testing.T) {
|
func TestGetAlternateSelfLink(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
simpleStorage := SimpleRESTStorage{
|
simpleStorage := SimpleRESTStorage{
|
||||||
item: Simple{
|
item: apiservertesting.Simple{
|
||||||
Other: "foo",
|
Other: "foo",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -1248,7 +1213,7 @@ func TestGetAlternateSelfLink(t *testing.T) {
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
t.Fatalf("unexpected response: %#v", resp)
|
t.Fatalf("unexpected response: %#v", resp)
|
||||||
}
|
}
|
||||||
var itemOut Simple
|
var itemOut apiservertesting.Simple
|
||||||
body, err := extractBody(resp, &itemOut)
|
body, err := extractBody(resp, &itemOut)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
@ -1264,7 +1229,7 @@ func TestGetAlternateSelfLink(t *testing.T) {
|
||||||
func TestGetNamespaceSelfLink(t *testing.T) {
|
func TestGetNamespaceSelfLink(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
simpleStorage := SimpleRESTStorage{
|
simpleStorage := SimpleRESTStorage{
|
||||||
item: Simple{
|
item: apiservertesting.Simple{
|
||||||
Other: "foo",
|
Other: "foo",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -1286,7 +1251,7 @@ func TestGetNamespaceSelfLink(t *testing.T) {
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
t.Fatalf("unexpected response: %#v", resp)
|
t.Fatalf("unexpected response: %#v", resp)
|
||||||
}
|
}
|
||||||
var itemOut Simple
|
var itemOut apiservertesting.Simple
|
||||||
body, err := extractBody(resp, &itemOut)
|
body, err := extractBody(resp, &itemOut)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
@ -1358,7 +1323,7 @@ func TestConnect(t *testing.T) {
|
||||||
func TestConnectWithOptionsRouteParams(t *testing.T) {
|
func TestConnectWithOptionsRouteParams(t *testing.T) {
|
||||||
connectStorage := &ConnecterRESTStorage{
|
connectStorage := &ConnecterRESTStorage{
|
||||||
connectHandler: &SimpleConnectHandler{},
|
connectHandler: &SimpleConnectHandler{},
|
||||||
emptyConnectOptions: &SimpleGetOptions{},
|
emptyConnectOptions: &apiservertesting.SimpleGetOptions{},
|
||||||
}
|
}
|
||||||
storage := map[string]rest.Storage{
|
storage := map[string]rest.Storage{
|
||||||
"simple": &SimpleRESTStorage{},
|
"simple": &SimpleRESTStorage{},
|
||||||
|
@ -1389,7 +1354,7 @@ func TestConnectWithOptions(t *testing.T) {
|
||||||
connectHandler: &SimpleConnectHandler{
|
connectHandler: &SimpleConnectHandler{
|
||||||
response: responseText,
|
response: responseText,
|
||||||
},
|
},
|
||||||
emptyConnectOptions: &SimpleGetOptions{},
|
emptyConnectOptions: &apiservertesting.SimpleGetOptions{},
|
||||||
}
|
}
|
||||||
storage := map[string]rest.Storage{
|
storage := map[string]rest.Storage{
|
||||||
"simple": &SimpleRESTStorage{},
|
"simple": &SimpleRESTStorage{},
|
||||||
|
@ -1418,7 +1383,7 @@ func TestConnectWithOptions(t *testing.T) {
|
||||||
if string(body) != responseText {
|
if string(body) != responseText {
|
||||||
t.Errorf("Unexpected response. Expected: %s. Actual: %s.", responseText, string(body))
|
t.Errorf("Unexpected response. Expected: %s. Actual: %s.", responseText, string(body))
|
||||||
}
|
}
|
||||||
opts, ok := connectStorage.receivedConnectOptions.(*SimpleGetOptions)
|
opts, ok := connectStorage.receivedConnectOptions.(*apiservertesting.SimpleGetOptions)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Errorf("Unexpected options type: %#v", connectStorage.receivedConnectOptions)
|
t.Errorf("Unexpected options type: %#v", connectStorage.receivedConnectOptions)
|
||||||
}
|
}
|
||||||
|
@ -1435,7 +1400,7 @@ func TestConnectWithOptionsAndPath(t *testing.T) {
|
||||||
connectHandler: &SimpleConnectHandler{
|
connectHandler: &SimpleConnectHandler{
|
||||||
response: responseText,
|
response: responseText,
|
||||||
},
|
},
|
||||||
emptyConnectOptions: &SimpleGetOptions{},
|
emptyConnectOptions: &apiservertesting.SimpleGetOptions{},
|
||||||
takesPath: "atAPath",
|
takesPath: "atAPath",
|
||||||
}
|
}
|
||||||
storage := map[string]rest.Storage{
|
storage := map[string]rest.Storage{
|
||||||
|
@ -1465,7 +1430,7 @@ func TestConnectWithOptionsAndPath(t *testing.T) {
|
||||||
if string(body) != responseText {
|
if string(body) != responseText {
|
||||||
t.Errorf("Unexpected response. Expected: %s. Actual: %s.", responseText, string(body))
|
t.Errorf("Unexpected response. Expected: %s. Actual: %s.", responseText, string(body))
|
||||||
}
|
}
|
||||||
opts, ok := connectStorage.receivedConnectOptions.(*SimpleGetOptions)
|
opts, ok := connectStorage.receivedConnectOptions.(*apiservertesting.SimpleGetOptions)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Errorf("Unexpected options type: %#v", connectStorage.receivedConnectOptions)
|
t.Errorf("Unexpected options type: %#v", connectStorage.receivedConnectOptions)
|
||||||
}
|
}
|
||||||
|
@ -1645,7 +1610,7 @@ func TestDeleteMissing(t *testing.T) {
|
||||||
func TestPatch(t *testing.T) {
|
func TestPatch(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
ID := "id"
|
ID := "id"
|
||||||
item := &Simple{
|
item := &apiservertesting.Simple{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: ID,
|
Name: ID,
|
||||||
Namespace: "", // update should allow the client to send an empty namespace
|
Namespace: "", // update should allow the client to send an empty namespace
|
||||||
|
@ -1683,7 +1648,7 @@ func TestPatch(t *testing.T) {
|
||||||
func TestPatchRequiresMatchingName(t *testing.T) {
|
func TestPatchRequiresMatchingName(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
ID := "id"
|
ID := "id"
|
||||||
item := &Simple{
|
item := &apiservertesting.Simple{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: ID,
|
Name: ID,
|
||||||
Namespace: "", // update should allow the client to send an empty namespace
|
Namespace: "", // update should allow the client to send an empty namespace
|
||||||
|
@ -1723,7 +1688,7 @@ func TestUpdate(t *testing.T) {
|
||||||
server := httptest.NewServer(handler)
|
server := httptest.NewServer(handler)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
item := &Simple{
|
item := &apiservertesting.Simple{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: ID,
|
Name: ID,
|
||||||
Namespace: "", // update should allow the client to send an empty namespace
|
Namespace: "", // update should allow the client to send an empty namespace
|
||||||
|
@ -1760,7 +1725,7 @@ func TestUpdateInvokesAdmissionControl(t *testing.T) {
|
||||||
server := httptest.NewServer(handler)
|
server := httptest.NewServer(handler)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
item := &Simple{
|
item := &apiservertesting.Simple{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: ID,
|
Name: ID,
|
||||||
Namespace: api.NamespaceDefault,
|
Namespace: api.NamespaceDefault,
|
||||||
|
@ -1793,7 +1758,7 @@ func TestUpdateRequiresMatchingName(t *testing.T) {
|
||||||
server := httptest.NewServer(handler)
|
server := httptest.NewServer(handler)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
item := &Simple{
|
item := &apiservertesting.Simple{
|
||||||
Other: "bar",
|
Other: "bar",
|
||||||
}
|
}
|
||||||
body, err := codec.Encode(item)
|
body, err := codec.Encode(item)
|
||||||
|
@ -1822,7 +1787,7 @@ func TestUpdateAllowsMissingNamespace(t *testing.T) {
|
||||||
server := httptest.NewServer(handler)
|
server := httptest.NewServer(handler)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
item := &Simple{
|
item := &apiservertesting.Simple{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: ID,
|
Name: ID,
|
||||||
},
|
},
|
||||||
|
@ -1859,7 +1824,7 @@ func TestUpdateAllowsMismatchedNamespaceOnError(t *testing.T) {
|
||||||
server := httptest.NewServer(handler)
|
server := httptest.NewServer(handler)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
item := &Simple{
|
item := &apiservertesting.Simple{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: ID,
|
Name: ID,
|
||||||
Namespace: "other", // does not match request
|
Namespace: "other", // does not match request
|
||||||
|
@ -1896,7 +1861,7 @@ func TestUpdatePreventsMismatchedNamespace(t *testing.T) {
|
||||||
server := httptest.NewServer(handler)
|
server := httptest.NewServer(handler)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
item := &Simple{
|
item := &apiservertesting.Simple{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: ID,
|
Name: ID,
|
||||||
Namespace: "other",
|
Namespace: "other",
|
||||||
|
@ -1931,7 +1896,7 @@ func TestUpdateMissing(t *testing.T) {
|
||||||
server := httptest.NewServer(handler)
|
server := httptest.NewServer(handler)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
item := &Simple{
|
item := &apiservertesting.Simple{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: ID,
|
Name: ID,
|
||||||
Namespace: api.NamespaceDefault,
|
Namespace: api.NamespaceDefault,
|
||||||
|
@ -1966,7 +1931,7 @@ func TestCreateNotFound(t *testing.T) {
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
|
|
||||||
simple := &Simple{Other: "foo"}
|
simple := &apiservertesting.Simple{Other: "foo"}
|
||||||
data, err := codec.Encode(simple)
|
data, err := codec.Encode(simple)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -2097,8 +2062,8 @@ func TestUpdateREST(t *testing.T) {
|
||||||
|
|
||||||
func TestParentResourceIsRequired(t *testing.T) {
|
func TestParentResourceIsRequired(t *testing.T) {
|
||||||
storage := &SimpleTypedStorage{
|
storage := &SimpleTypedStorage{
|
||||||
baseType: &SimpleRoot{}, // a root scoped type
|
baseType: &apiservertesting.SimpleRoot{}, // a root scoped type
|
||||||
item: &SimpleRoot{},
|
item: &apiservertesting.SimpleRoot{},
|
||||||
}
|
}
|
||||||
group := &APIGroupVersion{
|
group := &APIGroupVersion{
|
||||||
Storage: map[string]rest.Storage{
|
Storage: map[string]rest.Storage{
|
||||||
|
@ -2125,8 +2090,8 @@ func TestParentResourceIsRequired(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
storage = &SimpleTypedStorage{
|
storage = &SimpleTypedStorage{
|
||||||
baseType: &SimpleRoot{}, // a root scoped type
|
baseType: &apiservertesting.SimpleRoot{}, // a root scoped type
|
||||||
item: &SimpleRoot{},
|
item: &apiservertesting.SimpleRoot{},
|
||||||
}
|
}
|
||||||
group = &APIGroupVersion{
|
group = &APIGroupVersion{
|
||||||
Storage: map[string]rest.Storage{
|
Storage: map[string]rest.Storage{
|
||||||
|
@ -2182,7 +2147,7 @@ func TestCreateWithName(t *testing.T) {
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
|
|
||||||
simple := &Simple{Other: "foo"}
|
simple := &apiservertesting.Simple{Other: "foo"}
|
||||||
data, err := codec.Encode(simple)
|
data, err := codec.Encode(simple)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -2283,7 +2248,7 @@ func TestCreate(t *testing.T) {
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
|
|
||||||
simple := &Simple{
|
simple := &apiservertesting.Simple{
|
||||||
Other: "bar",
|
Other: "bar",
|
||||||
}
|
}
|
||||||
data, err := codec.Encode(simple)
|
data, err := codec.Encode(simple)
|
||||||
|
@ -2307,7 +2272,7 @@ func TestCreate(t *testing.T) {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var itemOut Simple
|
var itemOut apiservertesting.Simple
|
||||||
body, err := extractBody(response, &itemOut)
|
body, err := extractBody(response, &itemOut)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -2342,7 +2307,7 @@ func TestCreateInNamespace(t *testing.T) {
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
|
|
||||||
simple := &Simple{
|
simple := &apiservertesting.Simple{
|
||||||
Other: "bar",
|
Other: "bar",
|
||||||
}
|
}
|
||||||
data, err := codec.Encode(simple)
|
data, err := codec.Encode(simple)
|
||||||
|
@ -2366,7 +2331,7 @@ func TestCreateInNamespace(t *testing.T) {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var itemOut Simple
|
var itemOut apiservertesting.Simple
|
||||||
body, err := extractBody(response, &itemOut)
|
body, err := extractBody(response, &itemOut)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -2401,7 +2366,7 @@ func TestCreateInvokesAdmissionControl(t *testing.T) {
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
|
|
||||||
simple := &Simple{
|
simple := &apiservertesting.Simple{
|
||||||
Other: "bar",
|
Other: "bar",
|
||||||
}
|
}
|
||||||
data, err := codec.Encode(simple)
|
data, err := codec.Encode(simple)
|
||||||
|
@ -2531,7 +2496,7 @@ func TestCreateTimeout(t *testing.T) {
|
||||||
server := httptest.NewServer(handler)
|
server := httptest.NewServer(handler)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
simple := &Simple{Other: "foo"}
|
simple := &apiservertesting.Simple{Other: "foo"}
|
||||||
data, err := codec.Encode(simple)
|
data, err := codec.Encode(simple)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -2622,7 +2587,7 @@ func TestCreateChecksAPIVersion(t *testing.T) {
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
|
|
||||||
simple := &Simple{}
|
simple := &apiservertesting.Simple{}
|
||||||
//using newCodec and send the request to testVersion URL shall cause a discrepancy in apiVersion
|
//using newCodec and send the request to testVersion URL shall cause a discrepancy in apiVersion
|
||||||
data, err := newCodec.Encode(simple)
|
data, err := newCodec.Encode(simple)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -2653,7 +2618,7 @@ func TestCreateDefaultsAPIVersion(t *testing.T) {
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
|
|
||||||
simple := &Simple{}
|
simple := &apiservertesting.Simple{}
|
||||||
data, err := codec.Encode(simple)
|
data, err := codec.Encode(simple)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -2688,7 +2653,7 @@ func TestUpdateChecksAPIVersion(t *testing.T) {
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
|
|
||||||
simple := &Simple{ObjectMeta: api.ObjectMeta{Name: "bar"}}
|
simple := &apiservertesting.Simple{ObjectMeta: api.ObjectMeta{Name: "bar"}}
|
||||||
data, err := newCodec.Encode(simple)
|
data, err := newCodec.Encode(simple)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
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 (
|
||||||
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Simple struct {
|
||||||
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
api.ObjectMeta `json:"metadata"`
|
||||||
|
Other string `json:"other,omitempty"`
|
||||||
|
Labels map[string]string `json:"labels,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Simple) IsAnAPIObject() {}
|
||||||
|
|
||||||
|
type SimpleRoot struct {
|
||||||
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
api.ObjectMeta `json:"metadata"`
|
||||||
|
Other string `json:"other,omitempty"`
|
||||||
|
Labels map[string]string `json:"labels,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*SimpleRoot) IsAnAPIObject() {}
|
||||||
|
|
||||||
|
type SimpleGetOptions struct {
|
||||||
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
Param1 string `json:"param1"`
|
||||||
|
Param2 string `json:"param2"`
|
||||||
|
Path string `json:"atAPath"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SimpleGetOptions) SwaggerDoc() map[string]string {
|
||||||
|
return map[string]string{
|
||||||
|
"param1": "description for param1",
|
||||||
|
"param2": "description for param2",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*SimpleGetOptions) IsAnAPIObject() {}
|
||||||
|
|
||||||
|
type SimpleList struct {
|
||||||
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
unversioned.ListMeta `json:"metadata,inline"`
|
||||||
|
Items []Simple `json:"items,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*SimpleList) IsAnAPIObject() {}
|
|
@ -30,6 +30,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/rest"
|
"k8s.io/kubernetes/pkg/api/rest"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
apiservertesting "k8s.io/kubernetes/pkg/apiserver/testing"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
@ -47,9 +48,9 @@ var watchTestTable = []struct {
|
||||||
t watch.EventType
|
t watch.EventType
|
||||||
obj runtime.Object
|
obj runtime.Object
|
||||||
}{
|
}{
|
||||||
{watch.Added, &Simple{ObjectMeta: api.ObjectMeta{Name: "foo"}}},
|
{watch.Added, &apiservertesting.Simple{ObjectMeta: api.ObjectMeta{Name: "foo"}}},
|
||||||
{watch.Modified, &Simple{ObjectMeta: api.ObjectMeta{Name: "bar"}}},
|
{watch.Modified, &apiservertesting.Simple{ObjectMeta: api.ObjectMeta{Name: "bar"}}},
|
||||||
{watch.Deleted, &Simple{ObjectMeta: api.ObjectMeta{Name: "bar"}}},
|
{watch.Deleted, &apiservertesting.Simple{ObjectMeta: api.ObjectMeta{Name: "bar"}}},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestWatchWebsocket(t *testing.T) {
|
func TestWatchWebsocket(t *testing.T) {
|
||||||
|
@ -363,7 +364,7 @@ func TestWatchHTTPTimeout(t *testing.T) {
|
||||||
req, _ := http.NewRequest("GET", dest.String(), nil)
|
req, _ := http.NewRequest("GET", dest.String(), nil)
|
||||||
client := http.Client{}
|
client := http.Client{}
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
watcher.Add(&Simple{TypeMeta: unversioned.TypeMeta{APIVersion: newVersion}})
|
watcher.Add(&apiservertesting.Simple{TypeMeta: unversioned.TypeMeta{APIVersion: newVersion}})
|
||||||
|
|
||||||
// Make sure we can actually watch an endpoint
|
// Make sure we can actually watch an endpoint
|
||||||
decoder := json.NewDecoder(resp.Body)
|
decoder := json.NewDecoder(resp.Body)
|
||||||
|
|
|
@ -31,6 +31,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
|
kubectltesting "k8s.io/kubernetes/pkg/kubectl/testing"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
@ -38,23 +39,12 @@ import (
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
type testStruct struct {
|
|
||||||
unversioned.TypeMeta `json:",inline"`
|
|
||||||
api.ObjectMeta `json:"metadata,omitempty"`
|
|
||||||
Key string `json:"Key"`
|
|
||||||
Map map[string]int `json:"Map"`
|
|
||||||
StringList []string `json:"StringList"`
|
|
||||||
IntList []int `json:"IntList"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ts *testStruct) IsAnAPIObject() {}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
api.Scheme.AddKnownTypes("", &testStruct{})
|
api.Scheme.AddKnownTypes("", &kubectltesting.TestStruct{})
|
||||||
api.Scheme.AddKnownTypes(testapi.Default.Version(), &testStruct{})
|
api.Scheme.AddKnownTypes(testapi.Default.Version(), &kubectltesting.TestStruct{})
|
||||||
}
|
}
|
||||||
|
|
||||||
var testData = testStruct{
|
var testData = kubectltesting.TestStruct{
|
||||||
Key: "testValue",
|
Key: "testValue",
|
||||||
Map: map[string]int{"TestSubkey": 1},
|
Map: map[string]int{"TestSubkey": 1},
|
||||||
StringList: []string{"a", "b", "c"},
|
StringList: []string{"a", "b", "c"},
|
||||||
|
@ -62,13 +52,13 @@ var testData = testStruct{
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestVersionedPrinter(t *testing.T) {
|
func TestVersionedPrinter(t *testing.T) {
|
||||||
original := &testStruct{Key: "value"}
|
original := &kubectltesting.TestStruct{Key: "value"}
|
||||||
p := NewVersionedPrinter(
|
p := NewVersionedPrinter(
|
||||||
ResourcePrinterFunc(func(obj runtime.Object, w io.Writer) error {
|
ResourcePrinterFunc(func(obj runtime.Object, w io.Writer) error {
|
||||||
if obj == original {
|
if obj == original {
|
||||||
t.Fatalf("object should not be identical: %#v", obj)
|
t.Fatalf("object should not be identical: %#v", obj)
|
||||||
}
|
}
|
||||||
if obj.(*testStruct).Key != "value" {
|
if obj.(*kubectltesting.TestStruct).Key != "value" {
|
||||||
t.Fatalf("object was not converted: %#v", obj)
|
t.Fatalf("object was not converted: %#v", obj)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -177,14 +167,14 @@ func testPrinter(t *testing.T, printer ResourcePrinter, unmarshalFunc func(data
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
var poutput testStruct
|
var poutput kubectltesting.TestStruct
|
||||||
// Verify that given function runs without error.
|
// Verify that given function runs without error.
|
||||||
err = unmarshalFunc(buf.Bytes(), &poutput)
|
err = unmarshalFunc(buf.Bytes(), &poutput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
// Use real decode function to undo the versioning process.
|
// Use real decode function to undo the versioning process.
|
||||||
poutput = testStruct{}
|
poutput = kubectltesting.TestStruct{}
|
||||||
err = runtime.YAMLDecoder(testapi.Default.Codec()).DecodeInto(buf.Bytes(), &poutput)
|
err = runtime.YAMLDecoder(testapi.Default.Codec()).DecodeInto(buf.Bytes(), &poutput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
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 (
|
||||||
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TestStruct struct {
|
||||||
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
api.ObjectMeta `json:"metadata,omitempty"`
|
||||||
|
Key string `json:"Key"`
|
||||||
|
Map map[string]int `json:"Map"`
|
||||||
|
StringList []string `json:"StringList"`
|
||||||
|
IntList []int `json:"IntList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ts *TestStruct) IsAnAPIObject() {}
|
|
@ -22,17 +22,18 @@ import (
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
storagetesting "k8s.io/kubernetes/pkg/storage/testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestObjectVersioner(t *testing.T) {
|
func TestObjectVersioner(t *testing.T) {
|
||||||
v := APIObjectVersioner{}
|
v := APIObjectVersioner{}
|
||||||
if ver, err := v.ObjectResourceVersion(&TestResource{ObjectMeta: api.ObjectMeta{ResourceVersion: "5"}}); err != nil || ver != 5 {
|
if ver, err := v.ObjectResourceVersion(&storagetesting.TestResource{ObjectMeta: api.ObjectMeta{ResourceVersion: "5"}}); err != nil || ver != 5 {
|
||||||
t.Errorf("unexpected version: %d %v", ver, err)
|
t.Errorf("unexpected version: %d %v", ver, err)
|
||||||
}
|
}
|
||||||
if ver, err := v.ObjectResourceVersion(&TestResource{ObjectMeta: api.ObjectMeta{ResourceVersion: "a"}}); err == nil || ver != 0 {
|
if ver, err := v.ObjectResourceVersion(&storagetesting.TestResource{ObjectMeta: api.ObjectMeta{ResourceVersion: "a"}}); err == nil || ver != 0 {
|
||||||
t.Errorf("unexpected version: %d %v", ver, err)
|
t.Errorf("unexpected version: %d %v", ver, err)
|
||||||
}
|
}
|
||||||
obj := &TestResource{ObjectMeta: api.ObjectMeta{ResourceVersion: "a"}}
|
obj := &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{ResourceVersion: "a"}}
|
||||||
if err := v.UpdateObject(obj, nil, 5); err != nil {
|
if err := v.UpdateObject(obj, nil, 5); err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -40,7 +41,7 @@ func TestObjectVersioner(t *testing.T) {
|
||||||
t.Errorf("unexpected resource version: %#v", obj)
|
t.Errorf("unexpected resource version: %#v", obj)
|
||||||
}
|
}
|
||||||
now := unversioned.Time{Time: time.Now()}
|
now := unversioned.Time{Time: time.Now()}
|
||||||
obj = &TestResource{ObjectMeta: api.ObjectMeta{ResourceVersion: "a"}}
|
obj = &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{ResourceVersion: "a"}}
|
||||||
if err := v.UpdateObject(obj, &now.Time, 5); err != nil {
|
if err := v.UpdateObject(obj, &now.Time, 5); err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,30 +40,23 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/conversion"
|
"k8s.io/kubernetes/pkg/conversion"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/storage"
|
"k8s.io/kubernetes/pkg/storage"
|
||||||
|
storagetesting "k8s.io/kubernetes/pkg/storage/testing"
|
||||||
"k8s.io/kubernetes/pkg/tools"
|
"k8s.io/kubernetes/pkg/tools"
|
||||||
"k8s.io/kubernetes/pkg/tools/etcdtest"
|
"k8s.io/kubernetes/pkg/tools/etcdtest"
|
||||||
)
|
)
|
||||||
|
|
||||||
const validEtcdVersion = "etcd 2.0.9"
|
const validEtcdVersion = "etcd 2.0.9"
|
||||||
|
|
||||||
type TestResource struct {
|
|
||||||
unversioned.TypeMeta `json:",inline"`
|
|
||||||
api.ObjectMeta `json:"metadata"`
|
|
||||||
Value int `json:"value"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*TestResource) IsAnAPIObject() {}
|
|
||||||
|
|
||||||
var scheme *runtime.Scheme
|
var scheme *runtime.Scheme
|
||||||
var codec runtime.Codec
|
var codec runtime.Codec
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
scheme = runtime.NewScheme()
|
scheme = runtime.NewScheme()
|
||||||
scheme.AddKnownTypes("", &TestResource{})
|
scheme.AddKnownTypes("", &storagetesting.TestResource{})
|
||||||
scheme.AddKnownTypes(testapi.Default.Version(), &TestResource{})
|
scheme.AddKnownTypes(testapi.Default.Version(), &storagetesting.TestResource{})
|
||||||
codec = runtime.CodecFor(scheme, testapi.Default.Version())
|
codec = runtime.CodecFor(scheme, testapi.Default.Version())
|
||||||
scheme.AddConversionFuncs(
|
scheme.AddConversionFuncs(
|
||||||
func(in *TestResource, out *TestResource, s conversion.Scope) error {
|
func(in *storagetesting.TestResource, out *storagetesting.TestResource, s conversion.Scope) error {
|
||||||
*out = *in
|
*out = *in
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
@ -568,8 +561,8 @@ func TestGuaranteedUpdate(t *testing.T) {
|
||||||
|
|
||||||
// Create a new node.
|
// Create a new node.
|
||||||
fakeClient.ExpectNotFoundGet(key)
|
fakeClient.ExpectNotFoundGet(key)
|
||||||
obj := &TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 1}
|
obj := &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 1}
|
||||||
err := helper.GuaranteedUpdate(context.TODO(), "/some/key", &TestResource{}, true, storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
err := helper.GuaranteedUpdate(context.TODO(), "/some/key", &storagetesting.TestResource{}, true, storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
||||||
return obj, nil
|
return obj, nil
|
||||||
}))
|
}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -587,11 +580,11 @@ func TestGuaranteedUpdate(t *testing.T) {
|
||||||
|
|
||||||
// Update an existing node.
|
// Update an existing node.
|
||||||
callbackCalled := false
|
callbackCalled := false
|
||||||
objUpdate := &TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 2}
|
objUpdate := &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 2}
|
||||||
err = helper.GuaranteedUpdate(context.TODO(), "/some/key", &TestResource{}, true, storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
err = helper.GuaranteedUpdate(context.TODO(), "/some/key", &storagetesting.TestResource{}, true, storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
||||||
callbackCalled = true
|
callbackCalled = true
|
||||||
|
|
||||||
if in.(*TestResource).Value != 1 {
|
if in.(*storagetesting.TestResource).Value != 1 {
|
||||||
t.Errorf("Callback input was not current set value")
|
t.Errorf("Callback input was not current set value")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -623,8 +616,8 @@ func TestGuaranteedUpdateTTL(t *testing.T) {
|
||||||
|
|
||||||
// Create a new node.
|
// Create a new node.
|
||||||
fakeClient.ExpectNotFoundGet(key)
|
fakeClient.ExpectNotFoundGet(key)
|
||||||
obj := &TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 1}
|
obj := &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 1}
|
||||||
err := helper.GuaranteedUpdate(context.TODO(), "/some/key", &TestResource{}, true, func(in runtime.Object, res storage.ResponseMeta) (runtime.Object, *uint64, error) {
|
err := helper.GuaranteedUpdate(context.TODO(), "/some/key", &storagetesting.TestResource{}, true, func(in runtime.Object, res storage.ResponseMeta) (runtime.Object, *uint64, error) {
|
||||||
if res.TTL != 0 {
|
if res.TTL != 0 {
|
||||||
t.Fatalf("unexpected response meta: %#v", res)
|
t.Fatalf("unexpected response meta: %#v", res)
|
||||||
}
|
}
|
||||||
|
@ -649,14 +642,14 @@ func TestGuaranteedUpdateTTL(t *testing.T) {
|
||||||
|
|
||||||
// Update an existing node.
|
// Update an existing node.
|
||||||
callbackCalled := false
|
callbackCalled := false
|
||||||
objUpdate := &TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 2}
|
objUpdate := &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 2}
|
||||||
err = helper.GuaranteedUpdate(context.TODO(), "/some/key", &TestResource{}, true, func(in runtime.Object, res storage.ResponseMeta) (runtime.Object, *uint64, error) {
|
err = helper.GuaranteedUpdate(context.TODO(), "/some/key", &storagetesting.TestResource{}, true, func(in runtime.Object, res storage.ResponseMeta) (runtime.Object, *uint64, error) {
|
||||||
if res.TTL != 10 {
|
if res.TTL != 10 {
|
||||||
t.Fatalf("unexpected response meta: %#v", res)
|
t.Fatalf("unexpected response meta: %#v", res)
|
||||||
}
|
}
|
||||||
callbackCalled = true
|
callbackCalled = true
|
||||||
|
|
||||||
if in.(*TestResource).Value != 1 {
|
if in.(*storagetesting.TestResource).Value != 1 {
|
||||||
t.Errorf("Callback input was not current set value")
|
t.Errorf("Callback input was not current set value")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -681,14 +674,14 @@ func TestGuaranteedUpdateTTL(t *testing.T) {
|
||||||
|
|
||||||
// Update an existing node and change ttl
|
// Update an existing node and change ttl
|
||||||
callbackCalled = false
|
callbackCalled = false
|
||||||
objUpdate = &TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 3}
|
objUpdate = &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 3}
|
||||||
err = helper.GuaranteedUpdate(context.TODO(), "/some/key", &TestResource{}, true, func(in runtime.Object, res storage.ResponseMeta) (runtime.Object, *uint64, error) {
|
err = helper.GuaranteedUpdate(context.TODO(), "/some/key", &storagetesting.TestResource{}, true, func(in runtime.Object, res storage.ResponseMeta) (runtime.Object, *uint64, error) {
|
||||||
if res.TTL != 10 {
|
if res.TTL != 10 {
|
||||||
t.Fatalf("unexpected response meta: %#v", res)
|
t.Fatalf("unexpected response meta: %#v", res)
|
||||||
}
|
}
|
||||||
callbackCalled = true
|
callbackCalled = true
|
||||||
|
|
||||||
if in.(*TestResource).Value != 2 {
|
if in.(*storagetesting.TestResource).Value != 2 {
|
||||||
t.Errorf("Callback input was not current set value")
|
t.Errorf("Callback input was not current set value")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -724,8 +717,8 @@ func TestGuaranteedUpdateNoChange(t *testing.T) {
|
||||||
|
|
||||||
// Create a new node.
|
// Create a new node.
|
||||||
fakeClient.ExpectNotFoundGet(key)
|
fakeClient.ExpectNotFoundGet(key)
|
||||||
obj := &TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 1}
|
obj := &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 1}
|
||||||
err := helper.GuaranteedUpdate(context.TODO(), "/some/key", &TestResource{}, true, storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
err := helper.GuaranteedUpdate(context.TODO(), "/some/key", &storagetesting.TestResource{}, true, storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
||||||
return obj, nil
|
return obj, nil
|
||||||
}))
|
}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -734,8 +727,8 @@ func TestGuaranteedUpdateNoChange(t *testing.T) {
|
||||||
|
|
||||||
// Update an existing node with the same data
|
// Update an existing node with the same data
|
||||||
callbackCalled := false
|
callbackCalled := false
|
||||||
objUpdate := &TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 1}
|
objUpdate := &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 1}
|
||||||
err = helper.GuaranteedUpdate(context.TODO(), "/some/key", &TestResource{}, true, storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
err = helper.GuaranteedUpdate(context.TODO(), "/some/key", &storagetesting.TestResource{}, true, storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
||||||
fakeClient.Err = errors.New("should not be called")
|
fakeClient.Err = errors.New("should not be called")
|
||||||
callbackCalled = true
|
callbackCalled = true
|
||||||
return objUpdate, nil
|
return objUpdate, nil
|
||||||
|
@ -756,20 +749,20 @@ func TestGuaranteedUpdateKeyNotFound(t *testing.T) {
|
||||||
|
|
||||||
// Create a new node.
|
// Create a new node.
|
||||||
fakeClient.ExpectNotFoundGet(key)
|
fakeClient.ExpectNotFoundGet(key)
|
||||||
obj := &TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 1}
|
obj := &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: 1}
|
||||||
|
|
||||||
f := storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
f := storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
||||||
return obj, nil
|
return obj, nil
|
||||||
})
|
})
|
||||||
|
|
||||||
ignoreNotFound := false
|
ignoreNotFound := false
|
||||||
err := helper.GuaranteedUpdate(context.TODO(), "/some/key", &TestResource{}, ignoreNotFound, f)
|
err := helper.GuaranteedUpdate(context.TODO(), "/some/key", &storagetesting.TestResource{}, ignoreNotFound, f)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Errorf("Expected error for key not found.")
|
t.Errorf("Expected error for key not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
ignoreNotFound = true
|
ignoreNotFound = true
|
||||||
err = helper.GuaranteedUpdate(context.TODO(), "/some/key", &TestResource{}, ignoreNotFound, f)
|
err = helper.GuaranteedUpdate(context.TODO(), "/some/key", &storagetesting.TestResource{}, ignoreNotFound, f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Unexpected error %v.", err)
|
t.Errorf("Unexpected error %v.", err)
|
||||||
}
|
}
|
||||||
|
@ -790,12 +783,12 @@ func TestGuaranteedUpdate_CreateCollision(t *testing.T) {
|
||||||
wgForceCollision.Add(concurrency)
|
wgForceCollision.Add(concurrency)
|
||||||
|
|
||||||
for i := 0; i < concurrency; i++ {
|
for i := 0; i < concurrency; i++ {
|
||||||
// Increment TestResource.Value by 1
|
// Increment storagetesting.TestResource.Value by 1
|
||||||
go func() {
|
go func() {
|
||||||
defer wgDone.Done()
|
defer wgDone.Done()
|
||||||
|
|
||||||
firstCall := true
|
firstCall := true
|
||||||
err := helper.GuaranteedUpdate(context.TODO(), "/some/key", &TestResource{}, true, storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
err := helper.GuaranteedUpdate(context.TODO(), "/some/key", &storagetesting.TestResource{}, true, storage.SimpleUpdate(func(in runtime.Object) (runtime.Object, error) {
|
||||||
defer func() { firstCall = false }()
|
defer func() { firstCall = false }()
|
||||||
|
|
||||||
if firstCall {
|
if firstCall {
|
||||||
|
@ -804,8 +797,8 @@ func TestGuaranteedUpdate_CreateCollision(t *testing.T) {
|
||||||
wgForceCollision.Wait()
|
wgForceCollision.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
currValue := in.(*TestResource).Value
|
currValue := in.(*storagetesting.TestResource).Value
|
||||||
obj := &TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: currValue + 1}
|
obj := &storagetesting.TestResource{ObjectMeta: api.ObjectMeta{Name: "foo"}, Value: currValue + 1}
|
||||||
return obj, nil
|
return obj, nil
|
||||||
}))
|
}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -815,9 +808,9 @@ func TestGuaranteedUpdate_CreateCollision(t *testing.T) {
|
||||||
}
|
}
|
||||||
wgDone.Wait()
|
wgDone.Wait()
|
||||||
|
|
||||||
// Check that stored TestResource has received all updates.
|
// Check that stored storagetesting.TestResource has received all updates.
|
||||||
body := fakeClient.Data[key].R.Node.Value
|
body := fakeClient.Data[key].R.Node.Value
|
||||||
stored := &TestResource{}
|
stored := &storagetesting.TestResource{}
|
||||||
if err := codec.DecodeInto([]byte(body), stored); err != nil {
|
if err := codec.DecodeInto([]byte(body), stored); err != nil {
|
||||||
t.Errorf("Error decoding stored value: %v", body)
|
t.Errorf("Error decoding stored value: %v", body)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
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 (
|
||||||
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TestResource struct {
|
||||||
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
api.ObjectMeta `json:"metadata"`
|
||||||
|
Value int `json:"value"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*TestResource) IsAnAPIObject() {}
|
Loading…
Reference in New Issue