mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
fed: Update crud integration test to use the the adapter registry
This commit is contained in:
parent
3e4236d545
commit
6f061f7962
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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",
|
||||
|
@ -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)
|
||||
|
@ -14,7 +14,6 @@ go_library(
|
||||
"controller.go",
|
||||
"crudtester.go",
|
||||
"federation.go",
|
||||
"secret.go",
|
||||
"util.go",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
Loading…
Reference in New Issue
Block a user