From 6f061f7962509572e1676c110390cc2618fbcb72 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Thu, 6 Apr 2017 19:57:31 -0700 Subject: [PATCH] fed: Update crud integration test to use the the adapter registry --- .../secret/secret_controller.go | 12 ++--- federation/pkg/typeadapters/secret.go | 6 +-- test/integration/federation/BUILD | 1 + test/integration/federation/crud_test.go | 26 ++++++---- test/integration/federation/framework/BUILD | 1 - .../federation/framework/controller.go | 34 ++++++------- .../federation/framework/secret.go | 49 ------------------- 7 files changed, 42 insertions(+), 87 deletions(-) delete mode 100644 test/integration/federation/framework/secret.go diff --git a/federation/pkg/federation-controller/secret/secret_controller.go b/federation/pkg/federation-controller/secret/secret_controller.go index 7f7dce885c1..ce83d41d43d 100644 --- a/federation/pkg/federation-controller/secret/secret_controller.go +++ b/federation/pkg/federation-controller/secret/secret_controller.go @@ -95,7 +95,7 @@ type FederationSyncController struct { // StartSecretController starts a new secret controller func StartSecretController(config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { - startFederationSyncController(&typeadapters.SecretAdapter{}, config, stopChan, minimizeLatency) + StartFederationSyncController(typeadapters.SecretKind, typeadapters.NewSecretAdapter, config, stopChan, minimizeLatency) } // newSecretController returns a new secret controller @@ -103,16 +103,16 @@ func newSecretController(client federationclientset.Interface) *FederationSyncCo return newFederationSyncController(client, typeadapters.NewSecretAdapter(client)) } -// startFederationSyncController starts a new sync controller for the given type adapter -func startFederationSyncController(adapter typeadapters.FederatedTypeAdapter, config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { - restclient.AddUserAgent(config, fmt.Sprintf("%s-controller", adapter.Kind())) +// StartFederationSyncController starts a new sync controller for a type adapter +func StartFederationSyncController(kind string, adapterFactory typeadapters.AdapterFactory, config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { + restclient.AddUserAgent(config, fmt.Sprintf("%s-controller", kind)) client := federationclientset.NewForConfigOrDie(config) - adapter.SetClient(client) + adapter := adapterFactory(client) controller := newFederationSyncController(client, adapter) if minimizeLatency { controller.minimizeLatency() } - glog.Infof(fmt.Sprintf("Starting federated sync controller for %s resources", adapter.Kind())) + glog.Infof(fmt.Sprintf("Starting federated sync controller for %s resources", kind)) controller.Run(stopChan) } diff --git a/federation/pkg/typeadapters/secret.go b/federation/pkg/typeadapters/secret.go index 1d467405163..6d2c391bb62 100644 --- a/federation/pkg/typeadapters/secret.go +++ b/federation/pkg/typeadapters/secret.go @@ -27,10 +27,10 @@ import ( kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ) -const secretKind = "secret" +const SecretKind = "secret" func init() { - RegisterAdapterFactory(secretKind, NewSecretAdapter) + RegisterAdapterFactory(SecretKind, NewSecretAdapter) } type SecretAdapter struct { @@ -42,7 +42,7 @@ func NewSecretAdapter(client federationclientset.Interface) FederatedTypeAdapter } func (a *SecretAdapter) Kind() string { - return secretKind + return SecretKind } func (a *SecretAdapter) ObjectType() pkgruntime.Object { diff --git a/test/integration/federation/BUILD b/test/integration/federation/BUILD index 23c93e90acc..a4a47992a91 100644 --- a/test/integration/federation/BUILD +++ b/test/integration/federation/BUILD @@ -16,6 +16,7 @@ go_test( tags = ["automanaged"], deps = [ "//federation/apis/federation/v1beta1:go_default_library", + "//federation/pkg/typeadapters:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/autoscaling/v1:go_default_library", "//pkg/apis/batch/v1:go_default_library", diff --git a/test/integration/federation/crud_test.go b/test/integration/federation/crud_test.go index ce058b5e4c2..3e335e70a17 100644 --- a/test/integration/federation/crud_test.go +++ b/test/integration/federation/crud_test.go @@ -17,10 +17,12 @@ limitations under the License. package federation import ( + "fmt" "testing" "github.com/pborman/uuid" + "k8s.io/kubernetes/federation/pkg/typeadapters" "k8s.io/kubernetes/test/integration/federation/framework" ) @@ -30,15 +32,15 @@ func TestFederationCRUD(t *testing.T) { fedFixture.SetUp(t) defer fedFixture.TearDown(t) - controllerFixtures := []framework.ControllerFixture{ - &framework.SecretFixture{}, - } - for _, fixture := range controllerFixtures { - t.Run(fixture.Kind(), func(t *testing.T) { - framework.SetUpControllerFixture(t, fedFixture.APIFixture, fixture) + for kind, adapterFactory := range typeadapters.AdapterFactories() { + t.Run(kind, func(t *testing.T) { + config := fedFixture.APIFixture.NewConfig() + fixture := framework.NewControllerFixture(t, kind, adapterFactory, config) defer fixture.TearDown(t) - adapter := fixture.Adapter() + client := fedFixture.APIFixture.NewClient(fmt.Sprintf("crud-test-%s", kind)) + adapter := adapterFactory(client) + crudtester := framework.NewFederatedTypeCRUDTester(t, adapter, fedFixture.ClusterClients) obj := adapter.NewTestObject(uuid.New()) crudtester.CheckLifecycle(obj) @@ -52,13 +54,17 @@ func TestFederationCRUD(t *testing.T) { "Resources should not be deleted from underlying clusters when OrphanDependents is true": &orphanedDependents, "Resources should not be deleted from underlying clusters when OrphanDependents is nil": nil, } + kind := typeadapters.SecretKind + adapterFactory := typeadapters.NewSecretAdapter for testName, orphanDependents := range testCases { t.Run(testName, func(t *testing.T) { - fixture := &framework.SecretFixture{} - framework.SetUpControllerFixture(t, fedFixture.APIFixture, fixture) + config := fedFixture.APIFixture.NewConfig() + fixture := framework.NewControllerFixture(t, kind, adapterFactory, config) defer fixture.TearDown(t) - adapter := fixture.Adapter() + client := fedFixture.APIFixture.NewClient(fmt.Sprintf("deletion-test-%s", kind)) + adapter := adapterFactory(client) + crudtester := framework.NewFederatedTypeCRUDTester(t, adapter, fedFixture.ClusterClients) obj := adapter.NewTestObject(uuid.New()) updatedObj := crudtester.CheckCreate(obj) diff --git a/test/integration/federation/framework/BUILD b/test/integration/federation/framework/BUILD index e601b5c8b2f..6f05a241c0a 100644 --- a/test/integration/federation/framework/BUILD +++ b/test/integration/federation/framework/BUILD @@ -14,7 +14,6 @@ go_library( "controller.go", "crudtester.go", "federation.go", - "secret.go", "util.go", ], tags = ["automanaged"], diff --git a/test/integration/federation/framework/controller.go b/test/integration/federation/framework/controller.go index ce4633a845b..817f695585d 100644 --- a/test/integration/federation/framework/controller.go +++ b/test/integration/federation/framework/controller.go @@ -17,30 +17,28 @@ limitations under the License. package framework import ( - "fmt" "testing" restclient "k8s.io/client-go/rest" - federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" + secretcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/secret" "k8s.io/kubernetes/federation/pkg/typeadapters" ) -// ControllerFixture defines operations for managing a federation -// controller. Tests written to this interface can then target any -// controller for which an implementation of this interface exists. -type ControllerFixture interface { - TestFixture - - SetUp(t *testing.T, testClient federationclientset.Interface, config *restclient.Config) - - Kind() string - - Adapter() typeadapters.FederatedTypeAdapter +// ControllerFixture manages a federation controller for testing. +type ControllerFixture struct { + stopChan chan struct{} } -// SetUpControllerFixture configures the given resource fixture to target the provided api fixture -func SetUpControllerFixture(t *testing.T, apiFixture *FederationAPIFixture, controllerFixture ControllerFixture) { - client := apiFixture.NewClient(fmt.Sprintf("test-%s", controllerFixture.Kind())) - config := apiFixture.NewConfig() - controllerFixture.SetUp(t, client, config) +// NewControllerFixture initializes a new controller fixture +func NewControllerFixture(t *testing.T, kind string, adapterFactory typeadapters.AdapterFactory, config *restclient.Config) *ControllerFixture { + f := &ControllerFixture{ + stopChan: make(chan struct{}), + } + // TODO the generic controller doesn't belong in the secretcontroller package + secretcontroller.StartFederationSyncController(kind, adapterFactory, config, f.stopChan, true) + return f +} + +func (f *ControllerFixture) TearDown(t *testing.T) { + close(f.stopChan) } diff --git a/test/integration/federation/framework/secret.go b/test/integration/federation/framework/secret.go deleted file mode 100644 index f24c364b05a..00000000000 --- a/test/integration/federation/framework/secret.go +++ /dev/null @@ -1,49 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package framework - -import ( - "testing" - - restclient "k8s.io/client-go/rest" - federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" - secretcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/secret" - "k8s.io/kubernetes/federation/pkg/typeadapters" -) - -type SecretFixture struct { - adapter typeadapters.FederatedTypeAdapter - stopChan chan struct{} -} - -func (f *SecretFixture) SetUp(t *testing.T, client federationclientset.Interface, config *restclient.Config) { - f.adapter = typeadapters.NewSecretAdapter(client) - f.stopChan = make(chan struct{}) - secretcontroller.StartSecretController(config, f.stopChan, true) -} - -func (f *SecretFixture) TearDown(t *testing.T) { - close(f.stopChan) -} -func (f *SecretFixture) Kind() string { - adapter := &typeadapters.SecretAdapter{} - return adapter.Kind() -} - -func (f *SecretFixture) Adapter() typeadapters.FederatedTypeAdapter { - return f.adapter -}