mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +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
|
// StartSecretController starts a new secret controller
|
||||||
func StartSecretController(config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) {
|
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
|
// newSecretController returns a new secret controller
|
||||||
@ -103,16 +103,16 @@ func newSecretController(client federationclientset.Interface) *FederationSyncCo
|
|||||||
return newFederationSyncController(client, typeadapters.NewSecretAdapter(client))
|
return newFederationSyncController(client, typeadapters.NewSecretAdapter(client))
|
||||||
}
|
}
|
||||||
|
|
||||||
// startFederationSyncController starts a new sync controller for the given type adapter
|
// StartFederationSyncController starts a new sync controller for a type adapter
|
||||||
func startFederationSyncController(adapter typeadapters.FederatedTypeAdapter, config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) {
|
func StartFederationSyncController(kind string, adapterFactory typeadapters.AdapterFactory, config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) {
|
||||||
restclient.AddUserAgent(config, fmt.Sprintf("%s-controller", adapter.Kind()))
|
restclient.AddUserAgent(config, fmt.Sprintf("%s-controller", kind))
|
||||||
client := federationclientset.NewForConfigOrDie(config)
|
client := federationclientset.NewForConfigOrDie(config)
|
||||||
adapter.SetClient(client)
|
adapter := adapterFactory(client)
|
||||||
controller := newFederationSyncController(client, adapter)
|
controller := newFederationSyncController(client, adapter)
|
||||||
if minimizeLatency {
|
if minimizeLatency {
|
||||||
controller.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)
|
controller.Run(stopChan)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,10 +27,10 @@ import (
|
|||||||
kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
||||||
)
|
)
|
||||||
|
|
||||||
const secretKind = "secret"
|
const SecretKind = "secret"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
RegisterAdapterFactory(secretKind, NewSecretAdapter)
|
RegisterAdapterFactory(SecretKind, NewSecretAdapter)
|
||||||
}
|
}
|
||||||
|
|
||||||
type SecretAdapter struct {
|
type SecretAdapter struct {
|
||||||
@ -42,7 +42,7 @@ func NewSecretAdapter(client federationclientset.Interface) FederatedTypeAdapter
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *SecretAdapter) Kind() string {
|
func (a *SecretAdapter) Kind() string {
|
||||||
return secretKind
|
return SecretKind
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *SecretAdapter) ObjectType() pkgruntime.Object {
|
func (a *SecretAdapter) ObjectType() pkgruntime.Object {
|
||||||
|
@ -16,6 +16,7 @@ go_test(
|
|||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
"//federation/apis/federation/v1beta1:go_default_library",
|
"//federation/apis/federation/v1beta1:go_default_library",
|
||||||
|
"//federation/pkg/typeadapters:go_default_library",
|
||||||
"//pkg/api/v1:go_default_library",
|
"//pkg/api/v1:go_default_library",
|
||||||
"//pkg/apis/autoscaling/v1:go_default_library",
|
"//pkg/apis/autoscaling/v1:go_default_library",
|
||||||
"//pkg/apis/batch/v1:go_default_library",
|
"//pkg/apis/batch/v1:go_default_library",
|
||||||
|
@ -17,10 +17,12 @@ limitations under the License.
|
|||||||
package federation
|
package federation
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/pborman/uuid"
|
"github.com/pborman/uuid"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/federation/pkg/typeadapters"
|
||||||
"k8s.io/kubernetes/test/integration/federation/framework"
|
"k8s.io/kubernetes/test/integration/federation/framework"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -30,15 +32,15 @@ func TestFederationCRUD(t *testing.T) {
|
|||||||
fedFixture.SetUp(t)
|
fedFixture.SetUp(t)
|
||||||
defer fedFixture.TearDown(t)
|
defer fedFixture.TearDown(t)
|
||||||
|
|
||||||
controllerFixtures := []framework.ControllerFixture{
|
for kind, adapterFactory := range typeadapters.AdapterFactories() {
|
||||||
&framework.SecretFixture{},
|
t.Run(kind, func(t *testing.T) {
|
||||||
}
|
config := fedFixture.APIFixture.NewConfig()
|
||||||
for _, fixture := range controllerFixtures {
|
fixture := framework.NewControllerFixture(t, kind, adapterFactory, config)
|
||||||
t.Run(fixture.Kind(), func(t *testing.T) {
|
|
||||||
framework.SetUpControllerFixture(t, fedFixture.APIFixture, fixture)
|
|
||||||
defer fixture.TearDown(t)
|
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)
|
crudtester := framework.NewFederatedTypeCRUDTester(t, adapter, fedFixture.ClusterClients)
|
||||||
obj := adapter.NewTestObject(uuid.New())
|
obj := adapter.NewTestObject(uuid.New())
|
||||||
crudtester.CheckLifecycle(obj)
|
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 true": &orphanedDependents,
|
||||||
"Resources should not be deleted from underlying clusters when OrphanDependents is nil": nil,
|
"Resources should not be deleted from underlying clusters when OrphanDependents is nil": nil,
|
||||||
}
|
}
|
||||||
|
kind := typeadapters.SecretKind
|
||||||
|
adapterFactory := typeadapters.NewSecretAdapter
|
||||||
for testName, orphanDependents := range testCases {
|
for testName, orphanDependents := range testCases {
|
||||||
t.Run(testName, func(t *testing.T) {
|
t.Run(testName, func(t *testing.T) {
|
||||||
fixture := &framework.SecretFixture{}
|
config := fedFixture.APIFixture.NewConfig()
|
||||||
framework.SetUpControllerFixture(t, fedFixture.APIFixture, fixture)
|
fixture := framework.NewControllerFixture(t, kind, adapterFactory, config)
|
||||||
defer fixture.TearDown(t)
|
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)
|
crudtester := framework.NewFederatedTypeCRUDTester(t, adapter, fedFixture.ClusterClients)
|
||||||
obj := adapter.NewTestObject(uuid.New())
|
obj := adapter.NewTestObject(uuid.New())
|
||||||
updatedObj := crudtester.CheckCreate(obj)
|
updatedObj := crudtester.CheckCreate(obj)
|
||||||
|
@ -14,7 +14,6 @@ go_library(
|
|||||||
"controller.go",
|
"controller.go",
|
||||||
"crudtester.go",
|
"crudtester.go",
|
||||||
"federation.go",
|
"federation.go",
|
||||||
"secret.go",
|
|
||||||
"util.go",
|
"util.go",
|
||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
|
@ -17,30 +17,28 @@ limitations under the License.
|
|||||||
package framework
|
package framework
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
restclient "k8s.io/client-go/rest"
|
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"
|
"k8s.io/kubernetes/federation/pkg/typeadapters"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ControllerFixture defines operations for managing a federation
|
// ControllerFixture manages a federation controller for testing.
|
||||||
// controller. Tests written to this interface can then target any
|
type ControllerFixture struct {
|
||||||
// controller for which an implementation of this interface exists.
|
stopChan chan struct{}
|
||||||
type ControllerFixture interface {
|
|
||||||
TestFixture
|
|
||||||
|
|
||||||
SetUp(t *testing.T, testClient federationclientset.Interface, config *restclient.Config)
|
|
||||||
|
|
||||||
Kind() string
|
|
||||||
|
|
||||||
Adapter() typeadapters.FederatedTypeAdapter
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetUpControllerFixture configures the given resource fixture to target the provided api fixture
|
// NewControllerFixture initializes a new controller fixture
|
||||||
func SetUpControllerFixture(t *testing.T, apiFixture *FederationAPIFixture, controllerFixture ControllerFixture) {
|
func NewControllerFixture(t *testing.T, kind string, adapterFactory typeadapters.AdapterFactory, config *restclient.Config) *ControllerFixture {
|
||||||
client := apiFixture.NewClient(fmt.Sprintf("test-%s", controllerFixture.Kind()))
|
f := &ControllerFixture{
|
||||||
config := apiFixture.NewConfig()
|
stopChan: make(chan struct{}),
|
||||||
controllerFixture.SetUp(t, client, config)
|
}
|
||||||
|
// 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