Merge pull request #27585 from quinton-hoole/2016-06-02-ubernetes-e2e
Improve federation e2e tests
This commit is contained in:
		| @@ -44,7 +44,7 @@ const ( | ||||
| 	KubeAPIQPS   = 20.0 | ||||
| 	KubeAPIBurst = 30 | ||||
|  | ||||
| 	FederatedServiceTimeout = 5 * time.Minute | ||||
| 	FederatedServiceTimeout = 60 * time.Second | ||||
|  | ||||
| 	FederatedServiceName = "federated-service" | ||||
| 	FederatedServicePod  = "federated-service-test-pod" | ||||
| @@ -52,7 +52,7 @@ const ( | ||||
| 	DefaultFederationName = "federation" | ||||
| ) | ||||
|  | ||||
| var _ = framework.KubeDescribe("Service [Feature:Federation]", func() { | ||||
| var _ = framework.KubeDescribe("[Feature:Federation] Federated Services", func() { | ||||
| 	var clusterClientSets []*release_1_3.Clientset | ||||
| 	var federationName string | ||||
| 	f := framework.NewDefaultFederatedFramework("service") | ||||
| @@ -68,28 +68,7 @@ var _ = framework.KubeDescribe("Service [Feature:Federation]", func() { | ||||
| 		contexts := f.GetUnderlyingFederatedContexts() | ||||
|  | ||||
| 		for _, context := range contexts { | ||||
| 			framework.Logf("Creating cluster object: %s (%s)", context.Name, context.Cluster.Cluster.Server) | ||||
| 			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") | ||||
| 			createClusterObjectOrFail(f, &context) | ||||
| 		} | ||||
|  | ||||
| 		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.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 { | ||||
| 			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 = "" | ||||
|  | ||||
| 		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)) | ||||
| 	} | ||||
| } | ||||
| @@ -275,7 +266,8 @@ func createService(fcs *federation_release_1_3.Clientset, clusterClientSets []*r | ||||
| 		}, | ||||
| 	} | ||||
| 	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 { | ||||
| 		waitForFederatedServiceShard(cs, namespace, nservice, 1) | ||||
| 	} | ||||
|   | ||||
| @@ -35,7 +35,7 @@ var _ = framework.KubeDescribe("Federation apiserver [Feature:Federation]", func | ||||
| 	f := framework.NewDefaultFederatedFramework("federation-cluster") | ||||
|  | ||||
| 	AfterEach(func() { | ||||
| 		framework.SkipUnlessFederated(f.Client) | ||||
| 		// framework.SkipUnlessFederated(f.Client)  TODO: quinton-hoole: Temporarily disabled | ||||
|  | ||||
| 		// Delete registered clusters. | ||||
| 		// 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() | ||||
|  | ||||
| 		framework.Logf("Creating %d cluster objects", len(contexts)) | ||||
| 		for _, context := range contexts { | ||||
| 			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)) | ||||
| 			createClusterObjectOrFail(f, &context) | ||||
| 		} | ||||
|  | ||||
| 		framework.Logf("Checking that %d clusters are Ready", len(contexts)) | ||||
| 		for _, context := range contexts { | ||||
| 			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)) | ||||
| 			clusterIsReadyOrFail(f, &context) | ||||
| 		} | ||||
| 		framework.Logf("%d clusters are Ready", len(contexts)) | ||||
|  | ||||
| 		// Verify that deletion works. | ||||
| 		framework.Logf("Deleting %d clusters", len(contexts)) | ||||
| 		for _, context := range contexts { | ||||
| 			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{}) | ||||
| 			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. | ||||
| 		framework.Logf("Verifying that zero clusters remain") | ||||
| 		clusterList, err := f.FederationClientset.Federation().Clusters().List(api.ListOptions{}) | ||||
| 		Expect(err).NotTo(HaveOccurred()) | ||||
| 		if len(clusterList.Items) != 0 { | ||||
| 			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
	 Daniel Smith
					Daniel Smith