Merge pull request #46071 from emaildanwilson/fedClusterSelectorIntegration

Automatic merge from submit-queue

[Federation] ClusterSelector Integration Testing

This pull request adds integration testing for the federated ClusterSelector ref: design #29887 merged pull #40234

cc: @nikhiljindal @marun
This commit is contained in:
Kubernetes Submit Queue
2017-05-21 23:18:44 -07:00
committed by GitHub
3 changed files with 46 additions and 11 deletions

View File

@@ -23,6 +23,7 @@ import (
"github.com/pborman/uuid"
pkgruntime "k8s.io/apimachinery/pkg/runtime"
federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1"
"k8s.io/kubernetes/federation/pkg/federatedtypes"
"k8s.io/kubernetes/federation/pkg/federatedtypes/crudtester"
"k8s.io/kubernetes/test/integration/federation/framework"
@@ -37,7 +38,7 @@ func TestFederationCRUD(t *testing.T) {
federatedTypes := federatedtypes.FederatedTypes()
for kind, fedType := range federatedTypes {
t.Run(kind, func(t *testing.T) {
fixture, crudTester, obj := initCRUDTest(t, &fedFixture, fedType.AdapterFactory, kind)
fixture, crudTester, obj, _ := initCRUDTest(t, &fedFixture, fedType.AdapterFactory, kind)
defer fixture.TearDown(t)
crudTester.CheckLifecycle(obj)
@@ -56,7 +57,7 @@ func TestFederationCRUD(t *testing.T) {
}
for testName, orphanDependents := range testCases {
t.Run(testName, func(t *testing.T) {
fixture, crudTester, obj := initCRUDTest(t, &fedFixture, adapterFactory, kind)
fixture, crudTester, obj, _ := initCRUDTest(t, &fedFixture, adapterFactory, kind)
defer fixture.TearDown(t)
updatedObj := crudTester.CheckCreate(obj)
@@ -65,20 +66,40 @@ func TestFederationCRUD(t *testing.T) {
}
t.Run("Resource should be propagated to a newly added cluster", func(t *testing.T) {
fixture, crudTester, obj := initCRUDTest(t, &fedFixture, adapterFactory, kind)
fixture, crudTester, obj, _ := initCRUDTest(t, &fedFixture, adapterFactory, kind)
defer fixture.TearDown(t)
updatedObj := crudTester.CheckCreate(obj)
// Start a new cluster and validate that the resource is propagated to it.
fedFixture.StartCluster(t)
// Check propagation to the new cluster by providing the updated set of clients
crudTester.CheckPropagationForClients(updatedObj, fedFixture.ClusterClients)
objectExpected := true
crudTester.CheckPropagationForClients(updatedObj, fedFixture.ClusterClients, objectExpected)
})
t.Run("Resource should only be propagated to the cluster with a matching selector", func(t *testing.T) {
fixture, crudTester, obj, adapter := initCRUDTest(t, &fedFixture, adapterFactory, kind)
defer fixture.TearDown(t)
// Set an annotation to specify that the object is isolated to cluster 1.
federatedtypes.SetAnnotation(adapter, obj, federationapi.FederationClusterSelectorAnnotation, `[{"key": "cluster", "operator": "==", "values": ["1"]}]`)
updatedObj := crudTester.Create(obj)
// Check propagation to the first cluster
objectExpected := true
crudTester.CheckPropagationForClients(updatedObj, fedFixture.ClusterClients[0:1], objectExpected)
// Verify the object is not sent to the second cluster
objectExpected = false
crudTester.CheckPropagationForClients(updatedObj, fedFixture.ClusterClients[1:2], objectExpected)
})
}
// initCRUDTest initializes common elements of a crud test
func initCRUDTest(t *testing.T, fedFixture *framework.FederationFixture, adapterFactory federatedtypes.AdapterFactory, kind string) (
*framework.ControllerFixture, *crudtester.FederatedTypeCRUDTester, pkgruntime.Object) {
*framework.ControllerFixture, *crudtester.FederatedTypeCRUDTester, pkgruntime.Object, federatedtypes.FederatedTypeAdapter) {
config := fedFixture.APIFixture.NewConfig()
fixture := framework.NewControllerFixture(t, kind, adapterFactory, config)
@@ -89,5 +110,5 @@ func initCRUDTest(t *testing.T, fedFixture *framework.FederationFixture, adapter
obj := adapter.NewTestObject(uuid.New())
return fixture, crudTester, obj
return fixture, crudTester, obj, adapter
}

View File

@@ -92,7 +92,8 @@ func (f *FederationFixture) StartCluster(t *testing.T) {
cluster := &federationapi.Cluster{
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("cluster-%d", clusterId),
Name: fmt.Sprintf("cluster-%d", clusterId),
Labels: map[string]string{"cluster": fmt.Sprintf("%d", clusterId)},
},
Spec: federationapi.ClusterSpec{
ServerAddressByClientCIDRs: []federationapi.ServerAddressByClientCIDR{