mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 01:40:07 +00:00
Merge pull request #12911 from wojtek-t/refactor_etcd_test_2
Refactoring of list etcd tests.
This commit is contained in:
commit
62199f7cd3
@ -17,6 +17,8 @@ limitations under the License.
|
|||||||
package resttest
|
package resttest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -24,6 +26,9 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/rest"
|
"k8s.io/kubernetes/pkg/api/rest"
|
||||||
|
"k8s.io/kubernetes/pkg/conversion"
|
||||||
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/tools"
|
"k8s.io/kubernetes/pkg/tools"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
@ -91,6 +96,9 @@ func copyOrDie(obj runtime.Object) runtime.Object {
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AssignFunc func(objs []runtime.Object) []runtime.Object
|
||||||
|
type SetRVFunc func(resourceVersion uint64)
|
||||||
|
|
||||||
// Test creating an object.
|
// Test creating an object.
|
||||||
func (t *Tester) TestCreate(valid runtime.Object, invalid ...runtime.Object) {
|
func (t *Tester) TestCreate(valid runtime.Object, invalid ...runtime.Object) {
|
||||||
t.testCreateHasMetadata(copyOrDie(valid))
|
t.testCreateHasMetadata(copyOrDie(valid))
|
||||||
@ -113,6 +121,7 @@ func (t *Tester) TestUpdate(valid runtime.Object, existing, older runtime.Object
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Test deleting an object.
|
// Test deleting an object.
|
||||||
|
// TODO(wojtek-t): Change it to use AssignFunc instead.
|
||||||
func (t *Tester) TestDelete(createFn func() runtime.Object, wasGracefulFn func() bool, invalid ...runtime.Object) {
|
func (t *Tester) TestDelete(createFn func() runtime.Object, wasGracefulFn func() bool, invalid ...runtime.Object) {
|
||||||
t.testDeleteNonExist(createFn)
|
t.testDeleteNonExist(createFn)
|
||||||
t.testDeleteNoGraceful(createFn, wasGracefulFn)
|
t.testDeleteNoGraceful(createFn, wasGracefulFn)
|
||||||
@ -122,6 +131,7 @@ func (t *Tester) TestDelete(createFn func() runtime.Object, wasGracefulFn func()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Test graceful deletion.
|
// Test graceful deletion.
|
||||||
|
// TODO(wojtek-t): Change it to use AssignFunc instead.
|
||||||
func (t *Tester) TestDeleteGraceful(createFn func() runtime.Object, expectedGrace int64, wasGracefulFn func() bool) {
|
func (t *Tester) TestDeleteGraceful(createFn func() runtime.Object, expectedGrace int64, wasGracefulFn func() bool) {
|
||||||
t.testDeleteGracefulHasDefault(createFn(), expectedGrace, wasGracefulFn)
|
t.testDeleteGracefulHasDefault(createFn(), expectedGrace, wasGracefulFn)
|
||||||
t.testDeleteGracefulUsesZeroOnNil(createFn(), 0)
|
t.testDeleteGracefulUsesZeroOnNil(createFn(), 0)
|
||||||
@ -137,6 +147,14 @@ func (t *Tester) TestGet(obj runtime.Object) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test listing object.
|
||||||
|
func (t *Tester) TestList(obj runtime.Object, assignFn AssignFunc, setRVFn SetRVFunc) {
|
||||||
|
t.testListError()
|
||||||
|
t.testListFound(obj, assignFn)
|
||||||
|
t.testListNotFound(assignFn, setRVFn)
|
||||||
|
t.testListMatchLabels(obj, assignFn)
|
||||||
|
}
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// Creation tests.
|
// Creation tests.
|
||||||
|
|
||||||
@ -478,3 +496,128 @@ func (t *Tester) testGetNotFound(obj runtime.Object) {
|
|||||||
t.Errorf("unexpected error returned: %#v", err)
|
t.Errorf("unexpected error returned: %#v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =============================================================================
|
||||||
|
// List tests.
|
||||||
|
|
||||||
|
func listToItems(listObj runtime.Object) ([]runtime.Object, error) {
|
||||||
|
v, err := conversion.EnforcePtr(listObj)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
items := v.FieldByName("Items")
|
||||||
|
if !items.IsValid() {
|
||||||
|
return nil, fmt.Errorf("unexpected Items field in %v", listObj)
|
||||||
|
}
|
||||||
|
if items.Type().Kind() != reflect.Slice {
|
||||||
|
return nil, fmt.Errorf("unexpected Items field type: %v", items.Type().Kind())
|
||||||
|
}
|
||||||
|
result := make([]runtime.Object, items.Len())
|
||||||
|
for i := 0; i < items.Len(); i++ {
|
||||||
|
result[i] = items.Index(i).Addr().Interface().(runtime.Object)
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tester) testListError() {
|
||||||
|
ctx := t.TestContext()
|
||||||
|
|
||||||
|
storageError := fmt.Errorf("test error")
|
||||||
|
t.withStorageError(storageError, func() {
|
||||||
|
_, err := t.storage.(rest.Lister).List(ctx, labels.Everything(), fields.Everything())
|
||||||
|
if err != storageError {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tester) testListFound(obj runtime.Object, assignFn AssignFunc) {
|
||||||
|
ctx := t.TestContext()
|
||||||
|
|
||||||
|
foo1 := copyOrDie(obj)
|
||||||
|
foo1Meta := t.getObjectMetaOrFail(foo1)
|
||||||
|
foo1Meta.Name = "foo1"
|
||||||
|
foo1Meta.Namespace = api.NamespaceValue(ctx)
|
||||||
|
foo2 := copyOrDie(obj)
|
||||||
|
foo2Meta := t.getObjectMetaOrFail(foo2)
|
||||||
|
foo2Meta.Name = "foo2"
|
||||||
|
foo2Meta.Namespace = api.NamespaceValue(ctx)
|
||||||
|
|
||||||
|
existing := assignFn([]runtime.Object{foo1, foo2})
|
||||||
|
|
||||||
|
listObj, err := t.storage.(rest.Lister).List(ctx, labels.Everything(), fields.Everything())
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
items, err := listToItems(listObj)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if len(items) != len(existing) {
|
||||||
|
t.Errorf("unexpected number of items: %v", len(items))
|
||||||
|
}
|
||||||
|
if !api.Semantic.DeepEqual(existing, items) {
|
||||||
|
t.Errorf("expected: %#v, got: %#v", existing, items)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tester) testListMatchLabels(obj runtime.Object, assignFn AssignFunc) {
|
||||||
|
ctx := t.TestContext()
|
||||||
|
testLabels := map[string]string{"key": "value"}
|
||||||
|
|
||||||
|
foo1 := copyOrDie(obj)
|
||||||
|
foo1Meta := t.getObjectMetaOrFail(foo1)
|
||||||
|
foo1Meta.Name = "foo1"
|
||||||
|
foo1Meta.Namespace = api.NamespaceValue(ctx)
|
||||||
|
foo2 := copyOrDie(obj)
|
||||||
|
foo2Meta := t.getObjectMetaOrFail(foo2)
|
||||||
|
foo2Meta.Name = "foo2"
|
||||||
|
foo2Meta.Namespace = api.NamespaceValue(ctx)
|
||||||
|
foo2Meta.Labels = testLabels
|
||||||
|
|
||||||
|
existing := assignFn([]runtime.Object{foo1, foo2})
|
||||||
|
filtered := []runtime.Object{existing[1]}
|
||||||
|
|
||||||
|
selector := labels.SelectorFromSet(labels.Set(testLabels))
|
||||||
|
listObj, err := t.storage.(rest.Lister).List(ctx, selector, fields.Everything())
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
items, err := listToItems(listObj)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if len(items) != len(filtered) {
|
||||||
|
t.Errorf("unexpected number of items: %v", len(items))
|
||||||
|
}
|
||||||
|
if !api.Semantic.DeepEqual(filtered, items) {
|
||||||
|
t.Errorf("expected: %#v, got: %#v", filtered, items)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tester) testListNotFound(assignFn AssignFunc, setRVFn SetRVFunc) {
|
||||||
|
ctx := t.TestContext()
|
||||||
|
|
||||||
|
setRVFn(uint64(123))
|
||||||
|
_ = assignFn([]runtime.Object{})
|
||||||
|
|
||||||
|
listObj, err := t.storage.(rest.Lister).List(ctx, labels.Everything(), fields.Everything())
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
items, err := listToItems(listObj)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if len(items) != 0 {
|
||||||
|
t.Errorf("unexpected items: %v", items)
|
||||||
|
}
|
||||||
|
|
||||||
|
meta, err := api.ListMetaFor(listObj)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if meta.ResourceVersion != "123" {
|
||||||
|
t.Errorf("unexpected resource version: %d", meta.ResourceVersion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -30,6 +30,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
|
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
|
||||||
|
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/storage"
|
"k8s.io/kubernetes/pkg/storage"
|
||||||
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
||||||
@ -101,12 +102,6 @@ func makeControllerKey(ctx api.Context, id string) (string, error) {
|
|||||||
return etcdgeneric.NamespaceKeyFunc(ctx, controllerPrefix, id)
|
return etcdgeneric.NamespaceKeyFunc(ctx, controllerPrefix, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
// makeControllerListKey constructs etcd paths to the root of the resource,
|
|
||||||
// not a specific controller resource
|
|
||||||
func makeControllerListKey(ctx api.Context) string {
|
|
||||||
return etcdgeneric.NamespaceKeyRootFunc(ctx, controllerPrefix)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdCreateController(t *testing.T) {
|
func TestEtcdCreateController(t *testing.T) {
|
||||||
ctx := api.NewDefaultContext()
|
ctx := api.NewDefaultContext()
|
||||||
storage, fakeClient := newStorage(t)
|
storage, fakeClient := newStorage(t)
|
||||||
@ -319,6 +314,21 @@ func TestEtcdGetController(t *testing.T) {
|
|||||||
test.TestGet(©)
|
test.TestGet(©)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEtcdListControllers(t *testing.T) {
|
||||||
|
storage, fakeClient := newStorage(t)
|
||||||
|
test := resttest.New(t, storage, fakeClient.SetError)
|
||||||
|
key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext()))
|
||||||
|
copy := validController
|
||||||
|
test.TestList(
|
||||||
|
©,
|
||||||
|
func(objects []runtime.Object) []runtime.Object {
|
||||||
|
return registrytest.SetObjectsForKey(fakeClient, key, objects)
|
||||||
|
},
|
||||||
|
func(resourceVersion uint64) {
|
||||||
|
registrytest.SetResourceVersion(fakeClient, resourceVersion)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestEtcdUpdateController(t *testing.T) {
|
func TestEtcdUpdateController(t *testing.T) {
|
||||||
ctx := api.NewDefaultContext()
|
ctx := api.NewDefaultContext()
|
||||||
storage, fakeClient := newStorage(t)
|
storage, fakeClient := newStorage(t)
|
||||||
@ -368,96 +378,6 @@ func TestEtcdDeleteController(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEtcdListControllers(t *testing.T) {
|
|
||||||
storage, fakeClient := newStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := makeControllerListKey(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
controller := validController
|
|
||||||
controller.Name = "bar"
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &validController),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &controller),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
objList, err := storage.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
controllers, _ := objList.(*api.ReplicationControllerList)
|
|
||||||
if len(controllers.Items) != 2 || controllers.Items[0].Name != validController.Name || controllers.Items[1].Name != controller.Name {
|
|
||||||
t.Errorf("Unexpected controller list: %#v", controllers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdListControllersNotFound(t *testing.T) {
|
|
||||||
storage, fakeClient := newStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := makeControllerListKey(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{},
|
|
||||||
E: tools.EtcdErrorNotFound,
|
|
||||||
}
|
|
||||||
objList, err := storage.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
controllers, _ := objList.(*api.ReplicationControllerList)
|
|
||||||
if len(controllers.Items) != 0 {
|
|
||||||
t.Errorf("Unexpected controller list: %#v", controllers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdListControllersLabelsMatch(t *testing.T) {
|
|
||||||
storage, fakeClient := newStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := makeControllerListKey(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
|
|
||||||
controller := validController
|
|
||||||
controller.Labels = map[string]string{"k": "v"}
|
|
||||||
controller.Name = "bar"
|
|
||||||
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &validController),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &controller),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
testLabels := labels.SelectorFromSet(labels.Set(controller.Labels))
|
|
||||||
objList, err := storage.List(ctx, testLabels, fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
controllers, _ := objList.(*api.ReplicationControllerList)
|
|
||||||
if len(controllers.Items) != 1 || controllers.Items[0].Name != controller.Name ||
|
|
||||||
!testLabels.Matches(labels.Set(controllers.Items[0].Labels)) {
|
|
||||||
t.Errorf("Unexpected controller list: %#v for query with labels %#v",
|
|
||||||
controllers, testLabels)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdWatchController(t *testing.T) {
|
func TestEtcdWatchController(t *testing.T) {
|
||||||
ctx := api.NewDefaultContext()
|
ctx := api.NewDefaultContext()
|
||||||
storage, fakeClient := newStorage(t)
|
storage, fakeClient := newStorage(t)
|
||||||
|
@ -22,8 +22,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/latest"
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/storage"
|
"k8s.io/kubernetes/pkg/storage"
|
||||||
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
||||||
@ -113,46 +112,6 @@ func TestDelete(t *testing.T) {
|
|||||||
test.TestDelete(createFn, gracefulSetFn)
|
test.TestDelete(createFn, gracefulSetFn)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEtcdListEndpoints(t *testing.T) {
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
storage, fakeClient := newStorage(t)
|
|
||||||
key := storage.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Endpoints{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
Subsets: []api.EndpointSubset{{
|
|
||||||
Addresses: []api.EndpointAddress{{IP: "127.0.0.1"}},
|
|
||||||
Ports: []api.EndpointPort{{Port: 8345, Protocol: "TCP"}},
|
|
||||||
}},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Endpoints{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
|
|
||||||
endpointsObj, err := storage.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
endpoints := endpointsObj.(*api.EndpointsList)
|
|
||||||
|
|
||||||
if len(endpoints.Items) != 2 || endpoints.Items[0].Name != "foo" || endpoints.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected endpoints list: %#v", endpoints)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdGetEndpoints(t *testing.T) {
|
func TestEtcdGetEndpoints(t *testing.T) {
|
||||||
storage, fakeClient := newStorage(t)
|
storage, fakeClient := newStorage(t)
|
||||||
test := resttest.New(t, storage, fakeClient.SetError)
|
test := resttest.New(t, storage, fakeClient.SetError)
|
||||||
@ -160,70 +119,19 @@ func TestEtcdGetEndpoints(t *testing.T) {
|
|||||||
test.TestGet(endpoints)
|
test.TestGet(endpoints)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListEmptyEndpointsList(t *testing.T) {
|
func TestEtcdListEndpoints(t *testing.T) {
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
storage, fakeClient := newStorage(t)
|
storage, fakeClient := newStorage(t)
|
||||||
fakeClient.ChangeIndex = 1
|
test := resttest.New(t, storage, fakeClient.SetError)
|
||||||
key := storage.KeyRootFunc(ctx)
|
endpoints := validNewEndpoints()
|
||||||
key = etcdtest.AddPrefix(key)
|
key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext()))
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
test.TestList(
|
||||||
R: &etcd.Response{},
|
endpoints,
|
||||||
E: fakeClient.NewError(tools.EtcdErrorCodeNotFound),
|
func(objects []runtime.Object) []runtime.Object {
|
||||||
}
|
return registrytest.SetObjectsForKey(fakeClient, key, objects)
|
||||||
|
|
||||||
endpoints, err := storage.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(endpoints.(*api.EndpointsList).Items) != 0 {
|
|
||||||
t.Errorf("Unexpected non-zero pod list: %#v", endpoints)
|
|
||||||
}
|
|
||||||
if endpoints.(*api.EndpointsList).ResourceVersion != "1" {
|
|
||||||
t.Errorf("Unexpected resource version: %#v", endpoints)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListEndpointsList(t *testing.T) {
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
storage, fakeClient := newStorage(t)
|
|
||||||
fakeClient.ChangeIndex = 1
|
|
||||||
key := storage.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Endpoints{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
{
|
func(resourceVersion uint64) {
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Endpoints{
|
registrytest.SetResourceVersion(fakeClient, resourceVersion)
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
})
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
endpointsObj, err := storage.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
endpoints := endpointsObj.(*api.EndpointsList)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(endpoints.Items) != 2 {
|
|
||||||
t.Errorf("Unexpected endpoints list: %#v", endpoints)
|
|
||||||
}
|
|
||||||
if endpoints.Items[0].Name != "foo" {
|
|
||||||
t.Errorf("Unexpected endpoints: %#v", endpoints.Items[0])
|
|
||||||
}
|
|
||||||
if endpoints.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected endpoints: %#v", endpoints.Items[1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEndpointsDecode(t *testing.T) {
|
func TestEndpointsDecode(t *testing.T) {
|
||||||
|
@ -25,8 +25,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/expapi"
|
"k8s.io/kubernetes/pkg/expapi"
|
||||||
"k8s.io/kubernetes/pkg/expapi/v1"
|
"k8s.io/kubernetes/pkg/expapi/v1"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/storage"
|
"k8s.io/kubernetes/pkg/storage"
|
||||||
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
||||||
@ -143,68 +142,17 @@ func TestGet(t *testing.T) {
|
|||||||
test.TestGet(autoscaler)
|
test.TestGet(autoscaler)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEmptyList(t *testing.T) {
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
registry, fakeClient, _ := newStorage(t)
|
|
||||||
fakeClient.ChangeIndex = 1
|
|
||||||
key := registry.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{},
|
|
||||||
E: fakeClient.NewError(tools.EtcdErrorCodeNotFound),
|
|
||||||
}
|
|
||||||
autoscalerList, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
if len(autoscalerList.(*expapi.HorizontalPodAutoscalerList).Items) != 0 {
|
|
||||||
t.Errorf("Unexpected non-zero autoscaler list: %#v", autoscalerList)
|
|
||||||
}
|
|
||||||
if autoscalerList.(*expapi.HorizontalPodAutoscalerList).ResourceVersion != "1" {
|
|
||||||
t.Errorf("Unexpected resource version: %#v", autoscalerList)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestList(t *testing.T) {
|
func TestList(t *testing.T) {
|
||||||
ctx := api.NewDefaultContext()
|
storage, fakeEtcdClient, _ := newStorage(t)
|
||||||
registry, fakeClient, _ := newStorage(t)
|
test := resttest.New(t, storage, fakeEtcdClient.SetError)
|
||||||
fakeClient.ChangeIndex = 1
|
key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext()))
|
||||||
key := registry.KeyRootFunc(ctx)
|
autoscaler := validNewHorizontalPodAutoscaler("foo")
|
||||||
key = etcdtest.AddPrefix(key)
|
test.TestList(
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
autoscaler,
|
||||||
R: &etcd.Response{
|
func(objects []runtime.Object) []runtime.Object {
|
||||||
Node: &etcd.Node{
|
return registrytest.SetObjectsForKey(fakeEtcdClient, key, objects)
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(testapi.Codec(), &expapi.HorizontalPodAutoscaler{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(testapi.Codec(), &expapi.HorizontalPodAutoscaler{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
func(resourceVersion uint64) {
|
||||||
obj, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
registrytest.SetResourceVersion(fakeEtcdClient, resourceVersion)
|
||||||
if err != nil {
|
})
|
||||||
t.Fatalf("Unexpected error %v", err)
|
|
||||||
}
|
|
||||||
autoscalerList := obj.(*expapi.HorizontalPodAutoscalerList)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(autoscalerList.Items) != 2 {
|
|
||||||
t.Errorf("Unexpected HorizontalPodAutoscaler list: %#v", autoscalerList)
|
|
||||||
}
|
|
||||||
if autoscalerList.Items[0].Name != "foo" {
|
|
||||||
t.Errorf("Unexpected HorizontalPodAutoscaler: %#v", autoscalerList.Items[0])
|
|
||||||
}
|
|
||||||
if autoscalerList.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected HorizontalPodAutoscaler: %#v", autoscalerList.Items[1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
|
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/storage"
|
"k8s.io/kubernetes/pkg/storage"
|
||||||
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
||||||
@ -130,85 +131,6 @@ func TestDelete(t *testing.T) {
|
|||||||
test.TestDelete(createFn, gracefulSetFn)
|
test.TestDelete(createFn, gracefulSetFn)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEtcdListNodes(t *testing.T) {
|
|
||||||
ctx := api.NewContext()
|
|
||||||
storage, fakeClient := newStorage(t)
|
|
||||||
key := storage.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Node{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Node{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
nodesObj, err := storage.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
nodes := nodesObj.(*api.NodeList)
|
|
||||||
if len(nodes.Items) != 2 || nodes.Items[0].Name != "foo" || nodes.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected nodes list: %#v", nodes)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdListNodesMatch(t *testing.T) {
|
|
||||||
ctx := api.NewContext()
|
|
||||||
storage, fakeClient := newStorage(t)
|
|
||||||
key := storage.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Node{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo",
|
|
||||||
Labels: map[string]string{
|
|
||||||
"name": "foo",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Node{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar",
|
|
||||||
Labels: map[string]string{
|
|
||||||
"name": "bar",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
label := labels.SelectorFromSet(labels.Set{"name": "bar"})
|
|
||||||
nodesObj, err := storage.List(ctx, label, fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
nodes := nodesObj.(*api.NodeList)
|
|
||||||
if len(nodes.Items) != 1 || nodes.Items[0].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected nodes list: %#v", nodes)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdGetNode(t *testing.T) {
|
func TestEtcdGetNode(t *testing.T) {
|
||||||
storage, fakeClient := newStorage(t)
|
storage, fakeClient := newStorage(t)
|
||||||
test := resttest.New(t, storage, fakeClient.SetError).ClusterScope()
|
test := resttest.New(t, storage, fakeClient.SetError).ClusterScope()
|
||||||
@ -216,6 +138,21 @@ func TestEtcdGetNode(t *testing.T) {
|
|||||||
test.TestGet(node)
|
test.TestGet(node)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEtcdListNodes(t *testing.T) {
|
||||||
|
storage, fakeClient := newStorage(t)
|
||||||
|
test := resttest.New(t, storage, fakeClient.SetError).ClusterScope()
|
||||||
|
key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext()))
|
||||||
|
node := validNewNode()
|
||||||
|
test.TestList(
|
||||||
|
node,
|
||||||
|
func(objects []runtime.Object) []runtime.Object {
|
||||||
|
return registrytest.SetObjectsForKey(fakeClient, key, objects)
|
||||||
|
},
|
||||||
|
func(resourceVersion uint64) {
|
||||||
|
registrytest.SetResourceVersion(fakeClient, resourceVersion)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestEtcdUpdateEndpoints(t *testing.T) {
|
func TestEtcdUpdateEndpoints(t *testing.T) {
|
||||||
ctx := api.NewContext()
|
ctx := api.NewContext()
|
||||||
storage, fakeClient := newStorage(t)
|
storage, fakeClient := newStorage(t)
|
||||||
|
@ -22,9 +22,8 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/latest"
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
|
||||||
"k8s.io/kubernetes/pkg/registry/namespace"
|
"k8s.io/kubernetes/pkg/registry/namespace"
|
||||||
|
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/storage"
|
"k8s.io/kubernetes/pkg/storage"
|
||||||
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
||||||
@ -124,144 +123,6 @@ func TestCreateSetsFields(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListEmptyNamespaceList(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
fakeEtcdClient.ChangeIndex = 1
|
|
||||||
key := etcdtest.AddPrefix("/namespaces")
|
|
||||||
fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{},
|
|
||||||
E: fakeEtcdClient.NewError(tools.EtcdErrorCodeNotFound),
|
|
||||||
}
|
|
||||||
|
|
||||||
storage, _, _ := NewStorage(etcdStorage)
|
|
||||||
namespaces, err := storage.List(api.NewContext(), labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("Unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
if len(namespaces.(*api.NamespaceList).Items) != 0 {
|
|
||||||
t.Errorf("Unexpected non-zero namespace list: %#v", namespaces)
|
|
||||||
}
|
|
||||||
if namespaces.(*api.NamespaceList).ResourceVersion != "1" {
|
|
||||||
t.Errorf("Unexpected resource version: %#v", namespaces)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListNamespaceList(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
key := etcdtest.AddPrefix("/namespaces")
|
|
||||||
fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Namespace{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Namespace{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
storage, _, _ := NewStorage(etcdStorage)
|
|
||||||
namespacesObj, err := storage.List(api.NewContext(), labels.Everything(), fields.Everything())
|
|
||||||
namespaces := namespacesObj.(*api.NamespaceList)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(namespaces.Items) != 2 {
|
|
||||||
t.Errorf("Unexpected namespaces list: %#v", namespaces)
|
|
||||||
}
|
|
||||||
if namespaces.Items[0].Name != "foo" || namespaces.Items[0].Status.Phase != api.NamespaceActive {
|
|
||||||
t.Errorf("Unexpected namespace: %#v", namespaces.Items[0])
|
|
||||||
}
|
|
||||||
if namespaces.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected namespace: %#v", namespaces.Items[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListNamespaceListSelection(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
key := etcdtest.AddPrefix("/namespaces")
|
|
||||||
fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.Namespace{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
})},
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.Namespace{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
|
||||||
})},
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.Namespace{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "baz"},
|
|
||||||
Status: api.NamespaceStatus{Phase: api.NamespaceTerminating},
|
|
||||||
})},
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.Namespace{
|
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
Name: "qux",
|
|
||||||
Labels: map[string]string{"label": "qux"},
|
|
||||||
},
|
|
||||||
})},
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.Namespace{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "zot"},
|
|
||||||
})},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
storage, _, _ := NewStorage(etcdStorage)
|
|
||||||
ctx := api.NewContext()
|
|
||||||
table := []struct {
|
|
||||||
label, field string
|
|
||||||
expectedIDs util.StringSet
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
expectedIDs: util.NewStringSet("foo", "bar", "baz", "qux", "zot"),
|
|
||||||
}, {
|
|
||||||
field: "name=zot",
|
|
||||||
expectedIDs: util.NewStringSet("zot"),
|
|
||||||
}, {
|
|
||||||
label: "label=qux",
|
|
||||||
expectedIDs: util.NewStringSet("qux"),
|
|
||||||
}, {
|
|
||||||
field: "status.phase=Terminating",
|
|
||||||
expectedIDs: util.NewStringSet("baz"),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for index, item := range table {
|
|
||||||
label, err := labels.Parse(item.label)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
field, err := fields.ParseSelector(item.field)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
namespacesObj, err := storage.List(ctx, label, field)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
namespaces := namespacesObj.(*api.NamespaceList)
|
|
||||||
|
|
||||||
set := util.NewStringSet()
|
|
||||||
for i := range namespaces.Items {
|
|
||||||
set.Insert(namespaces.Items[i].Name)
|
|
||||||
}
|
|
||||||
if e, a := len(item.expectedIDs), len(set); e != a {
|
|
||||||
t.Errorf("%v: Expected %v, got %v", index, item.expectedIDs, set)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNamespaceDecode(t *testing.T) {
|
func TestNamespaceDecode(t *testing.T) {
|
||||||
_, etcdStorage := newEtcdStorage(t)
|
_, etcdStorage := newEtcdStorage(t)
|
||||||
storage, _, _ := NewStorage(etcdStorage)
|
storage, _, _ := NewStorage(etcdStorage)
|
||||||
@ -290,6 +151,21 @@ func TestGet(t *testing.T) {
|
|||||||
test.TestGet(namespace)
|
test.TestGet(namespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestList(t *testing.T) {
|
||||||
|
storage, fakeEtcdClient, _ := newStorage(t)
|
||||||
|
test := resttest.New(t, storage, fakeEtcdClient.SetError).ClusterScope()
|
||||||
|
key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext()))
|
||||||
|
namespace := validNewNamespace()
|
||||||
|
test.TestList(
|
||||||
|
namespace,
|
||||||
|
func(objects []runtime.Object) []runtime.Object {
|
||||||
|
return registrytest.SetObjectsForKey(fakeEtcdClient, key, objects)
|
||||||
|
},
|
||||||
|
func(resourceVersion uint64) {
|
||||||
|
registrytest.SetResourceVersion(fakeEtcdClient, resourceVersion)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestDeleteNamespace(t *testing.T) {
|
func TestDeleteNamespace(t *testing.T) {
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
||||||
fakeEtcdClient.ChangeIndex = 1
|
fakeEtcdClient.ChangeIndex = 1
|
||||||
|
@ -23,8 +23,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/latest"
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/storage"
|
"k8s.io/kubernetes/pkg/storage"
|
||||||
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
||||||
@ -116,38 +115,6 @@ func TestDelete(t *testing.T) {
|
|||||||
test.TestDelete(createFn, gracefulSetFn)
|
test.TestDelete(createFn, gracefulSetFn)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEtcdListPersistentVolumes(t *testing.T) {
|
|
||||||
ctx := api.NewContext()
|
|
||||||
storage, _, fakeClient, _ := newStorage(t)
|
|
||||||
key := storage.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, validNewPersistentVolume("foo")),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, validNewPersistentVolume("bar")),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
|
|
||||||
pvObj, err := storage.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
pvs := pvObj.(*api.PersistentVolumeList)
|
|
||||||
|
|
||||||
if len(pvs.Items) != 2 || pvs.Items[0].Name != "foo" || pvs.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected persistentVolume list: %#v", pvs)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdGetPersistentVolumes(t *testing.T) {
|
func TestEtcdGetPersistentVolumes(t *testing.T) {
|
||||||
storage, _, fakeClient, _ := newStorage(t)
|
storage, _, fakeClient, _ := newStorage(t)
|
||||||
test := resttest.New(t, storage, fakeClient.SetError).ClusterScope()
|
test := resttest.New(t, storage, fakeClient.SetError).ClusterScope()
|
||||||
@ -155,70 +122,19 @@ func TestEtcdGetPersistentVolumes(t *testing.T) {
|
|||||||
test.TestGet(persistentVolume)
|
test.TestGet(persistentVolume)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListEmptyPersistentVolumesList(t *testing.T) {
|
func TestEtcdListPersistentVolumes(t *testing.T) {
|
||||||
ctx := api.NewContext()
|
|
||||||
storage, _, fakeClient, _ := newStorage(t)
|
storage, _, fakeClient, _ := newStorage(t)
|
||||||
fakeClient.ChangeIndex = 1
|
test := resttest.New(t, storage, fakeClient.SetError).ClusterScope()
|
||||||
key := storage.KeyRootFunc(ctx)
|
key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext()))
|
||||||
key = etcdtest.AddPrefix(key)
|
persistentVolume := validNewPersistentVolume("foo")
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
test.TestList(
|
||||||
R: &etcd.Response{},
|
persistentVolume,
|
||||||
E: fakeClient.NewError(tools.EtcdErrorCodeNotFound),
|
func(objects []runtime.Object) []runtime.Object {
|
||||||
}
|
return registrytest.SetObjectsForKey(fakeClient, key, objects)
|
||||||
|
|
||||||
persistentVolume, err := storage.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(persistentVolume.(*api.PersistentVolumeList).Items) != 0 {
|
|
||||||
t.Errorf("Unexpected non-zero pod list: %#v", persistentVolume)
|
|
||||||
}
|
|
||||||
if persistentVolume.(*api.PersistentVolumeList).ResourceVersion != "1" {
|
|
||||||
t.Errorf("Unexpected resource version: %#v", persistentVolume)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListPersistentVolumesList(t *testing.T) {
|
|
||||||
ctx := api.NewContext()
|
|
||||||
storage, _, fakeClient, _ := newStorage(t)
|
|
||||||
fakeClient.ChangeIndex = 1
|
|
||||||
key := storage.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.PersistentVolume{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
{
|
func(resourceVersion uint64) {
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.PersistentVolume{
|
registrytest.SetResourceVersion(fakeClient, resourceVersion)
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
})
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
persistentVolumeObj, err := storage.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
persistentVolumeList := persistentVolumeObj.(*api.PersistentVolumeList)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(persistentVolumeList.Items) != 2 {
|
|
||||||
t.Errorf("Unexpected persistentVolume list: %#v", persistentVolumeList)
|
|
||||||
}
|
|
||||||
if persistentVolumeList.Items[0].Name != "foo" {
|
|
||||||
t.Errorf("Unexpected persistentVolume: %#v", persistentVolumeList.Items[0])
|
|
||||||
}
|
|
||||||
if persistentVolumeList.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected persistentVolume: %#v", persistentVolumeList.Items[1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPersistentVolumesDecode(t *testing.T) {
|
func TestPersistentVolumesDecode(t *testing.T) {
|
||||||
|
@ -23,8 +23,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/latest"
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/storage"
|
"k8s.io/kubernetes/pkg/storage"
|
||||||
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
||||||
@ -114,38 +113,6 @@ func TestDelete(t *testing.T) {
|
|||||||
test.TestDelete(createFn, gracefulSetFn)
|
test.TestDelete(createFn, gracefulSetFn)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEtcdListPersistentVolumeClaims(t *testing.T) {
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
registry, _, fakeClient, _ := newStorage(t)
|
|
||||||
key := registry.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, validNewPersistentVolumeClaim("foo", api.NamespaceDefault)),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, validNewPersistentVolumeClaim("bar", api.NamespaceDefault)),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
|
|
||||||
pvObj, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
pvs := pvObj.(*api.PersistentVolumeClaimList)
|
|
||||||
|
|
||||||
if len(pvs.Items) != 2 || pvs.Items[0].Name != "foo" || pvs.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected persistentVolume list: %#v", pvs)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdGetPersistentVolumeClaims(t *testing.T) {
|
func TestEtcdGetPersistentVolumeClaims(t *testing.T) {
|
||||||
storage, _, fakeClient, _ := newStorage(t)
|
storage, _, fakeClient, _ := newStorage(t)
|
||||||
test := resttest.New(t, storage, fakeClient.SetError)
|
test := resttest.New(t, storage, fakeClient.SetError)
|
||||||
@ -153,70 +120,19 @@ func TestEtcdGetPersistentVolumeClaims(t *testing.T) {
|
|||||||
test.TestGet(claim)
|
test.TestGet(claim)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListEmptyPersistentVolumeClaimsList(t *testing.T) {
|
func TestEtcdListPersistentVolumeClaims(t *testing.T) {
|
||||||
ctx := api.NewDefaultContext()
|
storage, _, fakeClient, _ := newStorage(t)
|
||||||
registry, _, fakeClient, _ := newStorage(t)
|
test := resttest.New(t, storage, fakeClient.SetError)
|
||||||
fakeClient.ChangeIndex = 1
|
key := etcdtest.AddPrefix(storage.KeyRootFunc(test.TestContext()))
|
||||||
key := registry.KeyRootFunc(ctx)
|
claim := validNewPersistentVolumeClaim("foo", api.NamespaceDefault)
|
||||||
key = etcdtest.AddPrefix(key)
|
test.TestList(
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
claim,
|
||||||
R: &etcd.Response{},
|
func(objects []runtime.Object) []runtime.Object {
|
||||||
E: fakeClient.NewError(tools.EtcdErrorCodeNotFound),
|
return registrytest.SetObjectsForKey(fakeClient, key, objects)
|
||||||
}
|
|
||||||
|
|
||||||
persistentVolume, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(persistentVolume.(*api.PersistentVolumeClaimList).Items) != 0 {
|
|
||||||
t.Errorf("Unexpected non-zero pod list: %#v", persistentVolume)
|
|
||||||
}
|
|
||||||
if persistentVolume.(*api.PersistentVolumeClaimList).ResourceVersion != "1" {
|
|
||||||
t.Errorf("Unexpected resource version: %#v", persistentVolume)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListPersistentVolumeClaimsList(t *testing.T) {
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
registry, _, fakeClient, _ := newStorage(t)
|
|
||||||
fakeClient.ChangeIndex = 1
|
|
||||||
key := registry.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.PersistentVolumeClaim{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
{
|
func(resourceVersion uint64) {
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.PersistentVolumeClaim{
|
registrytest.SetResourceVersion(fakeClient, resourceVersion)
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
})
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
persistentVolumeObj, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
persistentVolumeList := persistentVolumeObj.(*api.PersistentVolumeClaimList)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(persistentVolumeList.Items) != 2 {
|
|
||||||
t.Errorf("Unexpected persistentVolume list: %#v", persistentVolumeList)
|
|
||||||
}
|
|
||||||
if persistentVolumeList.Items[0].Name != "foo" {
|
|
||||||
t.Errorf("Unexpected persistentVolume: %#v", persistentVolumeList.Items[0])
|
|
||||||
}
|
|
||||||
if persistentVolumeList.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected persistentVolume: %#v", persistentVolumeList.Items[1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPersistentVolumeClaimsDecode(t *testing.T) {
|
func TestPersistentVolumeClaimsDecode(t *testing.T) {
|
||||||
|
@ -31,6 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/registry/pod"
|
"k8s.io/kubernetes/pkg/registry/pod"
|
||||||
|
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/securitycontext"
|
"k8s.io/kubernetes/pkg/securitycontext"
|
||||||
"k8s.io/kubernetes/pkg/storage"
|
"k8s.io/kubernetes/pkg/storage"
|
||||||
@ -182,193 +183,6 @@ func TestCreateSetsFields(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListError(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
fakeEtcdClient.Err = fmt.Errorf("test error")
|
|
||||||
storage := NewStorage(etcdStorage, nil).Pod
|
|
||||||
pods, err := storage.List(api.NewDefaultContext(), labels.Everything(), fields.Everything())
|
|
||||||
if err != fakeEtcdClient.Err {
|
|
||||||
t.Fatalf("Expected %#v, Got %#v", fakeEtcdClient.Err, err)
|
|
||||||
}
|
|
||||||
if pods != nil {
|
|
||||||
t.Errorf("Unexpected non-nil pod list: %#v", pods)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListEmptyPodList(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
fakeEtcdClient.ChangeIndex = 1
|
|
||||||
ctx := api.NewContext()
|
|
||||||
storage := NewStorage(etcdStorage, nil).Pod
|
|
||||||
key := storage.Etcd.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
|
|
||||||
fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{},
|
|
||||||
E: fakeEtcdClient.NewError(tools.EtcdErrorCodeNotFound),
|
|
||||||
}
|
|
||||||
pods, err := storage.List(api.NewContext(), labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(pods.(*api.PodList).Items) != 0 {
|
|
||||||
t.Errorf("Unexpected non-zero pod list: %#v", pods)
|
|
||||||
}
|
|
||||||
if pods.(*api.PodList).ResourceVersion != "1" {
|
|
||||||
t.Errorf("Unexpected resource version: %#v", pods)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListPodList(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
storage := NewStorage(etcdStorage, nil).Pod
|
|
||||||
key := storage.Etcd.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Pod{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
Spec: api.PodSpec{NodeName: "machine"},
|
|
||||||
Status: api.PodStatus{Phase: api.PodRunning},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Pod{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
|
||||||
Spec: api.PodSpec{NodeName: "machine"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
podsObj, err := storage.List(api.NewDefaultContext(), labels.Everything(), fields.Everything())
|
|
||||||
pods := podsObj.(*api.PodList)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(pods.Items) != 2 {
|
|
||||||
t.Errorf("Unexpected pod list: %#v", pods)
|
|
||||||
}
|
|
||||||
if pods.Items[0].Name != "foo" || pods.Items[0].Status.Phase != api.PodRunning || pods.Items[0].Spec.NodeName != "machine" {
|
|
||||||
t.Errorf("Unexpected pod: %#v", pods.Items[0])
|
|
||||||
}
|
|
||||||
if pods.Items[1].Name != "bar" || pods.Items[1].Spec.NodeName != "machine" {
|
|
||||||
t.Errorf("Unexpected pod: %#v", pods.Items[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListPodListSelection(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
storage := NewStorage(etcdStorage, nil).Pod
|
|
||||||
rootKey := etcdtest.AddPrefix("pods/default")
|
|
||||||
key := etcdtest.AddPrefix("pods/default/zot")
|
|
||||||
fakeEtcdClient.Data[rootKey] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.Pod{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
})},
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.Pod{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
|
||||||
Spec: api.PodSpec{NodeName: "barhost"},
|
|
||||||
})},
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.Pod{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "baz"},
|
|
||||||
Status: api.PodStatus{Phase: api.PodFailed},
|
|
||||||
})},
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.Pod{
|
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
Name: "qux",
|
|
||||||
Labels: map[string]string{"label": "qux"},
|
|
||||||
},
|
|
||||||
})},
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.Pod{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "zot"},
|
|
||||||
})},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Pod{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "zot"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
table := []struct {
|
|
||||||
label, field string
|
|
||||||
expectedIDs util.StringSet
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
expectedIDs: util.NewStringSet("foo", "bar", "baz", "qux", "zot"),
|
|
||||||
}, {
|
|
||||||
field: "metadata.name=zot",
|
|
||||||
expectedIDs: util.NewStringSet("zot"),
|
|
||||||
}, {
|
|
||||||
label: "label=qux",
|
|
||||||
expectedIDs: util.NewStringSet("qux"),
|
|
||||||
}, {
|
|
||||||
field: "status.phase=Failed",
|
|
||||||
expectedIDs: util.NewStringSet("baz"),
|
|
||||||
}, {
|
|
||||||
field: "spec.nodeName=barhost",
|
|
||||||
expectedIDs: util.NewStringSet("bar"),
|
|
||||||
}, {
|
|
||||||
field: "spec.nodeName=",
|
|
||||||
expectedIDs: util.NewStringSet("foo", "baz", "qux", "zot"),
|
|
||||||
}, {
|
|
||||||
field: "spec.nodeName!=",
|
|
||||||
expectedIDs: util.NewStringSet("bar"),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for index, item := range table {
|
|
||||||
label, err := labels.Parse(item.label)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
field, err := fields.ParseSelector(item.field)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
podsObj, err := storage.List(ctx, label, field)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
pods := podsObj.(*api.PodList)
|
|
||||||
|
|
||||||
set := util.NewStringSet()
|
|
||||||
for i := range pods.Items {
|
|
||||||
set.Insert(pods.Items[i].Name)
|
|
||||||
}
|
|
||||||
if e, a := len(item.expectedIDs), len(set); e != a {
|
|
||||||
t.Errorf("%v: Expected %v, got %v", index, item.expectedIDs, set)
|
|
||||||
}
|
|
||||||
/*for _, pod := range pods.Items {
|
|
||||||
if !item.expectedIDs.Has(pod.Name) {
|
|
||||||
t.Errorf("%v: Unexpected pod %v", index, pod.Name)
|
|
||||||
}
|
|
||||||
t.Logf("%v: Got pod Name: %v", index, pod.Name)
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPodDecode(t *testing.T) {
|
func TestPodDecode(t *testing.T) {
|
||||||
_, etcdStorage := newEtcdStorage(t)
|
_, etcdStorage := newEtcdStorage(t)
|
||||||
storage := NewStorage(etcdStorage, nil).Pod
|
storage := NewStorage(etcdStorage, nil).Pod
|
||||||
@ -642,6 +456,22 @@ func TestEtcdGet(t *testing.T) {
|
|||||||
test.TestGet(pod)
|
test.TestGet(pod)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEtcdList(t *testing.T) {
|
||||||
|
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
||||||
|
storage := NewStorage(etcdStorage, nil).Pod
|
||||||
|
test := resttest.New(t, storage, fakeEtcdClient.SetError)
|
||||||
|
key := etcdtest.AddPrefix(storage.Etcd.KeyRootFunc(test.TestContext()))
|
||||||
|
pod := validNewPod()
|
||||||
|
test.TestList(
|
||||||
|
pod,
|
||||||
|
func(objects []runtime.Object) []runtime.Object {
|
||||||
|
return registrytest.SetObjectsForKey(fakeEtcdClient, key, objects)
|
||||||
|
},
|
||||||
|
func(resourceVersion uint64) {
|
||||||
|
registrytest.SetResourceVersion(fakeEtcdClient, resourceVersion)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestEtcdCreate(t *testing.T) {
|
func TestEtcdCreate(t *testing.T) {
|
||||||
registry, bindingRegistry, _, fakeClient, _ := newStorage(t)
|
registry, bindingRegistry, _, fakeClient, _ := newStorage(t)
|
||||||
ctx := api.NewDefaultContext()
|
ctx := api.NewDefaultContext()
|
||||||
@ -1184,90 +1014,6 @@ func TestEtcdDeletePodMultipleContainers(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEtcdEmptyList(t *testing.T) {
|
|
||||||
registry, _, _, fakeClient, _ := newStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := registry.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
|
|
||||||
obj, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
pods := obj.(*api.PodList)
|
|
||||||
if len(pods.Items) != 0 {
|
|
||||||
t.Errorf("Unexpected pod list: %#v", pods)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdListNotFound(t *testing.T) {
|
|
||||||
registry, _, _, fakeClient, _ := newStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := registry.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{},
|
|
||||||
E: tools.EtcdErrorNotFound,
|
|
||||||
}
|
|
||||||
obj, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
pods := obj.(*api.PodList)
|
|
||||||
if len(pods.Items) != 0 {
|
|
||||||
t.Errorf("Unexpected pod list: %#v", pods)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdList(t *testing.T) {
|
|
||||||
registry, _, _, fakeClient, _ := newStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := registry.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Pod{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
Spec: api.PodSpec{NodeName: "machine"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.Pod{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
|
||||||
Spec: api.PodSpec{NodeName: "machine"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
obj, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
pods := obj.(*api.PodList)
|
|
||||||
|
|
||||||
if len(pods.Items) != 2 || pods.Items[0].Name != "foo" || pods.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected pod list: %#v", pods)
|
|
||||||
}
|
|
||||||
if pods.Items[0].Spec.NodeName != "machine" ||
|
|
||||||
pods.Items[1].Spec.NodeName != "machine" {
|
|
||||||
t.Errorf("Failed to populate host name.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdWatchPods(t *testing.T) {
|
func TestEtcdWatchPods(t *testing.T) {
|
||||||
registry, _, _, fakeClient, _ := newStorage(t)
|
registry, _, _, fakeClient, _ := newStorage(t)
|
||||||
ctx := api.NewDefaultContext()
|
ctx := api.NewDefaultContext()
|
||||||
|
56
pkg/registry/registrytest/etcd.go
Normal file
56
pkg/registry/registrytest/etcd.go
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
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 registrytest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/coreos/go-etcd/etcd"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
"k8s.io/kubernetes/pkg/tools"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetResourceVersion(fakeClient *tools.FakeEtcdClient, resourceVersion uint64) {
|
||||||
|
fakeClient.ChangeIndex = resourceVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetObjectsForKey(fakeClient *tools.FakeEtcdClient, key string, objects []runtime.Object) []runtime.Object {
|
||||||
|
result := make([]runtime.Object, len(objects))
|
||||||
|
if len(objects) > 0 {
|
||||||
|
nodes := make([]*etcd.Node, len(objects))
|
||||||
|
for i, obj := range objects {
|
||||||
|
encoded := runtime.EncodeOrDie(latest.Codec, obj)
|
||||||
|
decoded, _ := latest.Codec.Decode([]byte(encoded))
|
||||||
|
nodes[i] = &etcd.Node{Value: encoded}
|
||||||
|
result[i] = decoded
|
||||||
|
}
|
||||||
|
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
||||||
|
R: &etcd.Response{
|
||||||
|
Node: &etcd.Node{
|
||||||
|
Nodes: nodes,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
E: nil,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
||||||
|
R: &etcd.Response{},
|
||||||
|
E: fakeClient.NewError(tools.EtcdErrorCodeNotFound),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
"k8s.io/kubernetes/pkg/api/rest/resttest"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
|
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||||
"k8s.io/kubernetes/pkg/registry/resourcequota"
|
"k8s.io/kubernetes/pkg/registry/resourcequota"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/storage"
|
"k8s.io/kubernetes/pkg/storage"
|
||||||
@ -146,155 +147,6 @@ func TestCreateSetsFields(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListError(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
fakeEtcdClient.Err = fmt.Errorf("test error")
|
|
||||||
storage, _ := NewStorage(etcdStorage)
|
|
||||||
resourcequotas, err := storage.List(api.NewDefaultContext(), labels.Everything(), fields.Everything())
|
|
||||||
if err != fakeEtcdClient.Err {
|
|
||||||
t.Fatalf("Expected %#v, Got %#v", fakeEtcdClient.Err, err)
|
|
||||||
}
|
|
||||||
if resourcequotas != nil {
|
|
||||||
t.Errorf("Unexpected non-nil resourcequota list: %#v", resourcequotas)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListEmptyResourceQuotaList(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
fakeEtcdClient.ChangeIndex = 1
|
|
||||||
storage, _ := NewStorage(etcdStorage)
|
|
||||||
ctx := api.NewContext()
|
|
||||||
key := storage.Etcd.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
|
|
||||||
fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{},
|
|
||||||
E: fakeEtcdClient.NewError(tools.EtcdErrorCodeNotFound),
|
|
||||||
}
|
|
||||||
|
|
||||||
resourcequotas, err := storage.List(api.NewContext(), labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(resourcequotas.(*api.ResourceQuotaList).Items) != 0 {
|
|
||||||
t.Errorf("Unexpected non-zero resourcequota list: %#v", resourcequotas)
|
|
||||||
}
|
|
||||||
if resourcequotas.(*api.ResourceQuotaList).ResourceVersion != "1" {
|
|
||||||
t.Errorf("Unexpected resource version: %#v", resourcequotas)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListResourceQuotaList(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
storage, _ := NewStorage(etcdStorage)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := storage.Etcd.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.ResourceQuota{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.ResourceQuota{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
resourcequotasObj, err := storage.List(api.NewDefaultContext(), labels.Everything(), fields.Everything())
|
|
||||||
resourcequotas := resourcequotasObj.(*api.ResourceQuotaList)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(resourcequotas.Items) != 2 {
|
|
||||||
t.Errorf("Unexpected resourcequota list: %#v", resourcequotas)
|
|
||||||
}
|
|
||||||
if resourcequotas.Items[0].Name != "foo" {
|
|
||||||
t.Errorf("Unexpected resourcequota: %#v", resourcequotas.Items[0])
|
|
||||||
}
|
|
||||||
if resourcequotas.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected resourcequota: %#v", resourcequotas.Items[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListResourceQuotaListSelection(t *testing.T) {
|
|
||||||
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
|
||||||
storage, _ := NewStorage(etcdStorage)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := storage.Etcd.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeEtcdClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.ResourceQuota{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
})},
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.ResourceQuota{
|
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
Name: "qux",
|
|
||||||
Labels: map[string]string{"label": "qux"},
|
|
||||||
},
|
|
||||||
})},
|
|
||||||
{Value: runtime.EncodeOrDie(latest.Codec, &api.ResourceQuota{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "zot"},
|
|
||||||
})},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
table := []struct {
|
|
||||||
label, field string
|
|
||||||
expectedIDs util.StringSet
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
expectedIDs: util.NewStringSet("foo", "qux", "zot"),
|
|
||||||
}, {
|
|
||||||
field: "name=zot",
|
|
||||||
expectedIDs: util.NewStringSet("zot"),
|
|
||||||
}, {
|
|
||||||
label: "label=qux",
|
|
||||||
expectedIDs: util.NewStringSet("qux"),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for index, item := range table {
|
|
||||||
label, err := labels.Parse(item.label)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
field, err := fields.ParseSelector(item.field)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
resourcequotasObj, err := storage.List(ctx, label, field)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
resourcequotas := resourcequotasObj.(*api.ResourceQuotaList)
|
|
||||||
|
|
||||||
set := util.NewStringSet()
|
|
||||||
for i := range resourcequotas.Items {
|
|
||||||
set.Insert(resourcequotas.Items[i].Name)
|
|
||||||
}
|
|
||||||
if e, a := len(item.expectedIDs), len(set); e != a {
|
|
||||||
t.Errorf("%v: Expected %v, got %v", index, item.expectedIDs, set)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestResourceQuotaDecode(t *testing.T) {
|
func TestResourceQuotaDecode(t *testing.T) {
|
||||||
_, etcdStorage := newEtcdStorage(t)
|
_, etcdStorage := newEtcdStorage(t)
|
||||||
storage, _ := NewStorage(etcdStorage)
|
storage, _ := NewStorage(etcdStorage)
|
||||||
@ -350,6 +202,22 @@ func TestEtcdGet(t *testing.T) {
|
|||||||
test.TestGet(resourcequota)
|
test.TestGet(resourcequota)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEtcdList(t *testing.T) {
|
||||||
|
fakeEtcdClient, etcdStorage := newEtcdStorage(t)
|
||||||
|
storage, _ := NewStorage(etcdStorage)
|
||||||
|
test := resttest.New(t, storage, fakeEtcdClient.SetError)
|
||||||
|
key := etcdtest.AddPrefix(storage.Etcd.KeyRootFunc(test.TestContext()))
|
||||||
|
resourcequota := validNewResourceQuota()
|
||||||
|
test.TestList(
|
||||||
|
resourcequota,
|
||||||
|
func(objects []runtime.Object) []runtime.Object {
|
||||||
|
return registrytest.SetObjectsForKey(fakeEtcdClient, key, objects)
|
||||||
|
},
|
||||||
|
func(resourceVersion uint64) {
|
||||||
|
registrytest.SetResourceVersion(fakeEtcdClient, resourceVersion)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestEtcdCreateFailsWithoutNamespace(t *testing.T) {
|
func TestEtcdCreateFailsWithoutNamespace(t *testing.T) {
|
||||||
registry, _, fakeClient, _ := newStorage(t)
|
registry, _, fakeClient, _ := newStorage(t)
|
||||||
fakeClient.TestIndex = true
|
fakeClient.TestIndex = true
|
||||||
@ -436,84 +304,6 @@ func TestEtcdUpdateStatus(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEtcdEmptyList(t *testing.T) {
|
|
||||||
registry, _, fakeClient, _ := newStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := registry.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
|
|
||||||
obj, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
resourcequotas := obj.(*api.ResourceQuotaList)
|
|
||||||
if len(resourcequotas.Items) != 0 {
|
|
||||||
t.Errorf("Unexpected resourcequota list: %#v", resourcequotas)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdListNotFound(t *testing.T) {
|
|
||||||
registry, _, fakeClient, _ := newStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := registry.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{},
|
|
||||||
E: tools.EtcdErrorNotFound,
|
|
||||||
}
|
|
||||||
obj, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
resourcequotas := obj.(*api.ResourceQuotaList)
|
|
||||||
if len(resourcequotas.Items) != 0 {
|
|
||||||
t.Errorf("Unexpected resourcequota list: %#v", resourcequotas)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdList(t *testing.T) {
|
|
||||||
registry, _, fakeClient, _ := newStorage(t)
|
|
||||||
ctx := api.NewDefaultContext()
|
|
||||||
key := registry.KeyRootFunc(ctx)
|
|
||||||
key = etcdtest.AddPrefix(key)
|
|
||||||
fakeClient.Data[key] = tools.EtcdResponseWithError{
|
|
||||||
R: &etcd.Response{
|
|
||||||
Node: &etcd.Node{
|
|
||||||
Nodes: []*etcd.Node{
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.ResourceQuota{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Value: runtime.EncodeOrDie(latest.Codec, &api.ResourceQuota{
|
|
||||||
ObjectMeta: api.ObjectMeta{Name: "bar"},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
E: nil,
|
|
||||||
}
|
|
||||||
obj, err := registry.List(ctx, labels.Everything(), fields.Everything())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
resourcequotas := obj.(*api.ResourceQuotaList)
|
|
||||||
|
|
||||||
if len(resourcequotas.Items) != 2 || resourcequotas.Items[0].Name != "foo" || resourcequotas.Items[1].Name != "bar" {
|
|
||||||
t.Errorf("Unexpected resourcequota list: %#v", resourcequotas)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEtcdWatchResourceQuotas(t *testing.T) {
|
func TestEtcdWatchResourceQuotas(t *testing.T) {
|
||||||
registry, _, fakeClient, _ := newStorage(t)
|
registry, _, fakeClient, _ := newStorage(t)
|
||||||
ctx := api.NewDefaultContext()
|
ctx := api.NewDefaultContext()
|
||||||
|
@ -142,7 +142,7 @@ func (f *FakeEtcdClient) Get(key string, sort, recursive bool) (*etcd.Response,
|
|||||||
}
|
}
|
||||||
f.t.Logf("returning %v: %#v %#v", key, result.R, result.E)
|
f.t.Logf("returning %v: %#v %#v", key, result.R, result.E)
|
||||||
|
|
||||||
// Sort response, note this will alter resutl.R.
|
// Sort response, note this will alter result.R.
|
||||||
if result.R.Node != nil && result.R.Node.Nodes != nil && sort {
|
if result.R.Node != nil && result.R.Node.Nodes != nil && sort {
|
||||||
f.sortResponse(result.R.Node.Nodes)
|
f.sortResponse(result.R.Node.Nodes)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user