Improve e2e tests for Cluster Federation.
This commit is contained in:
		@@ -44,7 +44,7 @@ const (
 | 
				
			|||||||
	KubeAPIQPS   = 20.0
 | 
						KubeAPIQPS   = 20.0
 | 
				
			||||||
	KubeAPIBurst = 30
 | 
						KubeAPIBurst = 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	FederatedServiceTimeout = 5 * time.Minute
 | 
						FederatedServiceTimeout = 60 * time.Second
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	FederatedServiceName = "federated-service"
 | 
						FederatedServiceName = "federated-service"
 | 
				
			||||||
	FederatedServicePod  = "federated-service-test-pod"
 | 
						FederatedServicePod  = "federated-service-test-pod"
 | 
				
			||||||
@@ -52,7 +52,7 @@ const (
 | 
				
			|||||||
	DefaultFederationName = "federation"
 | 
						DefaultFederationName = "federation"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _ = framework.KubeDescribe("Service [Feature:Federation]", func() {
 | 
					var _ = framework.KubeDescribe("[Feature:Federation] Federated Services", func() {
 | 
				
			||||||
	var clusterClientSets []*release_1_3.Clientset
 | 
						var clusterClientSets []*release_1_3.Clientset
 | 
				
			||||||
	var federationName string
 | 
						var federationName string
 | 
				
			||||||
	f := framework.NewDefaultFederatedFramework("service")
 | 
						f := framework.NewDefaultFederatedFramework("service")
 | 
				
			||||||
@@ -68,28 +68,7 @@ var _ = framework.KubeDescribe("Service [Feature:Federation]", func() {
 | 
				
			|||||||
		contexts := f.GetUnderlyingFederatedContexts()
 | 
							contexts := f.GetUnderlyingFederatedContexts()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for _, context := range contexts {
 | 
							for _, context := range contexts {
 | 
				
			||||||
			framework.Logf("Creating cluster object: %s (%s)", context.Name, context.Cluster.Cluster.Server)
 | 
								createClusterObjectOrFail(f, &context)
 | 
				
			||||||
			cluster := federation.Cluster{
 | 
					 | 
				
			||||||
				ObjectMeta: api.ObjectMeta{
 | 
					 | 
				
			||||||
					Name: context.Name,
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				Spec: federation.ClusterSpec{
 | 
					 | 
				
			||||||
					ServerAddressByClientCIDRs: []federation.ServerAddressByClientCIDR{
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							ClientCIDR:    "0.0.0.0/0",
 | 
					 | 
				
			||||||
							ServerAddress: context.Cluster.Cluster.Server,
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					SecretRef: &api.LocalObjectReference{
 | 
					 | 
				
			||||||
						// Note: Name must correlate with federation build script secret name,
 | 
					 | 
				
			||||||
						//       which currently matches the cluster name.
 | 
					 | 
				
			||||||
						//       See federation/cluster/common.sh:132
 | 
					 | 
				
			||||||
						Name: context.Name,
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			_, err := f.FederationClientset.Federation().Clusters().Create(&cluster)
 | 
					 | 
				
			||||||
			framework.ExpectNoError(err, "Creating cluster")
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var clusterList *federation.ClusterList
 | 
							var clusterList *federation.ClusterList
 | 
				
			||||||
@@ -109,6 +88,12 @@ var _ = framework.KubeDescribe("Service [Feature:Federation]", func() {
 | 
				
			|||||||
			framework.Failf("Failed to list registered clusters: %+v", err)
 | 
								framework.Failf("Failed to list registered clusters: %+v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							framework.Logf("Checking that %d clusters are Ready", len(contexts))
 | 
				
			||||||
 | 
							for _, context := range contexts {
 | 
				
			||||||
 | 
								clusterIsReadyOrFail(f, &context)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							framework.Logf("%d clusters are Ready", len(contexts))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for _, cluster := range clusterList.Items {
 | 
							for _, cluster := range clusterList.Items {
 | 
				
			||||||
			framework.Logf("Creating a clientset for the cluster %s", cluster.Name)
 | 
								framework.Logf("Creating a clientset for the cluster %s", cluster.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -240,6 +225,12 @@ func waitForFederatedServiceShard(cs *release_1_3.Clientset, namespace string, s
 | 
				
			|||||||
		clSvc.Spec.ClusterIP = ""
 | 
							clSvc.Spec.ClusterIP = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Expect(clSvc.Name).To(Equal(service.Name))
 | 
							Expect(clSvc.Name).To(Equal(service.Name))
 | 
				
			||||||
 | 
							// Some fields are expected to be different, so make them the same before checking equality.
 | 
				
			||||||
 | 
							clSvc.Spec.ClusterIP = service.Spec.ClusterIP
 | 
				
			||||||
 | 
							clSvc.Spec.ExternalIPs = service.Spec.ExternalIPs
 | 
				
			||||||
 | 
							clSvc.Spec.DeprecatedPublicIPs = service.Spec.DeprecatedPublicIPs
 | 
				
			||||||
 | 
							clSvc.Spec.LoadBalancerIP = service.Spec.LoadBalancerIP
 | 
				
			||||||
 | 
							clSvc.Spec.LoadBalancerSourceRanges = service.Spec.LoadBalancerSourceRanges
 | 
				
			||||||
		Expect(clSvc.Spec).To(Equal(service.Spec))
 | 
							Expect(clSvc.Spec).To(Equal(service.Spec))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -275,7 +266,8 @@ func createService(fcs *federation_release_1_3.Clientset, clusterClientSets []*r
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	nservice, err := fcs.Core().Services(namespace).Create(service)
 | 
						nservice, err := fcs.Core().Services(namespace).Create(service)
 | 
				
			||||||
	Expect(err).NotTo(HaveOccurred())
 | 
						framework.Logf("Trying to create service %q in namespace %q", service.ObjectMeta.Name, service.ObjectMeta.Namespace)
 | 
				
			||||||
 | 
						Expect(err).NotTo(HaveOccurred(), fmt.Sprintf("creating service %s: %+v", service.Name, err))
 | 
				
			||||||
	for _, cs := range clusterClientSets {
 | 
						for _, cs := range clusterClientSets {
 | 
				
			||||||
		waitForFederatedServiceShard(cs, namespace, nservice, 1)
 | 
							waitForFederatedServiceShard(cs, namespace, nservice, 1)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,7 @@ var _ = framework.KubeDescribe("Federation apiserver [Feature:Federation]", func
 | 
				
			|||||||
	f := framework.NewDefaultFederatedFramework("federation-cluster")
 | 
						f := framework.NewDefaultFederatedFramework("federation-cluster")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	AfterEach(func() {
 | 
						AfterEach(func() {
 | 
				
			||||||
		framework.SkipUnlessFederated(f.Client)
 | 
							// framework.SkipUnlessFederated(f.Client)  TODO: quinton-hoole: Temporarily disabled
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Delete registered clusters.
 | 
							// Delete registered clusters.
 | 
				
			||||||
		// This is if a test failed, it should not affect other tests.
 | 
							// This is if a test failed, it should not affect other tests.
 | 
				
			||||||
@@ -52,54 +52,34 @@ var _ = framework.KubeDescribe("Federation apiserver [Feature:Federation]", func
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		contexts := f.GetUnderlyingFederatedContexts()
 | 
							contexts := f.GetUnderlyingFederatedContexts()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							framework.Logf("Creating %d cluster objects", len(contexts))
 | 
				
			||||||
		for _, context := range contexts {
 | 
							for _, context := range contexts {
 | 
				
			||||||
			framework.Logf("Creating cluster object: %s (%s, secret: %s)", context.Name, context.Cluster.Cluster.Server, context.Name)
 | 
								createClusterObjectOrFail(f, &context)
 | 
				
			||||||
			cluster := federationapi.Cluster{
 | 
					 | 
				
			||||||
				ObjectMeta: api.ObjectMeta{
 | 
					 | 
				
			||||||
					Name: context.Name,
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				Spec: federationapi.ClusterSpec{
 | 
					 | 
				
			||||||
					ServerAddressByClientCIDRs: []federationapi.ServerAddressByClientCIDR{
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							ClientCIDR:    "0.0.0.0/0",
 | 
					 | 
				
			||||||
							ServerAddress: context.Cluster.Cluster.Server,
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					SecretRef: &api.LocalObjectReference{
 | 
					 | 
				
			||||||
						// Note: Name must correlate with federation build script secret name,
 | 
					 | 
				
			||||||
						//       which currently matches the cluster name.
 | 
					 | 
				
			||||||
						//       See federation/cluster/common.sh:132
 | 
					 | 
				
			||||||
						Name: context.Name,
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			_, err := f.FederationClientset.Federation().Clusters().Create(&cluster)
 | 
					 | 
				
			||||||
			framework.ExpectNoError(err, fmt.Sprintf("creating cluster: %+v", err))
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							framework.Logf("Checking that %d clusters are Ready", len(contexts))
 | 
				
			||||||
		for _, context := range contexts {
 | 
							for _, context := range contexts {
 | 
				
			||||||
			c, err := f.FederationClientset.Federation().Clusters().Get(context.Name)
 | 
								clusterIsReadyOrFail(f, &context)
 | 
				
			||||||
			framework.ExpectNoError(err, fmt.Sprintf("get cluster: %+v", err))
 | 
					 | 
				
			||||||
			if c.ObjectMeta.Name != context.Name {
 | 
					 | 
				
			||||||
				framework.Failf("cluster name does not match input context: actual=%+v, expected=%+v", c, context)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			err = isReady(context.Name, f.FederationClientset)
 | 
					 | 
				
			||||||
			framework.ExpectNoError(err, fmt.Sprintf("unexpected error in verifying if cluster %s is ready: %+v", context.Name, err))
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							framework.Logf("%d clusters are Ready", len(contexts))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Verify that deletion works.
 | 
							// Verify that deletion works.
 | 
				
			||||||
 | 
							framework.Logf("Deleting %d clusters", len(contexts))
 | 
				
			||||||
		for _, context := range contexts {
 | 
							for _, context := range contexts {
 | 
				
			||||||
			framework.Logf("Deleting cluster object: %s (%s, secret: %s)", context.Name, context.Cluster.Cluster.Server, context.Name)
 | 
								framework.Logf("Deleting cluster object: %s (%s, secret: %s)", context.Name, context.Cluster.Cluster.Server, context.Name)
 | 
				
			||||||
			err := f.FederationClientset.Federation().Clusters().Delete(context.Name, &api.DeleteOptions{})
 | 
								err := f.FederationClientset.Federation().Clusters().Delete(context.Name, &api.DeleteOptions{})
 | 
				
			||||||
			framework.ExpectNoError(err, fmt.Sprintf("unexpected error in deleting cluster %s: %+v", context.Name, err))
 | 
								framework.ExpectNoError(err, fmt.Sprintf("unexpected error in deleting cluster %s: %+v", context.Name, err))
 | 
				
			||||||
 | 
								framework.Logf("Successfully deleted cluster object: %s (%s, secret: %s)", context.Name, context.Cluster.Cluster.Server, context.Name)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// There should not be any remaining cluster.
 | 
							// There should not be any remaining cluster.
 | 
				
			||||||
 | 
							framework.Logf("Verifying that zero clusters remain")
 | 
				
			||||||
		clusterList, err := f.FederationClientset.Federation().Clusters().List(api.ListOptions{})
 | 
							clusterList, err := f.FederationClientset.Federation().Clusters().List(api.ListOptions{})
 | 
				
			||||||
		Expect(err).NotTo(HaveOccurred())
 | 
							Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
		if len(clusterList.Items) != 0 {
 | 
							if len(clusterList.Items) != 0 {
 | 
				
			||||||
			framework.Failf("there should not have been any remaining clusters. Found: %+v", clusterList)
 | 
								framework.Failf("there should not have been any remaining clusters. Found: %+v", clusterList)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							framework.Logf("Verified that zero clusters remain")
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										62
									
								
								test/e2e/federation-util.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								test/e2e/federation-util.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2016 The Kubernetes Authors All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 e2e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						federationapi "k8s.io/kubernetes/federation/apis/federation"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/test/e2e/framework"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func createClusterObjectOrFail(f *framework.Framework, context *framework.E2EContext) {
 | 
				
			||||||
 | 
						framework.Logf("Creating cluster object: %s (%s, secret: %s)", context.Name, context.Cluster.Cluster.Server, context.Name)
 | 
				
			||||||
 | 
						cluster := federationapi.Cluster{
 | 
				
			||||||
 | 
							ObjectMeta: api.ObjectMeta{
 | 
				
			||||||
 | 
								Name: context.Name,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Spec: federationapi.ClusterSpec{
 | 
				
			||||||
 | 
								ServerAddressByClientCIDRs: []federationapi.ServerAddressByClientCIDR{
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										ClientCIDR:    "0.0.0.0/0",
 | 
				
			||||||
 | 
										ServerAddress: context.Cluster.Cluster.Server,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								SecretRef: &api.LocalObjectReference{
 | 
				
			||||||
 | 
									// Note: Name must correlate with federation build script secret name,
 | 
				
			||||||
 | 
									//       which currently matches the cluster name.
 | 
				
			||||||
 | 
									//       See federation/cluster/common.sh:132
 | 
				
			||||||
 | 
									Name: context.Name,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						_, err := f.FederationClientset.Federation().Clusters().Create(&cluster)
 | 
				
			||||||
 | 
						framework.ExpectNoError(err, fmt.Sprintf("creating cluster: %+v", err))
 | 
				
			||||||
 | 
						framework.Logf("Successfully created cluster object: %s (%s, secret: %s)", context.Name, context.Cluster.Cluster.Server, context.Name)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func clusterIsReadyOrFail(f *framework.Framework, context *framework.E2EContext) {
 | 
				
			||||||
 | 
						c, err := f.FederationClientset.Federation().Clusters().Get(context.Name)
 | 
				
			||||||
 | 
						framework.ExpectNoError(err, fmt.Sprintf("get cluster: %+v", err))
 | 
				
			||||||
 | 
						if c.ObjectMeta.Name != context.Name {
 | 
				
			||||||
 | 
							framework.Failf("cluster name does not match input context: actual=%+v, expected=%+v", c, context)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						err = isReady(context.Name, f.FederationClientset)
 | 
				
			||||||
 | 
						framework.ExpectNoError(err, fmt.Sprintf("unexpected error in verifying if cluster %s is ready: %+v", context.Name, err))
 | 
				
			||||||
 | 
						framework.Logf("Cluster %s is Ready", context.Name)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user