add slow test for terminated pod garbage collection
This commit is contained in:
		| @@ -148,6 +148,7 @@ GCE_SLOW_TESTS=( | |||||||
|     "Nodes\sResize"                                   # 3 min 30 sec, file: resize_nodes.go,         issue: #13323 |     "Nodes\sResize"                                   # 3 min 30 sec, file: resize_nodes.go,         issue: #13323 | ||||||
|     "resource\susage\stracking"                       # 1 hour,       file: kubelet_perf.go,         slow by design |     "resource\susage\stracking"                       # 1 hour,       file: kubelet_perf.go,         slow by design | ||||||
|     "monotonically\sincreasing\srestart\scount"       # 1.5 to 5 min, file: pods.go,                 slow by design |     "monotonically\sincreasing\srestart\scount"       # 1.5 to 5 min, file: pods.go,                 slow by design | ||||||
|  |     "Garbage\scollector\sshould"                      # 7 min,        file: garbage_collector.go,    slow by design | ||||||
|     "KubeProxy\sshould\stest\skube-proxy"             # 9 min 30 sec, file: kubeproxy.go,            issue: #14204 |     "KubeProxy\sshould\stest\skube-proxy"             # 9 min 30 sec, file: kubeproxy.go,            issue: #14204 | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										82
									
								
								test/e2e/garbage_collector.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								test/e2e/garbage_collector.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | |||||||
|  | /* | ||||||
|  | Copyright 2015 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 ( | ||||||
|  | 	"time" | ||||||
|  |  | ||||||
|  | 	. "github.com/onsi/ginkgo" | ||||||
|  | 	. "github.com/onsi/gomega" | ||||||
|  |  | ||||||
|  | 	"k8s.io/kubernetes/pkg/api" | ||||||
|  | 	"k8s.io/kubernetes/pkg/fields" | ||||||
|  | 	"k8s.io/kubernetes/pkg/labels" | ||||||
|  | 	"k8s.io/kubernetes/pkg/util" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // This test requires that --terminated-pod-gc-threshold=100 be set on the controller manager | ||||||
|  | var _ = Describe("Garbage collector", func() { | ||||||
|  | 	f := NewFramework("garbage-collector") | ||||||
|  | 	It("should handle the creation of 1000 pods", func() { | ||||||
|  | 		SkipUnlessProviderIs("gce") | ||||||
|  |  | ||||||
|  | 		var count int | ||||||
|  | 		for count < 1000 { | ||||||
|  | 			pod, err := createTerminatingPod(f) | ||||||
|  | 			pod.ResourceVersion = "" | ||||||
|  | 			pod.Status.Phase = api.PodFailed | ||||||
|  | 			pod, err = f.Client.Pods(f.Namespace.Name).UpdateStatus(pod) | ||||||
|  | 			if err != nil { | ||||||
|  | 				Failf("err failing pod: %v", err) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			count++ | ||||||
|  | 			if count%50 == 0 { | ||||||
|  | 				Logf("count: %v", count) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		Logf("created: %v", count) | ||||||
|  | 		// This sleep has to be longer than the gcCheckPeriod defined | ||||||
|  | 		// in pkg/controller/gc/gc_controller.go which is currently | ||||||
|  | 		// 20 seconds. | ||||||
|  | 		time.Sleep(30 * time.Second) | ||||||
|  |  | ||||||
|  | 		pods, err := f.Client.Pods(f.Namespace.Name).List(labels.Everything(), fields.Everything()) | ||||||
|  | 		Expect(err).NotTo(HaveOccurred()) | ||||||
|  | 		Expect(len(pods.Items)).To(BeNumerically("==", 100)) | ||||||
|  | 	}) | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | func createTerminatingPod(f *Framework) (*api.Pod, error) { | ||||||
|  | 	uuid := util.NewUUID() | ||||||
|  | 	pod := &api.Pod{ | ||||||
|  | 		ObjectMeta: api.ObjectMeta{ | ||||||
|  | 			Name: string(uuid), | ||||||
|  | 		}, | ||||||
|  | 		Spec: api.PodSpec{ | ||||||
|  | 			NodeName: "nonexistant-node", | ||||||
|  | 			Containers: []api.Container{ | ||||||
|  | 				{ | ||||||
|  | 					Name:  string(uuid), | ||||||
|  | 					Image: "beta.gcr.io/google_containers/busybox", | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	return f.Client.Pods(f.Namespace.Name).Create(pod) | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 Mike Danese
					Mike Danese