func WaitForTerminatedContainer(f *framework.Framework, pod *v1.Pod, containerName string) error { return framework.WaitForPodCondition(f.ClientSet, f.Namespace.Name, pod.Name, "container terminated", framework.PodStartTimeout, func(pod *v1.Pod) (bool, error) { if len(testutils.TerminatedContainers(pod)[containerName]) > 0 { return true, nil } return false, nil }) }
for i := 0; i < restartCount; i += 1 { By(fmt.Sprintf("Restarting Docker Daemon iteration %d", i)) // TODO: Find a uniform way to deal with systemctl/initctl/service operations. #34494 if stdout, err := exec.Command("sudo", "systemctl", "restart", "docker").CombinedOutput(); err != nil { framework.Logf("Failed to trigger docker restart with systemd/systemctl: %v, stdout: %q", err, string(stdout)) if stdout, err = exec.Command("sudo", "service", "docker", "restart").CombinedOutput(); err != nil { framework.Failf("Failed to trigger docker restart with upstart/service: %v, stdout: %q", err, string(stdout)) } } time.Sleep(20 * time.Second) } By("Checking currently Running/Ready pods") postRestartRunningPods := waitForPods(f, len(runningPods), recoverTimeout) if len(postRestartRunningPods) == 0 { framework.Failf("Failed to start *any* pods after docker restart, this might indicate an IP leak") } By("Confirm no containers have terminated") for _, pod := range postRestartRunningPods { if c := testutils.TerminatedContainers(pod); len(c) != 0 { framework.Failf("Pod %q has failed containers %+v after docker restart, this might indicate an IP leak", pod.Name, c) } } By(fmt.Sprintf("Docker restart test passed with %d pods", len(postRestartRunningPods))) }) }) }) })