From bd00f835785a135df4301c3aec7c1d2d26f0d61c Mon Sep 17 00:00:00 2001 From: Tsubasa Nagasawa Date: Sun, 8 Sep 2024 15:32:10 +0900 Subject: [PATCH] =?UTF-8?q?Add=20step=20to=20existing=20pod=20termination?= =?UTF-8?q?=20Node=20E2E=20tests=20to=20check=20the=20container=E2=80=99s?= =?UTF-8?q?=20exit=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tsubasa Nagasawa --- test/e2e_node/container_lifecycle_test.go | 41 +++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/test/e2e_node/container_lifecycle_test.go b/test/e2e_node/container_lifecycle_test.go index 6e52bd4f57b..c4272944c60 100644 --- a/test/e2e_node/container_lifecycle_test.go +++ b/test/e2e_node/container_lifecycle_test.go @@ -50,6 +50,28 @@ func prefixedName(namePrefix string, name string) string { return fmt.Sprintf("%s-%s", namePrefix, name) } +type podTerminationContainerStatus struct { + exitCode int32 + reason string +} + +func expectPodTerminationContainerStatuses(statuses []v1.ContainerStatus, to map[string]podTerminationContainerStatus) { + ginkgo.GinkgoHelper() + + if len(statuses) != len(to) { + ginkgo.Fail(fmt.Sprintf("mismatched lengths in pod termination container statuses. got %d, expected %d", len(statuses), len(to))) + } + for _, status := range statuses { + expected, ok := to[status.Name] + if !ok { + ginkgo.Fail(fmt.Sprintf("container %q not found in expected pod termination container statuses", status.Name)) + } + gomega.Expect(status.State.Terminated).NotTo(gomega.BeNil()) + gomega.Expect(status.State.Terminated.ExitCode).To(gomega.Equal(expected.exitCode)) + gomega.Expect(status.State.Terminated.Reason).To(gomega.Equal(expected.reason)) + } +} + var _ = SIGDescribe(framework.WithNodeConformance(), "Containers Lifecycle", func() { f := framework.NewDefaultFramework("containers-lifecycle-test") addAfterEachForCleaningUpPods(f) @@ -3115,6 +3137,12 @@ var _ = SIGDescribe(nodefeature.SidecarContainers, "Containers Lifecycle", func( pod, err = client.Get(context.TODO(), pod.Name, metav1.GetOptions{}) framework.ExpectNoError(err) + expectPodTerminationContainerStatuses(pod.Status.InitContainerStatuses, map[string]podTerminationContainerStatus{ + restartableInit1: {exitCode: int32(0), reason: "Completed"}, + restartableInit2: {exitCode: int32(0), reason: "Completed"}, + restartableInit3: {exitCode: int32(0), reason: "Completed"}, + }) + results := parseOutput(context.TODO(), f, pod) ginkgo.By("Analyzing results") @@ -3221,6 +3249,13 @@ var _ = SIGDescribe(nodefeature.SidecarContainers, "Containers Lifecycle", func( pod, err = client.Get(context.TODO(), pod.Name, metav1.GetOptions{}) framework.ExpectNoError(err) + // all restartable init containers are sigkilled with exit code 137 + expectPodTerminationContainerStatuses(pod.Status.InitContainerStatuses, map[string]podTerminationContainerStatus{ + restartableInit1: {exitCode: int32(137), reason: "Error"}, + restartableInit2: {exitCode: int32(137), reason: "Error"}, + restartableInit3: {exitCode: int32(137), reason: "Error"}, + }) + results := parseOutput(context.TODO(), f, pod) ginkgo.By("Analyzing results") @@ -3352,6 +3387,12 @@ var _ = SIGDescribe(nodefeature.SidecarContainers, "Containers Lifecycle", func( pod, err = client.Get(context.TODO(), pod.Name, metav1.GetOptions{}) framework.ExpectNoError(err) + expectPodTerminationContainerStatuses(pod.Status.InitContainerStatuses, map[string]podTerminationContainerStatus{ + restartableInit1: {exitCode: int32(0), reason: "Completed"}, + restartableInit2: {exitCode: int32(0), reason: "Completed"}, + restartableInit3: {exitCode: int32(0), reason: "Completed"}, + }) + results := parseOutput(context.TODO(), f, pod) ginkgo.By("Analyzing results")