Merge pull request #31704 from timothysc/etcd3_v3client_leak_fix
Automatic merge from submit-queue Etcd3 v3client + grpc client leak fix This re-enables the client and plumbs through the destroyFunc to cleanup clients. Fix for https://github.com/kubernetes/kubernetes/issues/31262
This commit is contained in:
		@@ -45,7 +45,7 @@ import (
 | 
			
		||||
 | 
			
		||||
// setUp is a convience function for setting up for (most) tests.
 | 
			
		||||
func setUp(t *testing.T) (GenericAPIServer, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
 | 
			
		||||
	etcdServer := etcdtesting.NewEtcdTestClientServer(t)
 | 
			
		||||
	etcdServer, _ := etcdtesting.NewUnsecuredEtcd3TestClientServer(t)
 | 
			
		||||
 | 
			
		||||
	genericapiserver := GenericAPIServer{}
 | 
			
		||||
	config := Config{}
 | 
			
		||||
 
 | 
			
		||||
@@ -60,7 +60,6 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage/etcd/etcdtest"
 | 
			
		||||
	etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage/storagebackend"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/intstr"
 | 
			
		||||
	utilnet "k8s.io/kubernetes/pkg/util/net"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/sets"
 | 
			
		||||
@@ -75,7 +74,7 @@ import (
 | 
			
		||||
 | 
			
		||||
// setUp is a convience function for setting up for (most) tests.
 | 
			
		||||
func setUp(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
 | 
			
		||||
	server := etcdtesting.NewUnsecuredEtcdTestClientServer(t)
 | 
			
		||||
	server, storageConfig := etcdtesting.NewUnsecuredEtcd3TestClientServer(t)
 | 
			
		||||
 | 
			
		||||
	master := &Master{
 | 
			
		||||
		GenericAPIServer: &genericapiserver.GenericAPIServer{},
 | 
			
		||||
@@ -84,16 +83,6 @@ func setUp(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.
 | 
			
		||||
		Config: &genericapiserver.Config{},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	storageConfig := storagebackend.Config{
 | 
			
		||||
		Prefix:   etcdtest.PathPrefix(),
 | 
			
		||||
		CAFile:   server.CAFile,
 | 
			
		||||
		KeyFile:  server.KeyFile,
 | 
			
		||||
		CertFile: server.CertFile,
 | 
			
		||||
	}
 | 
			
		||||
	for _, url := range server.ClientURLs {
 | 
			
		||||
		storageConfig.ServerList = append(storageConfig.ServerList, url.String())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resourceEncoding := genericapiserver.NewDefaultResourceEncodingConfig()
 | 
			
		||||
	resourceEncoding.SetVersionEncoding(api.GroupName, *testapi.Default.GroupVersion(), unversioned.GroupVersion{Group: api.GroupName, Version: runtime.APIVersionInternal})
 | 
			
		||||
	resourceEncoding.SetVersionEncoding(autoscaling.GroupName, *testapi.Autoscaling.GroupVersion(), unversioned.GroupVersion{Group: autoscaling.GroupName, Version: runtime.APIVersionInternal})
 | 
			
		||||
@@ -102,7 +91,7 @@ func setUp(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.
 | 
			
		||||
	resourceEncoding.SetVersionEncoding(extensions.GroupName, *testapi.Extensions.GroupVersion(), unversioned.GroupVersion{Group: extensions.GroupName, Version: runtime.APIVersionInternal})
 | 
			
		||||
	resourceEncoding.SetVersionEncoding(rbac.GroupName, *testapi.Rbac.GroupVersion(), unversioned.GroupVersion{Group: rbac.GroupName, Version: runtime.APIVersionInternal})
 | 
			
		||||
	resourceEncoding.SetVersionEncoding(certificates.GroupName, *testapi.Certificates.GroupVersion(), unversioned.GroupVersion{Group: certificates.GroupName, Version: runtime.APIVersionInternal})
 | 
			
		||||
	storageFactory := genericapiserver.NewDefaultStorageFactory(storageConfig, testapi.StorageMediaType(), api.Codecs, resourceEncoding, DefaultAPIResourceConfigSource())
 | 
			
		||||
	storageFactory := genericapiserver.NewDefaultStorageFactory(*storageConfig, testapi.StorageMediaType(), api.Codecs, resourceEncoding, DefaultAPIResourceConfigSource())
 | 
			
		||||
 | 
			
		||||
	config.StorageFactory = storageFactory
 | 
			
		||||
	config.APIResourceConfigSource = DefaultAPIResourceConfigSource()
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *ApprovalREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &certificates.CertificateSigningRequestList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.CertificateSigningRequests),
 | 
			
		||||
		&certificates.CertificateSigningRequest{},
 | 
			
		||||
@@ -73,6 +73,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *ApprovalREST) {
 | 
			
		||||
		DeleteStrategy: csrregistry.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Subresources use the same store and creation strategy, which only
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &rbac.ClusterRoleList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.ClusterRoles),
 | 
			
		||||
		&rbac.ClusterRole{},
 | 
			
		||||
@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		DeleteStrategy: clusterrole.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &rbac.ClusterRoleBindingList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.ClusterRoleBindings),
 | 
			
		||||
		&rbac.ClusterRoleBinding{},
 | 
			
		||||
@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		DeleteStrategy: clusterrolebinding.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.ConfigMapList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.ConfigMaps),
 | 
			
		||||
		&api.ConfigMap{},
 | 
			
		||||
@@ -82,6 +82,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		DeleteStrategy: configmap.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -53,6 +53,7 @@ func validNewConfigMap() *api.ConfigMap {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
 | 
			
		||||
	validConfigMap := validNewConfigMap()
 | 
			
		||||
@@ -80,6 +81,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -102,6 +104,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewConfigMap())
 | 
			
		||||
}
 | 
			
		||||
@@ -109,6 +112,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewConfigMap())
 | 
			
		||||
}
 | 
			
		||||
@@ -116,6 +120,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewConfigMap())
 | 
			
		||||
}
 | 
			
		||||
@@ -123,6 +128,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewConfigMap(),
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.ReplicationControllerList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Controllers),
 | 
			
		||||
		&api.ReplicationController{},
 | 
			
		||||
@@ -105,6 +105,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		DeleteStrategy: controller.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
	statusStore.UpdateStrategy = controller.StatusStrategy
 | 
			
		||||
 
 | 
			
		||||
@@ -88,6 +88,7 @@ var validController = validNewController()
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Controller.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Controller.Store)
 | 
			
		||||
	controller := validNewController()
 | 
			
		||||
	controller.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -108,6 +109,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Controller.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Controller.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -135,6 +137,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Controller.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Controller.Store)
 | 
			
		||||
	test.TestDelete(validNewController())
 | 
			
		||||
}
 | 
			
		||||
@@ -142,6 +145,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGenerationNumber(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Controller.Store.DestroyFunc()
 | 
			
		||||
	modifiedSno := *validNewController()
 | 
			
		||||
	modifiedSno.Generation = 100
 | 
			
		||||
	modifiedSno.Status.ObservedGeneration = 10
 | 
			
		||||
@@ -192,6 +196,7 @@ func TestGenerationNumber(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Controller.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Controller.Store)
 | 
			
		||||
	test.TestGet(validNewController())
 | 
			
		||||
}
 | 
			
		||||
@@ -199,6 +204,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Controller.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Controller.Store)
 | 
			
		||||
	test.TestList(validNewController())
 | 
			
		||||
}
 | 
			
		||||
@@ -206,6 +212,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Controller.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Controller.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validController,
 | 
			
		||||
@@ -240,6 +247,7 @@ func TestWatch(t *testing.T) {
 | 
			
		||||
func TestScaleGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Controller.Store.DestroyFunc()
 | 
			
		||||
 | 
			
		||||
	ctx := api.WithNamespace(api.NewContext(), namespace)
 | 
			
		||||
	rc, err := createController(storage.Controller, *validController, t)
 | 
			
		||||
@@ -276,6 +284,7 @@ func TestScaleGet(t *testing.T) {
 | 
			
		||||
func TestScaleUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Controller.Store.DestroyFunc()
 | 
			
		||||
 | 
			
		||||
	ctx := api.WithNamespace(api.NewContext(), namespace)
 | 
			
		||||
	rc, err := createController(storage.Controller, *validController, t)
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &extensions.DaemonSetList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Daemonsets),
 | 
			
		||||
		&extensions.DaemonSet{},
 | 
			
		||||
@@ -80,6 +80,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		DeleteStrategy: daemonset.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
	statusStore.UpdateStrategy = daemonset.StatusStrategy
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,7 @@ var validDaemonSet = newValidDaemonSet()
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	ds := newValidDaemonSet()
 | 
			
		||||
	ds.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -96,6 +97,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -124,6 +126,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(newValidDaemonSet())
 | 
			
		||||
}
 | 
			
		||||
@@ -131,6 +134,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(newValidDaemonSet())
 | 
			
		||||
}
 | 
			
		||||
@@ -138,6 +142,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(newValidDaemonSet())
 | 
			
		||||
}
 | 
			
		||||
@@ -145,6 +150,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validDaemonSet,
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *RollbackREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &extensions.DeploymentList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Deployments),
 | 
			
		||||
		&extensions.Deployment{},
 | 
			
		||||
@@ -103,6 +103,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *RollbackREST) {
 | 
			
		||||
		DeleteStrategy: deployment.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
	statusStore.UpdateStrategy = deployment.StatusStrategy
 | 
			
		||||
 
 | 
			
		||||
@@ -93,6 +93,7 @@ var validDeployment = *validNewDeployment()
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Deployment.Store)
 | 
			
		||||
	deployment := validNewDeployment()
 | 
			
		||||
	deployment.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -112,6 +113,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Deployment.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -144,6 +146,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Deployment.Store)
 | 
			
		||||
	test.TestDelete(validNewDeployment())
 | 
			
		||||
}
 | 
			
		||||
@@ -151,6 +154,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Deployment.Store)
 | 
			
		||||
	test.TestGet(validNewDeployment())
 | 
			
		||||
}
 | 
			
		||||
@@ -158,6 +162,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Deployment.Store)
 | 
			
		||||
	test.TestList(validNewDeployment())
 | 
			
		||||
}
 | 
			
		||||
@@ -165,6 +170,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Deployment.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewDeployment(),
 | 
			
		||||
@@ -190,7 +196,7 @@ func TestWatch(t *testing.T) {
 | 
			
		||||
func TestScaleGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
 | 
			
		||||
	defer storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
	var deployment extensions.Deployment
 | 
			
		||||
	ctx := api.WithNamespace(api.NewContext(), namespace)
 | 
			
		||||
	key := etcdtest.AddPrefix("/deployments/" + namespace + "/" + name)
 | 
			
		||||
@@ -227,7 +233,7 @@ func TestScaleGet(t *testing.T) {
 | 
			
		||||
func TestScaleUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
 | 
			
		||||
	defer storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
	var deployment extensions.Deployment
 | 
			
		||||
	ctx := api.WithNamespace(api.NewContext(), namespace)
 | 
			
		||||
	key := etcdtest.AddPrefix("/deployments/" + namespace + "/" + name)
 | 
			
		||||
@@ -265,7 +271,7 @@ func TestScaleUpdate(t *testing.T) {
 | 
			
		||||
func TestStatusUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
 | 
			
		||||
	defer storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.WithNamespace(api.NewContext(), namespace)
 | 
			
		||||
	key := etcdtest.AddPrefix("/deployments/" + namespace + "/" + name)
 | 
			
		||||
	if err := storage.Deployment.Storage.Create(ctx, key, &validDeployment, nil, 0); err != nil {
 | 
			
		||||
@@ -348,6 +354,7 @@ func TestEtcdCreateDeploymentRollback(t *testing.T) {
 | 
			
		||||
				t.Errorf("%s: expected: %v, got: %v", k, *d.(*extensions.Deployment).Spec.RollbackTo, test.rollback.RollbackTo)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
		server.Terminate(t)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -357,6 +364,7 @@ func TestEtcdCreateDeploymentRollback(t *testing.T) {
 | 
			
		||||
func TestEtcdCreateDeploymentRollbackNoDeployment(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Deployment.Store.DestroyFunc()
 | 
			
		||||
	rollbackStorage := storage.Rollback
 | 
			
		||||
	ctx := api.WithNamespace(api.NewContext(), namespace)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.EndpointsList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Endpoints),
 | 
			
		||||
		&api.Endpoints{},
 | 
			
		||||
@@ -66,6 +66,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		DeleteStrategy: endpoint.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -60,6 +60,7 @@ func validChangedEndpoints() *api.Endpoints {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	endpoints := validNewEndpoints()
 | 
			
		||||
	endpoints.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -76,6 +77,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).AllowCreateOnUpdate()
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -95,6 +97,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewEndpoints())
 | 
			
		||||
}
 | 
			
		||||
@@ -102,6 +105,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewEndpoints())
 | 
			
		||||
}
 | 
			
		||||
@@ -109,6 +113,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewEndpoints())
 | 
			
		||||
}
 | 
			
		||||
@@ -116,6 +121,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewEndpoints(),
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ func NewREST(opts generic.RESTOptions, ttl uint64) *REST {
 | 
			
		||||
 | 
			
		||||
	// We explicitly do NOT do any decoration here - switching on Cacher
 | 
			
		||||
	// for events will lead to too high memory consumption.
 | 
			
		||||
	storageInterface, _ := generic.NewRawStorage(opts.StorageConfig)
 | 
			
		||||
	storageInterface, dFunc := generic.NewRawStorage(opts.StorageConfig)
 | 
			
		||||
 | 
			
		||||
	store := ®istry.Store{
 | 
			
		||||
		NewFunc:     func() runtime.Object { return &api.Event{} },
 | 
			
		||||
@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions, ttl uint64) *REST {
 | 
			
		||||
		DeleteStrategy: event.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -51,6 +51,7 @@ func validNewEvent(namespace string) *api.Event {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	event := validNewEvent(test.TestNamespace())
 | 
			
		||||
	event.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -65,6 +66,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).AllowCreateOnUpdate()
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -87,6 +89,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewEvent(test.TestNamespace()))
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -90,6 +90,9 @@ type Store struct {
 | 
			
		||||
	// Returns a matcher corresponding to the provided labels and fields.
 | 
			
		||||
	PredicateFunc func(label labels.Selector, field fields.Selector) *generic.SelectionPredicate
 | 
			
		||||
 | 
			
		||||
	// Called to cleanup storage clients.
 | 
			
		||||
	DestroyFunc func()
 | 
			
		||||
 | 
			
		||||
	// DeleteCollectionWorkers is the maximum number of workers in a single
 | 
			
		||||
	// DeleteCollection call.
 | 
			
		||||
	DeleteCollectionWorkers int
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,6 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/selection"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage"
 | 
			
		||||
	etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage/etcd/etcdtest"
 | 
			
		||||
	etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage/storagebackend/factory"
 | 
			
		||||
	storagetesting "k8s.io/kubernetes/pkg/storage/testing"
 | 
			
		||||
@@ -1197,12 +1196,16 @@ func TestStoreWatch(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
func newTestGenericStoreRegistry(t *testing.T, hasCacheEnabled bool) (factory.DestroyFunc, *Store) {
 | 
			
		||||
	podPrefix := "/pods"
 | 
			
		||||
	server := etcdtesting.NewEtcdTestClientServer(t)
 | 
			
		||||
	server, sc := etcdtesting.NewUnsecuredEtcd3TestClientServer(t)
 | 
			
		||||
	strategy := &testRESTStrategy{api.Scheme, api.SimpleNameGenerator, true, false, true}
 | 
			
		||||
 | 
			
		||||
	codec := testapi.Default.StorageCodec()
 | 
			
		||||
	s := etcdstorage.NewEtcdStorage(server.Client, codec, etcdtest.PathPrefix(), false, etcdtest.DeserializationCacheSize)
 | 
			
		||||
	sc.Codec = testapi.Default.StorageCodec()
 | 
			
		||||
	s, dFunc, err := factory.Create(*sc)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatalf("Error creating storage: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	destroyFunc := func() {
 | 
			
		||||
		dFunc()
 | 
			
		||||
		server.Terminate(t)
 | 
			
		||||
	}
 | 
			
		||||
	if hasCacheEnabled {
 | 
			
		||||
@@ -1214,7 +1217,7 @@ func newTestGenericStoreRegistry(t *testing.T, hasCacheEnabled bool) (factory.De
 | 
			
		||||
			ResourcePrefix: podPrefix,
 | 
			
		||||
			KeyFunc:        func(obj runtime.Object) (string, error) { return storage.NoNamespaceKeyFunc(podPrefix, obj) },
 | 
			
		||||
			NewListFunc:    func() runtime.Object { return &api.PodList{} },
 | 
			
		||||
			Codec:          codec,
 | 
			
		||||
			Codec:          sc.Codec,
 | 
			
		||||
		}
 | 
			
		||||
		cacher := storage.NewCacherFromConfig(config)
 | 
			
		||||
		d := destroyFunc
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &autoscaling.HorizontalPodAutoscalerList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.HorizontalPodAutoscalers),
 | 
			
		||||
		&autoscaling.HorizontalPodAutoscaler{},
 | 
			
		||||
@@ -78,6 +78,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		DeleteStrategy: horizontalpodautoscaler.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
	statusStore.UpdateStrategy = horizontalpodautoscaler.StatusStrategy
 | 
			
		||||
 
 | 
			
		||||
@@ -59,6 +59,7 @@ func validNewHorizontalPodAutoscaler(name string) *autoscaling.HorizontalPodAuto
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	autoscaler := validNewHorizontalPodAutoscaler("foo")
 | 
			
		||||
	autoscaler.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -73,6 +74,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -89,6 +91,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewHorizontalPodAutoscaler("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -96,6 +99,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewHorizontalPodAutoscaler("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -103,6 +107,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewHorizontalPodAutoscaler("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -110,6 +115,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewHorizontalPodAutoscaler("foo"),
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &extensions.IngressList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Ingress),
 | 
			
		||||
		&extensions.Ingress{},
 | 
			
		||||
@@ -80,6 +80,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		DeleteStrategy: ingress.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
	statusStore.UpdateStrategy = ingress.StatusStrategy
 | 
			
		||||
 
 | 
			
		||||
@@ -115,6 +115,7 @@ func validIngress() *extensions.Ingress {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	ingress := validIngress()
 | 
			
		||||
	noDefaultBackendAndRules := validIngress()
 | 
			
		||||
@@ -134,6 +135,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -169,6 +171,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validIngress())
 | 
			
		||||
}
 | 
			
		||||
@@ -176,6 +179,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validIngress())
 | 
			
		||||
}
 | 
			
		||||
@@ -183,6 +187,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validIngress())
 | 
			
		||||
}
 | 
			
		||||
@@ -190,6 +195,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validIngress(),
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &batch.JobList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Jobs),
 | 
			
		||||
		&batch.Job{},
 | 
			
		||||
@@ -80,6 +80,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		DeleteStrategy: job.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
 
 | 
			
		||||
@@ -76,6 +76,7 @@ func validNewJob() *batch.Job {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	validJob := validNewJob()
 | 
			
		||||
	validJob.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -96,6 +97,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	two := int32(2)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
@@ -124,6 +126,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewJob())
 | 
			
		||||
}
 | 
			
		||||
@@ -131,6 +134,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewJob())
 | 
			
		||||
}
 | 
			
		||||
@@ -138,6 +142,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewJob())
 | 
			
		||||
}
 | 
			
		||||
@@ -145,6 +150,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewJob(),
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.LimitRangeList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.LimitRanges),
 | 
			
		||||
		&api.LimitRange{},
 | 
			
		||||
@@ -67,6 +67,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		ExportStrategy: limitrange.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -62,6 +62,7 @@ func validNewLimitRange() *api.LimitRange {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).GeneratesName()
 | 
			
		||||
	validLimitRange := validNewLimitRange()
 | 
			
		||||
	validLimitRange.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -78,6 +79,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).AllowCreateOnUpdate()
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -106,6 +108,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewLimitRange())
 | 
			
		||||
}
 | 
			
		||||
@@ -113,6 +116,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewLimitRange())
 | 
			
		||||
}
 | 
			
		||||
@@ -120,6 +124,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewLimitRange())
 | 
			
		||||
}
 | 
			
		||||
@@ -127,6 +132,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewLimitRange(),
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *FinalizeREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.NamespaceList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Namespaces),
 | 
			
		||||
		&api.Namespace{},
 | 
			
		||||
@@ -85,6 +85,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *FinalizeREST) {
 | 
			
		||||
		ReturnDeletedObject: true,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
 
 | 
			
		||||
@@ -47,6 +47,7 @@ func validNewNamespace() *api.Namespace {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	namespace := validNewNamespace()
 | 
			
		||||
	namespace.ObjectMeta = api.ObjectMeta{GenerateName: "foo"}
 | 
			
		||||
@@ -63,6 +64,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestCreateSetsFields(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	namespace := validNewNamespace()
 | 
			
		||||
	ctx := api.NewContext()
 | 
			
		||||
	_, err := storage.Create(ctx, namespace)
 | 
			
		||||
@@ -89,6 +91,7 @@ func TestCreateSetsFields(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope().ReturnDeletedObject()
 | 
			
		||||
	test.TestDelete(validNewNamespace())
 | 
			
		||||
}
 | 
			
		||||
@@ -96,6 +99,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestGet(validNewNamespace())
 | 
			
		||||
}
 | 
			
		||||
@@ -103,6 +107,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestList(validNewNamespace())
 | 
			
		||||
}
 | 
			
		||||
@@ -110,6 +115,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewNamespace(),
 | 
			
		||||
@@ -134,6 +140,7 @@ func TestWatch(t *testing.T) {
 | 
			
		||||
func TestDeleteNamespaceWithIncompleteFinalizers(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	key := etcdtest.AddPrefix("namespaces/foo")
 | 
			
		||||
	ctx := api.NewContext()
 | 
			
		||||
	now := unversioned.Now()
 | 
			
		||||
@@ -158,6 +165,7 @@ func TestDeleteNamespaceWithIncompleteFinalizers(t *testing.T) {
 | 
			
		||||
func TestDeleteNamespaceWithCompleteFinalizers(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	key := etcdtest.AddPrefix("namespaces/foo")
 | 
			
		||||
	ctx := api.NewContext()
 | 
			
		||||
	now := unversioned.Now()
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &extensionsapi.NetworkPolicyList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.NetworkPolicys),
 | 
			
		||||
		&extensionsapi.NetworkPolicy{},
 | 
			
		||||
@@ -79,6 +79,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		DeleteStrategy: networkpolicy.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -81,6 +81,7 @@ var validNetworkPolicy = *validNewNetworkPolicy()
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	np := validNewNetworkPolicy()
 | 
			
		||||
	np.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -102,6 +103,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -128,6 +130,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewNetworkPolicy())
 | 
			
		||||
}
 | 
			
		||||
@@ -135,6 +138,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewNetworkPolicy())
 | 
			
		||||
}
 | 
			
		||||
@@ -142,6 +146,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewNetworkPolicy())
 | 
			
		||||
}
 | 
			
		||||
@@ -149,6 +154,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewNetworkPolicy(),
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,7 @@ func NewStorage(opts generic.RESTOptions, connection client.ConnectionInfoGetter
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.NodeList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Nodes),
 | 
			
		||||
		&api.Node{},
 | 
			
		||||
@@ -100,6 +100,7 @@ func NewStorage(opts generic.RESTOptions, connection client.ConnectionInfoGetter
 | 
			
		||||
		ExportStrategy: node.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
 
 | 
			
		||||
@@ -67,6 +67,7 @@ func validNewNode() *api.Node {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	node := validNewNode()
 | 
			
		||||
	node.ObjectMeta = api.ObjectMeta{GenerateName: "foo"}
 | 
			
		||||
@@ -83,6 +84,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -99,6 +101,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestDelete(validNewNode())
 | 
			
		||||
}
 | 
			
		||||
@@ -106,6 +109,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestGet(validNewNode())
 | 
			
		||||
}
 | 
			
		||||
@@ -113,6 +117,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestList(validNewNode())
 | 
			
		||||
}
 | 
			
		||||
@@ -120,6 +125,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewNode(),
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.PersistentVolumeList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.PersistentVolumes),
 | 
			
		||||
		&api.PersistentVolume{},
 | 
			
		||||
@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		ReturnDeletedObject: true,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
 
 | 
			
		||||
@@ -71,6 +71,7 @@ func validChangedPersistentVolume() *api.PersistentVolume {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	pv := validNewPersistentVolume("foo")
 | 
			
		||||
	pv.ObjectMeta = api.ObjectMeta{GenerateName: "foo"}
 | 
			
		||||
@@ -87,6 +88,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -105,6 +107,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope().ReturnDeletedObject()
 | 
			
		||||
	test.TestDelete(validNewPersistentVolume("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -112,6 +115,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestGet(validNewPersistentVolume("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -119,6 +123,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestList(validNewPersistentVolume("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -126,6 +131,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewPersistentVolume("foo"),
 | 
			
		||||
@@ -150,6 +156,7 @@ func TestWatch(t *testing.T) {
 | 
			
		||||
func TestUpdateStatus(t *testing.T) {
 | 
			
		||||
	storage, statusStorage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewContext()
 | 
			
		||||
	key, _ := storage.KeyFunc(ctx, "foo")
 | 
			
		||||
	key = etcdtest.AddPrefix(key)
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.PersistentVolumeClaimList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.PersistentVolumeClaims),
 | 
			
		||||
		&api.PersistentVolumeClaim{},
 | 
			
		||||
@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		ReturnDeletedObject: true,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
 
 | 
			
		||||
@@ -63,6 +63,7 @@ func validNewPersistentVolumeClaim(name, ns string) *api.PersistentVolumeClaim {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	pv := validNewPersistentVolumeClaim("foo", api.NamespaceDefault)
 | 
			
		||||
	pv.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -79,6 +80,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -95,6 +97,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ReturnDeletedObject()
 | 
			
		||||
	test.TestDelete(validNewPersistentVolumeClaim("foo", api.NamespaceDefault))
 | 
			
		||||
}
 | 
			
		||||
@@ -102,6 +105,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewPersistentVolumeClaim("foo", api.NamespaceDefault))
 | 
			
		||||
}
 | 
			
		||||
@@ -109,6 +113,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewPersistentVolumeClaim("foo", api.NamespaceDefault))
 | 
			
		||||
}
 | 
			
		||||
@@ -116,6 +121,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewPersistentVolumeClaim("foo", api.NamespaceDefault),
 | 
			
		||||
@@ -140,6 +146,7 @@ func TestWatch(t *testing.T) {
 | 
			
		||||
func TestUpdateStatus(t *testing.T) {
 | 
			
		||||
	storage, statusStorage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
 | 
			
		||||
	key, _ := storage.KeyFunc(ctx, "foo")
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &appsapi.PetSetList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.PetSet),
 | 
			
		||||
		&appsapi.PetSet{},
 | 
			
		||||
@@ -80,6 +80,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		DeleteStrategy: petset.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
	statusStore.UpdateStrategy = petset.StatusStrategy
 | 
			
		||||
 
 | 
			
		||||
@@ -83,6 +83,7 @@ func validNewPetSet() *apps.PetSet {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	ps := validNewPetSet()
 | 
			
		||||
	ps.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -98,7 +99,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestStatusUpdate(t *testing.T) {
 | 
			
		||||
	storage, statusStorage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.WithNamespace(api.NewContext(), api.NamespaceDefault)
 | 
			
		||||
	key := etcdtest.AddPrefix("/petsets/" + api.NamespaceDefault + "/foo")
 | 
			
		||||
	validPetSet := validNewPetSet()
 | 
			
		||||
@@ -135,6 +136,7 @@ func TestStatusUpdate(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewPetSet())
 | 
			
		||||
}
 | 
			
		||||
@@ -142,6 +144,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewPetSet())
 | 
			
		||||
}
 | 
			
		||||
@@ -149,6 +152,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewPetSet())
 | 
			
		||||
}
 | 
			
		||||
@@ -156,6 +160,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewPetSet(),
 | 
			
		||||
 
 | 
			
		||||
@@ -63,7 +63,7 @@ func NewStorage(opts generic.RESTOptions, k client.ConnectionInfoGetter, proxyTr
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.PodList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Pods),
 | 
			
		||||
		&api.Pod{},
 | 
			
		||||
@@ -95,6 +95,7 @@ func NewStorage(opts generic.RESTOptions, k client.ConnectionInfoGetter, proxyTr
 | 
			
		||||
		ReturnDeletedObject: true,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
 
 | 
			
		||||
@@ -82,6 +82,7 @@ func validChangedPod() *api.Pod {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	pod := validNewPod()
 | 
			
		||||
	pod.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -108,6 +109,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, _, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -124,6 +126,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ReturnDeletedObject()
 | 
			
		||||
	test.TestDelete(validNewPod())
 | 
			
		||||
 | 
			
		||||
@@ -156,6 +159,7 @@ func TestIgnoreDeleteNotFound(t *testing.T) {
 | 
			
		||||
	called := false
 | 
			
		||||
	registry, server := newFailDeleteStorage(t, &called)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer registry.Store.DestroyFunc()
 | 
			
		||||
 | 
			
		||||
	// should fail if pod A is not created yet.
 | 
			
		||||
	_, err := registry.Delete(testContext, pod.Name, nil)
 | 
			
		||||
@@ -199,6 +203,7 @@ func TestIgnoreDeleteNotFound(t *testing.T) {
 | 
			
		||||
func TestCreateSetsFields(t *testing.T) {
 | 
			
		||||
	storage, _, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	pod := validNewPod()
 | 
			
		||||
	_, err := storage.Create(api.NewDefaultContext(), pod)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -341,6 +346,7 @@ func TestResourceLocation(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewPod())
 | 
			
		||||
}
 | 
			
		||||
@@ -348,6 +354,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewPod())
 | 
			
		||||
}
 | 
			
		||||
@@ -355,6 +362,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewPod(),
 | 
			
		||||
@@ -378,6 +386,7 @@ func TestWatch(t *testing.T) {
 | 
			
		||||
func TestEtcdCreate(t *testing.T) {
 | 
			
		||||
	storage, bindingStorage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
	key, _ := storage.KeyFunc(ctx, "foo")
 | 
			
		||||
	key = etcdtest.AddPrefix(key)
 | 
			
		||||
@@ -406,6 +415,7 @@ func TestEtcdCreate(t *testing.T) {
 | 
			
		||||
func TestEtcdCreateBindingNoPod(t *testing.T) {
 | 
			
		||||
	storage, bindingStorage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
 | 
			
		||||
	key, _ := storage.KeyFunc(ctx, "foo")
 | 
			
		||||
@@ -437,6 +447,7 @@ func TestEtcdCreateBindingNoPod(t *testing.T) {
 | 
			
		||||
func TestEtcdCreateFailsWithoutNamespace(t *testing.T) {
 | 
			
		||||
	storage, _, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	pod := validNewPod()
 | 
			
		||||
	pod.Namespace = ""
 | 
			
		||||
	_, err := storage.Create(api.NewContext(), pod)
 | 
			
		||||
@@ -449,6 +460,7 @@ func TestEtcdCreateFailsWithoutNamespace(t *testing.T) {
 | 
			
		||||
func TestEtcdCreateWithContainersNotFound(t *testing.T) {
 | 
			
		||||
	storage, bindingStorage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
	key, _ := storage.KeyFunc(ctx, "foo")
 | 
			
		||||
	key = etcdtest.AddPrefix(key)
 | 
			
		||||
@@ -484,6 +496,7 @@ func TestEtcdCreateWithContainersNotFound(t *testing.T) {
 | 
			
		||||
func TestEtcdCreateWithConflict(t *testing.T) {
 | 
			
		||||
	storage, bindingStorage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
 | 
			
		||||
	_, err := storage.Create(ctx, validNewPod())
 | 
			
		||||
@@ -514,6 +527,7 @@ func TestEtcdCreateWithConflict(t *testing.T) {
 | 
			
		||||
func TestEtcdCreateWithExistingContainers(t *testing.T) {
 | 
			
		||||
	storage, bindingStorage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
	key, _ := storage.KeyFunc(ctx, "foo")
 | 
			
		||||
	key = etcdtest.AddPrefix(key)
 | 
			
		||||
@@ -592,6 +606,7 @@ func TestEtcdCreateBinding(t *testing.T) {
 | 
			
		||||
				t.Errorf("%s: expected: %v, got: %v", k, pod.(*api.Pod).Spec.NodeName, test.binding.Target.Name)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		storage.Store.DestroyFunc()
 | 
			
		||||
		server.Terminate(t)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -599,6 +614,7 @@ func TestEtcdCreateBinding(t *testing.T) {
 | 
			
		||||
func TestEtcdUpdateNotScheduled(t *testing.T) {
 | 
			
		||||
	storage, _, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
 | 
			
		||||
	key, _ := storage.KeyFunc(ctx, "foo")
 | 
			
		||||
@@ -626,6 +642,7 @@ func TestEtcdUpdateNotScheduled(t *testing.T) {
 | 
			
		||||
func TestEtcdUpdateScheduled(t *testing.T) {
 | 
			
		||||
	storage, _, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
 | 
			
		||||
	key, _ := storage.KeyFunc(ctx, "foo")
 | 
			
		||||
@@ -695,6 +712,7 @@ func TestEtcdUpdateScheduled(t *testing.T) {
 | 
			
		||||
func TestEtcdUpdateStatus(t *testing.T) {
 | 
			
		||||
	storage, _, statusStorage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
 | 
			
		||||
	key, _ := storage.KeyFunc(ctx, "foo")
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &policyapi.PodDisruptionBudgetList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.PodDisruptionBudget),
 | 
			
		||||
		&policyapi.PodDisruptionBudget{},
 | 
			
		||||
@@ -80,6 +80,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		DeleteStrategy: poddisruptionbudget.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
	statusStore.UpdateStrategy = poddisruptionbudget.StatusStrategy
 | 
			
		||||
 
 | 
			
		||||
@@ -68,6 +68,7 @@ func validNewPodDisruptionBudget() *policy.PodDisruptionBudget {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	pdb := validNewPodDisruptionBudget()
 | 
			
		||||
	pdb.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -83,7 +84,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestStatusUpdate(t *testing.T) {
 | 
			
		||||
	storage, statusStorage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.WithNamespace(api.NewContext(), api.NamespaceDefault)
 | 
			
		||||
	key := etcdtest.AddPrefix("/poddisruptionbudgets/" + api.NamespaceDefault + "/foo")
 | 
			
		||||
	validPodDisruptionBudget := validNewPodDisruptionBudget()
 | 
			
		||||
@@ -120,6 +121,7 @@ func TestStatusUpdate(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewPodDisruptionBudget())
 | 
			
		||||
}
 | 
			
		||||
@@ -127,6 +129,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewPodDisruptionBudget())
 | 
			
		||||
}
 | 
			
		||||
@@ -134,6 +137,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewPodDisruptionBudget())
 | 
			
		||||
}
 | 
			
		||||
@@ -141,6 +145,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewPodDisruptionBudget(),
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &extensions.PodSecurityPolicyList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.PodSecurityPolicies),
 | 
			
		||||
		&extensions.PodSecurityPolicy{},
 | 
			
		||||
@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		DeleteStrategy:      podsecuritypolicy.Strategy,
 | 
			
		||||
		ReturnDeletedObject: true,
 | 
			
		||||
		Storage:             storageInterface,
 | 
			
		||||
		DestroyFunc:         dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -62,6 +62,7 @@ func validNewPodSecurityPolicy() *extensions.PodSecurityPolicy {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	psp := validNewPodSecurityPolicy()
 | 
			
		||||
	psp.ObjectMeta = api.ObjectMeta{GenerateName: "foo-"}
 | 
			
		||||
@@ -78,6 +79,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -94,6 +96,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope().ReturnDeletedObject()
 | 
			
		||||
	test.TestDelete(validNewPodSecurityPolicy())
 | 
			
		||||
}
 | 
			
		||||
@@ -101,6 +104,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestGet(validNewPodSecurityPolicy())
 | 
			
		||||
}
 | 
			
		||||
@@ -108,6 +112,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestList(validNewPodSecurityPolicy())
 | 
			
		||||
}
 | 
			
		||||
@@ -115,6 +120,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewPodSecurityPolicy(),
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.PodTemplateList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.PodTemplates),
 | 
			
		||||
		&api.PodTemplate{},
 | 
			
		||||
@@ -69,6 +69,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		ReturnDeletedObject: true,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -64,6 +64,7 @@ func validNewPodTemplate(name string) *api.PodTemplate {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	pod := validNewPodTemplate("foo")
 | 
			
		||||
	pod.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -80,6 +81,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		//valid
 | 
			
		||||
@@ -96,6 +98,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ReturnDeletedObject()
 | 
			
		||||
	test.TestDelete(validNewPodTemplate("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -103,6 +106,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewPodTemplate("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -110,6 +114,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewPodTemplate("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -117,6 +122,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewPodTemplate("foo"),
 | 
			
		||||
 
 | 
			
		||||
@@ -30,21 +30,14 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/registry/generic/registry"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
			
		||||
	etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage/etcd/etcdtest"
 | 
			
		||||
	etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage/storagebackend"
 | 
			
		||||
	storagetesting "k8s.io/kubernetes/pkg/storage/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func NewEtcdStorage(t *testing.T, group string) (*storagebackend.Config, *etcdtesting.EtcdTestServer) {
 | 
			
		||||
	server := etcdtesting.NewUnsecuredEtcdTestClientServer(t)
 | 
			
		||||
	config := &storagebackend.Config{
 | 
			
		||||
		Type:                     "etcd2",
 | 
			
		||||
		Prefix:                   etcdtest.PathPrefix(),
 | 
			
		||||
		ServerList:               server.Client.Endpoints(),
 | 
			
		||||
		DeserializationCacheSize: etcdtest.DeserializationCacheSize,
 | 
			
		||||
		Codec: testapi.Groups[group].StorageCodec(),
 | 
			
		||||
	}
 | 
			
		||||
	server, config := etcdtesting.NewUnsecuredEtcd3TestClientServer(t)
 | 
			
		||||
	config.Codec = testapi.Groups[group].StorageCodec()
 | 
			
		||||
	return config, server
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &extensions.ReplicaSetList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Replicasets),
 | 
			
		||||
		&extensions.ReplicaSet{},
 | 
			
		||||
@@ -103,6 +103,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		DeleteStrategy: replicaset.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
	statusStore.UpdateStrategy = replicaset.StatusStrategy
 | 
			
		||||
 
 | 
			
		||||
@@ -91,6 +91,7 @@ var validReplicaSet = *validNewReplicaSet()
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.ReplicaSet.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.ReplicaSet.Store)
 | 
			
		||||
	rs := validNewReplicaSet()
 | 
			
		||||
	rs.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -111,6 +112,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.ReplicaSet.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.ReplicaSet.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -138,6 +140,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.ReplicaSet.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.ReplicaSet.Store)
 | 
			
		||||
	test.TestDelete(validNewReplicaSet())
 | 
			
		||||
}
 | 
			
		||||
@@ -145,6 +148,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGenerationNumber(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.ReplicaSet.Store.DestroyFunc()
 | 
			
		||||
	modifiedSno := *validNewReplicaSet()
 | 
			
		||||
	modifiedSno.Generation = 100
 | 
			
		||||
	modifiedSno.Status.ObservedGeneration = 10
 | 
			
		||||
@@ -195,6 +199,7 @@ func TestGenerationNumber(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.ReplicaSet.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.ReplicaSet.Store)
 | 
			
		||||
	test.TestGet(validNewReplicaSet())
 | 
			
		||||
}
 | 
			
		||||
@@ -202,6 +207,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.ReplicaSet.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.ReplicaSet.Store)
 | 
			
		||||
	test.TestList(validNewReplicaSet())
 | 
			
		||||
}
 | 
			
		||||
@@ -209,6 +215,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.ReplicaSet.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.ReplicaSet.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewReplicaSet(),
 | 
			
		||||
@@ -241,6 +248,7 @@ func TestWatch(t *testing.T) {
 | 
			
		||||
func TestScaleGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.ReplicaSet.Store.DestroyFunc()
 | 
			
		||||
 | 
			
		||||
	name := "foo"
 | 
			
		||||
 | 
			
		||||
@@ -280,6 +288,7 @@ func TestScaleGet(t *testing.T) {
 | 
			
		||||
func TestScaleUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.ReplicaSet.Store.DestroyFunc()
 | 
			
		||||
 | 
			
		||||
	name := "foo"
 | 
			
		||||
 | 
			
		||||
@@ -324,6 +333,7 @@ func TestScaleUpdate(t *testing.T) {
 | 
			
		||||
func TestStatusUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.ReplicaSet.Store.DestroyFunc()
 | 
			
		||||
 | 
			
		||||
	ctx := api.WithNamespace(api.NewContext(), api.NamespaceDefault)
 | 
			
		||||
	key := etcdtest.AddPrefix("/replicasets/" + api.NamespaceDefault + "/foo")
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.ResourceQuotaList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.ResourceQuotas),
 | 
			
		||||
		&api.ResourceQuota{},
 | 
			
		||||
@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		ReturnDeletedObject: true,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
 
 | 
			
		||||
@@ -60,6 +60,7 @@ func validNewResourceQuota() *api.ResourceQuota {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	resourcequota := validNewResourceQuota()
 | 
			
		||||
	resourcequota.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -76,6 +77,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestCreateSetsFields(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
	resourcequota := validNewResourceQuota()
 | 
			
		||||
	_, err := storage.Create(api.NewDefaultContext(), resourcequota)
 | 
			
		||||
@@ -99,6 +101,7 @@ func TestCreateSetsFields(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ReturnDeletedObject()
 | 
			
		||||
	test.TestDelete(validNewResourceQuota())
 | 
			
		||||
}
 | 
			
		||||
@@ -106,6 +109,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewResourceQuota())
 | 
			
		||||
}
 | 
			
		||||
@@ -113,6 +117,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewResourceQuota())
 | 
			
		||||
}
 | 
			
		||||
@@ -120,6 +125,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewResourceQuota(),
 | 
			
		||||
@@ -143,6 +149,7 @@ func TestWatch(t *testing.T) {
 | 
			
		||||
func TestUpdateStatus(t *testing.T) {
 | 
			
		||||
	storage, status, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	ctx := api.NewDefaultContext()
 | 
			
		||||
 | 
			
		||||
	key, _ := storage.KeyFunc(ctx, "foo")
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &rbac.RoleList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Roles),
 | 
			
		||||
		&rbac.Role{},
 | 
			
		||||
@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		DeleteStrategy: role.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &rbac.RoleBindingList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.RoleBindings),
 | 
			
		||||
		&rbac.RoleBinding{},
 | 
			
		||||
@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		DeleteStrategy: rolebinding.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &batch.ScheduledJobList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.ScheduledJobs),
 | 
			
		||||
		&batch.ScheduledJob{},
 | 
			
		||||
@@ -80,6 +80,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		DeleteStrategy: scheduledjob.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	validScheduledJob := validNewScheduledJob()
 | 
			
		||||
	validScheduledJob.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -91,6 +92,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	schedule := "1 1 1 1 ?"
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
@@ -119,6 +121,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewScheduledJob())
 | 
			
		||||
}
 | 
			
		||||
@@ -131,6 +134,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewScheduledJob())
 | 
			
		||||
}
 | 
			
		||||
@@ -143,6 +147,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewScheduledJob())
 | 
			
		||||
}
 | 
			
		||||
@@ -155,6 +160,7 @@ func TestWatch(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewScheduledJob(),
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.SecretList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Secrets),
 | 
			
		||||
		&api.Secret{},
 | 
			
		||||
@@ -66,6 +66,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		DeleteStrategy: secret.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,7 @@ func validNewSecret(name string) *api.Secret {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	secret := validNewSecret("foo")
 | 
			
		||||
	secret.ObjectMeta = api.ObjectMeta{GenerateName: "foo-"}
 | 
			
		||||
@@ -71,6 +72,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -87,6 +89,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewSecret("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -94,6 +97,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewSecret("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -101,6 +105,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewSecret("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -108,6 +113,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewSecret("foo"),
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.ServiceList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.Services),
 | 
			
		||||
		&api.Service{},
 | 
			
		||||
@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
 | 
			
		||||
		ExportStrategy: service.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	statusStore := *store
 | 
			
		||||
	statusStore.UpdateStrategy = service.StatusStrategy
 | 
			
		||||
 
 | 
			
		||||
@@ -59,6 +59,7 @@ func validService() *api.Service {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	validService := validService()
 | 
			
		||||
	validService.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -89,6 +90,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).AllowCreateOnUpdate()
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -114,6 +116,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).AllowCreateOnUpdate()
 | 
			
		||||
	test.TestDelete(validService())
 | 
			
		||||
}
 | 
			
		||||
@@ -121,6 +124,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).AllowCreateOnUpdate()
 | 
			
		||||
	test.TestGet(validService())
 | 
			
		||||
}
 | 
			
		||||
@@ -128,6 +132,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).AllowCreateOnUpdate()
 | 
			
		||||
	test.TestList(validService())
 | 
			
		||||
}
 | 
			
		||||
@@ -135,6 +140,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, _, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validService(),
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &api.ServiceAccountList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.ServiceAccounts),
 | 
			
		||||
		&api.ServiceAccount{},
 | 
			
		||||
@@ -67,6 +67,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		ReturnDeletedObject: true,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -47,6 +47,7 @@ func validNewServiceAccount(name string) *api.ServiceAccount {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	serviceAccount := validNewServiceAccount("foo")
 | 
			
		||||
	serviceAccount.ObjectMeta = api.ObjectMeta{GenerateName: "foo-"}
 | 
			
		||||
@@ -64,6 +65,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -80,6 +82,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ReturnDeletedObject()
 | 
			
		||||
	test.TestDelete(validNewServiceAccount("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -87,6 +90,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewServiceAccount("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -94,6 +98,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewServiceAccount("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -101,6 +106,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewServiceAccount("foo"),
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	newListFunc := func() runtime.Object { return &storageapi.StorageClassList{} }
 | 
			
		||||
	storageInterface, _ := opts.Decorator(
 | 
			
		||||
	storageInterface, dFunc := opts.Decorator(
 | 
			
		||||
		opts.StorageConfig,
 | 
			
		||||
		cachesize.GetWatchCacheSizeByResource(cachesize.StorageClasses),
 | 
			
		||||
		&storageapi.StorageClass{},
 | 
			
		||||
@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		ReturnDeletedObject: true,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
 
 | 
			
		||||
@@ -55,6 +55,7 @@ func validChangedStorageClass() *storageapi.StorageClass {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	storageClass := validNewStorageClass("foo")
 | 
			
		||||
	storageClass.ObjectMeta = api.ObjectMeta{GenerateName: "foo"}
 | 
			
		||||
@@ -71,6 +72,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -94,6 +96,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope().ReturnDeletedObject()
 | 
			
		||||
	test.TestDelete(validNewStorageClass("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -101,6 +104,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestGet(validNewStorageClass("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -108,6 +112,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestList(validNewStorageClass("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -115,6 +120,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope()
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewStorageClass("foo"),
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
	prefix := "/" + opts.ResourcePrefix
 | 
			
		||||
 | 
			
		||||
	// We explicitly do NOT do any decoration here yet.
 | 
			
		||||
	storageInterface, _ := generic.NewRawStorage(opts.StorageConfig)
 | 
			
		||||
	storageInterface, dFunc := generic.NewRawStorage(opts.StorageConfig)
 | 
			
		||||
 | 
			
		||||
	store := ®istry.Store{
 | 
			
		||||
		NewFunc:     func() runtime.Object { return &extensions.ThirdPartyResource{} },
 | 
			
		||||
@@ -57,6 +57,7 @@ func NewREST(opts generic.RESTOptions) *REST {
 | 
			
		||||
		DeleteStrategy:          thirdpartyresource.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &REST{store}
 | 
			
		||||
 
 | 
			
		||||
@@ -58,6 +58,7 @@ func namer(i int) string {
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope().Namer(namer).GeneratesName()
 | 
			
		||||
	rsrc := validNewThirdPartyResource("kind.domain.tld")
 | 
			
		||||
	test.TestCreate(
 | 
			
		||||
@@ -75,6 +76,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope().Namer(namer)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -91,6 +93,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope().Namer(namer)
 | 
			
		||||
	test.TestDelete(validNewThirdPartyResource("kind.domain.tld"))
 | 
			
		||||
}
 | 
			
		||||
@@ -98,6 +101,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope().Namer(namer)
 | 
			
		||||
	test.TestGet(validNewThirdPartyResource("kind.domain.tld"))
 | 
			
		||||
}
 | 
			
		||||
@@ -105,6 +109,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope().Namer(namer)
 | 
			
		||||
	test.TestList(validNewThirdPartyResource("kind.domain.tld"))
 | 
			
		||||
}
 | 
			
		||||
@@ -112,6 +117,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store).ClusterScope().Namer(namer)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewThirdPartyResource("kind.domain.tld"),
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ func NewREST(opts generic.RESTOptions, group, kind string) *REST {
 | 
			
		||||
	prefix := "/ThirdPartyResourceData/" + group + "/" + strings.ToLower(kind) + "s"
 | 
			
		||||
 | 
			
		||||
	// We explicitly do NOT do any decoration here yet.
 | 
			
		||||
	storageInterface, _ := generic.NewRawStorage(opts.StorageConfig)
 | 
			
		||||
	storageInterface, dFunc := generic.NewRawStorage(opts.StorageConfig)
 | 
			
		||||
 | 
			
		||||
	store := ®istry.Store{
 | 
			
		||||
		NewFunc:     func() runtime.Object { return &extensions.ThirdPartyResourceData{} },
 | 
			
		||||
@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions, group, kind string) *REST {
 | 
			
		||||
		DeleteStrategy:          thirdpartyresourcedata.Strategy,
 | 
			
		||||
 | 
			
		||||
		Storage:     storageInterface,
 | 
			
		||||
		DestroyFunc: dFunc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &REST{
 | 
			
		||||
 
 | 
			
		||||
@@ -50,6 +50,7 @@ func validNewThirdPartyResourceData(name string) *extensions.ThirdPartyResourceD
 | 
			
		||||
func TestCreate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	rsrc := validNewThirdPartyResourceData("foo")
 | 
			
		||||
	rsrc.ObjectMeta = api.ObjectMeta{}
 | 
			
		||||
@@ -64,6 +65,7 @@ func TestCreate(t *testing.T) {
 | 
			
		||||
func TestUpdate(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestUpdate(
 | 
			
		||||
		// valid
 | 
			
		||||
@@ -80,6 +82,7 @@ func TestUpdate(t *testing.T) {
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestDelete(validNewThirdPartyResourceData("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -87,6 +90,7 @@ func TestDelete(t *testing.T) {
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestGet(validNewThirdPartyResourceData("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -94,6 +98,7 @@ func TestGet(t *testing.T) {
 | 
			
		||||
func TestList(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestList(validNewThirdPartyResourceData("foo"))
 | 
			
		||||
}
 | 
			
		||||
@@ -101,6 +106,7 @@ func TestList(t *testing.T) {
 | 
			
		||||
func TestWatch(t *testing.T) {
 | 
			
		||||
	storage, server := newStorage(t)
 | 
			
		||||
	defer server.Terminate(t)
 | 
			
		||||
	defer storage.Store.DestroyFunc()
 | 
			
		||||
	test := registrytest.New(t, storage.Store)
 | 
			
		||||
	test.TestWatch(
 | 
			
		||||
		validNewThirdPartyResourceData("foo"),
 | 
			
		||||
 
 | 
			
		||||
@@ -27,12 +27,16 @@ import (
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage/etcd/etcdtest"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage/etcd/testing/testingcert"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/storage/storagebackend"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/wait"
 | 
			
		||||
 | 
			
		||||
	etcd "github.com/coreos/etcd/client"
 | 
			
		||||
	"github.com/coreos/etcd/clientv3"
 | 
			
		||||
	"github.com/coreos/etcd/etcdserver"
 | 
			
		||||
	"github.com/coreos/etcd/etcdserver/api/v2http"
 | 
			
		||||
	"github.com/coreos/etcd/integration"
 | 
			
		||||
	"github.com/coreos/etcd/pkg/testutil"
 | 
			
		||||
	"github.com/coreos/etcd/pkg/transport"
 | 
			
		||||
	"github.com/coreos/etcd/pkg/types"
 | 
			
		||||
@@ -42,6 +46,8 @@ import (
 | 
			
		||||
 | 
			
		||||
// EtcdTestServer encapsulates the datastructures needed to start local instance for testing
 | 
			
		||||
type EtcdTestServer struct {
 | 
			
		||||
	// The following are lumped etcd2 test server params
 | 
			
		||||
	// TODO: Deprecate in a post 1.5 release
 | 
			
		||||
	etcdserver.ServerConfig
 | 
			
		||||
	PeerListeners, ClientListeners []net.Listener
 | 
			
		||||
	Client                         etcd.Client
 | 
			
		||||
@@ -54,6 +60,10 @@ type EtcdTestServer struct {
 | 
			
		||||
	raftHandler http.Handler
 | 
			
		||||
	s           *etcdserver.EtcdServer
 | 
			
		||||
	hss         []*httptest.Server
 | 
			
		||||
 | 
			
		||||
	// The following are lumped etcd3 test server params
 | 
			
		||||
	v3Cluster *integration.ClusterV3
 | 
			
		||||
	v3Client  *clientv3.Client
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// newLocalListener opens a port localhost using any port
 | 
			
		||||
@@ -219,6 +229,9 @@ func (m *EtcdTestServer) waitUntilUp() error {
 | 
			
		||||
 | 
			
		||||
// Terminate will shutdown the running etcd server
 | 
			
		||||
func (m *EtcdTestServer) Terminate(t *testing.T) {
 | 
			
		||||
	if m.v3Cluster != nil {
 | 
			
		||||
		m.v3Cluster.Terminate(t)
 | 
			
		||||
	} else {
 | 
			
		||||
		m.Client = nil
 | 
			
		||||
		m.s.Stop()
 | 
			
		||||
		// TODO: This is a pretty ugly hack to workaround races during closing
 | 
			
		||||
@@ -241,8 +254,9 @@ func (m *EtcdTestServer) Terminate(t *testing.T) {
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewEtcdTestClientServer creates a new client and server for testing
 | 
			
		||||
// NewEtcdTestClientServer DEPRECATED creates a new client and server for testing
 | 
			
		||||
func NewEtcdTestClientServer(t *testing.T) *EtcdTestServer {
 | 
			
		||||
	server := configureTestCluster(t, "foo", true)
 | 
			
		||||
	err := server.launch(t)
 | 
			
		||||
@@ -269,7 +283,7 @@ func NewEtcdTestClientServer(t *testing.T) *EtcdTestServer {
 | 
			
		||||
	return server
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewUnsecuredEtcdTestClientServer creates a new client and server for testing
 | 
			
		||||
// NewUnsecuredEtcdTestClientServer DEPRECATED creates a new client and server for testing
 | 
			
		||||
func NewUnsecuredEtcdTestClientServer(t *testing.T) *EtcdTestServer {
 | 
			
		||||
	server := configureTestCluster(t, "foo", false)
 | 
			
		||||
	err := server.launch(t)
 | 
			
		||||
@@ -294,3 +308,18 @@ func NewUnsecuredEtcdTestClientServer(t *testing.T) *EtcdTestServer {
 | 
			
		||||
	}
 | 
			
		||||
	return server
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewEtcd3TestClientServer creates a new client and server for testing
 | 
			
		||||
func NewUnsecuredEtcd3TestClientServer(t *testing.T) (*EtcdTestServer, *storagebackend.Config) {
 | 
			
		||||
	server := &EtcdTestServer{
 | 
			
		||||
		v3Cluster: integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}),
 | 
			
		||||
	}
 | 
			
		||||
	server.v3Client = server.v3Cluster.RandClient()
 | 
			
		||||
	config := &storagebackend.Config{
 | 
			
		||||
		Type:                     "etcd3",
 | 
			
		||||
		Prefix:                   etcdtest.PathPrefix(),
 | 
			
		||||
		ServerList:               server.v3Client.Endpoints(),
 | 
			
		||||
		DeserializationCacheSize: etcdtest.DeserializationCacheSize,
 | 
			
		||||
	}
 | 
			
		||||
	return server, config
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,11 @@ func newETCD3Storage(c storagebackend.Config) (storage.Interface, DestroyFunc, e
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// NOTE: Client relies on nil tlsConfig
 | 
			
		||||
	// for non-secure connections, update the implicit variable
 | 
			
		||||
	if len(c.CertFile) == 0 && len(c.KeyFile) == 0 && len(c.CAFile) == 0 {
 | 
			
		||||
		tlsConfig = nil
 | 
			
		||||
	}
 | 
			
		||||
	cfg := clientv3.Config{
 | 
			
		||||
		Endpoints: c.ServerList,
 | 
			
		||||
		TLS:       tlsConfig,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user