fed: Update crud integration test to use the the adapter registry

This commit is contained in:
Maru Newby 2017-04-06 19:57:31 -07:00
parent 3e4236d545
commit 6f061f7962
7 changed files with 42 additions and 87 deletions

View File

@ -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)
}

View File

@ -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 {

View File

@ -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",

View File

@ -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)

View File

@ -14,7 +14,6 @@ go_library(
"controller.go",
"crudtester.go",
"federation.go",
"secret.go",
"util.go",
],
tags = ["automanaged"],

View File

@ -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)
}

View File

@ -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
}