func startPodAndGetBackOffs(podClient *framework.PodClient, pod *v1.Pod, sleepAmount time.Duration) (time.Duration, time.Duration) { podClient.CreateSync(pod) time.Sleep(sleepAmount) Expect(pod.Spec.Containers).NotTo(BeEmpty()) podName := pod.Name containerName := pod.Spec.Containers[0].Name By("getting restart delay-0") _, err := getRestartDelay(podClient, podName, containerName) if err != nil { framework.Failf("timed out waiting for container restart in pod=%s/%s", podName, containerName) } By("getting restart delay-1") delay1, err := getRestartDelay(podClient, podName, containerName) if err != nil { framework.Failf("timed out waiting for container restart in pod=%s/%s", podName, containerName) } By("getting restart delay-2") delay2, err := getRestartDelay(podClient, podName, containerName) if err != nil { framework.Failf("timed out waiting for container restart in pod=%s/%s", podName, containerName) } return delay1, delay2 }
// testHostIP tests that a pod gets a host IP func testHostIP(podClient *framework.PodClient, pod *v1.Pod) { By("creating pod") podClient.CreateSync(pod) // Try to make sure we get a hostIP for each pod. hostIPTimeout := 2 * time.Minute t := time.Now() for { p, err := podClient.Get(pod.Name, metav1.GetOptions{}) Expect(err).NotTo(HaveOccurred(), "Failed to get pod %q", pod.Name) if p.Status.HostIP != "" { framework.Logf("Pod %s has hostIP: %s", p.Name, p.Status.HostIP) break } if time.Since(t) >= hostIPTimeout { framework.Failf("Gave up waiting for hostIP of pod %s after %v seconds", p.Name, time.Since(t).Seconds()) } framework.Logf("Retrying to get the hostIP of pod %s", p.Name) time.Sleep(5 * time.Second) } }
preStopWaitTimeout = 30 * time.Second ) Context("when create a pod with lifecycle hook", func() { BeforeEach(func() { podClient = f.PodClient() }) Context("when it is exec hook", func() { var file string testPodWithExecHook := func(podWithHook *v1.Pod) { podCheckHook := getExecHookTestPod("pod-check-hook", // Wait until the file is created. []string{"sh", "-c", fmt.Sprintf("while [ ! -e %s ]; do sleep 1; done", file)}, ) By("create the pod with lifecycle hook") podClient.CreateSync(podWithHook) if podWithHook.Spec.Containers[0].Lifecycle.PostStart != nil { By("create the hook check pod") podClient.Create(podCheckHook) By("wait for the hook check pod to success") podClient.WaitForSuccess(podCheckHook.Name, postStartWaitTimeout) } By("delete the pod with lifecycle hook") podClient.DeleteSync(podWithHook.Name, v1.NewDeleteOptions(15), podWaitTimeout) if podWithHook.Spec.Containers[0].Lifecycle.PreStop != nil { By("create the hook check pod") podClient.Create(podCheckHook) By("wait for the prestop check pod to success") podClient.WaitForSuccess(podCheckHook.Name, preStopWaitTimeout) } }
"name": "foo", "time": value, }, }, Spec: v1.PodSpec{ Containers: []v1.Container{ { Name: "nginx", Image: "gcr.io/google_containers/nginx-slim:0.7", }, }, }, } By("submitting the pod to kubernetes") pod = podClient.CreateSync(pod) By("verifying the pod is in kubernetes") selector := labels.SelectorFromSet(labels.Set(map[string]string{"time": value})) options := v1.ListOptions{LabelSelector: selector.String()} pods, err := podClient.List(options) Expect(err).NotTo(HaveOccurred(), "failed to query for pods") Expect(len(pods.Items)).To(Equal(1)) By("updating the pod") podClient.Update(name, func(pod *v1.Pod) { value = strconv.Itoa(time.Now().Nanosecond()) pod.Labels["time"] = value }) framework.ExpectNoError(f.WaitForPodRunning(pod.Name))
f := framework.NewDefaultFramework("kubelet-test") var podClient *framework.PodClient BeforeEach(func() { podClient = f.PodClient() }) Context("when scheduling a busybox command in a pod", func() { podName := "busybox-scheduling-" + string(uuid.NewUUID()) It("it should print the output to logs [Conformance]", func() { podClient.CreateSync(&v1.Pod{ ObjectMeta: v1.ObjectMeta{ Name: podName, }, Spec: v1.PodSpec{ // Don't restart the Pod since it is expected to exit RestartPolicy: v1.RestartPolicyNever, Containers: []v1.Container{ { Image: "gcr.io/google_containers/busybox:1.24", Name: podName, Command: []string{"sh", "-c", "echo 'Hello World' ; sleep 240"}, }, }, }, }) Eventually(func() string { sinceTime := apiUnversioned.NewTime(time.Now().Add(time.Duration(-1 * time.Hour))) rc, err := podClient.GetLogs(podName, &v1.PodLogOptions{SinceTime: &sinceTime}).Stream() if err != nil { return "" } defer rc.Close() buf := new(bytes.Buffer)
}) It("should update labels on modification [Conformance]", func() { labels := map[string]string{} labels["key1"] = "value1" labels["key2"] = "value2" podName := "labelsupdate" + string(uuid.NewUUID()) pod := downwardAPIVolumePodForUpdateTest(podName, labels, map[string]string{}, "/etc/labels") containerName := "client-container" defer func() { By("Deleting the pod") podClient.Delete(pod.Name, api.NewDeleteOptions(0)) }() By("Creating the pod") podClient.CreateSync(pod) Eventually(func() (string, error) { return framework.GetPodLogs(f.Client, f.Namespace.Name, podName, containerName) }, podLogTimeout, framework.Poll).Should(ContainSubstring("key1=\"value1\"\n")) //modify labels podClient.Update(podName, func(pod *api.Pod) { pod.Labels["key3"] = "value3" }) Eventually(func() (string, error) { return framework.GetPodLogs(f.Client, f.Namespace.Name, pod.Name, containerName) }, podLogTimeout, framework.Poll).Should(ContainSubstring("key3=\"value3\"\n"))
f := framework.NewDefaultFramework("kubelet-test") var podClient *framework.PodClient BeforeEach(func() { podClient = f.PodClient() }) Context("when scheduling a busybox command in a pod", func() { podName := "busybox-scheduling-" + string(uuid.NewUUID()) It("it should print the output to logs", func() { podClient.CreateSync(&api.Pod{ ObjectMeta: api.ObjectMeta{ Name: podName, }, Spec: api.PodSpec{ // Don't restart the Pod since it is expected to exit RestartPolicy: api.RestartPolicyNever, Containers: []api.Container{ { Image: ImageRegistry[busyBoxImage], Name: podName, Command: []string{"sh", "-c", "echo 'Hello World' ; sleep 240"}, }, }, }, }) Eventually(func() string { sinceTime := apiUnversioned.NewTime(time.Now().Add(time.Duration(-1 * time.Hour))) rc, err := podClient.GetLogs(podName, &api.PodLogOptions{SinceTime: &sinceTime}).Stream() if err != nil { return "" } defer rc.Close() buf := new(bytes.Buffer)