From 6ac1bae28154b6f81023d6e783d91728687f7aff Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Fri, 12 May 2023 12:48:32 -0400 Subject: [PATCH] test: Improve debug output of init container tests When certain status conditions are not expected, we need to see the nested objects, but %#v doesn't handle pointers well. Output as simple encoded JSON. --- test/e2e/common/node/init_container.go | 31 +++++++++++++++++--------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/test/e2e/common/node/init_container.go b/test/e2e/common/node/init_container.go index a87230e8436..11ebc72a8ef 100644 --- a/test/e2e/common/node/init_container.go +++ b/test/e2e/common/node/init_container.go @@ -18,6 +18,7 @@ package node import ( "context" + "encoding/json" "fmt" "strconv" "strings" @@ -394,10 +395,10 @@ var _ = SIGDescribe("InitContainer [NodeConformance]", func() { case *v1.Pod: for _, status := range t.Status.ContainerStatuses { if status.State.Waiting == nil { - return false, fmt.Errorf("container %q should not be out of waiting: %#v", status.Name, status) + return false, fmt.Errorf("container %q should not be out of waiting: %s", status.Name, toDebugJSON(status)) } if status.State.Waiting.Reason != "PodInitializing" { - return false, fmt.Errorf("container %q should have reason PodInitializing: %#v", status.Name, status) + return false, fmt.Errorf("container %q should have reason PodInitializing: %s", status.Name, toDebugJSON(status)) } } if len(t.Status.InitContainerStatuses) != 2 { @@ -405,14 +406,14 @@ var _ = SIGDescribe("InitContainer [NodeConformance]", func() { } status := t.Status.InitContainerStatuses[1] if status.State.Waiting == nil { - return false, fmt.Errorf("second init container should not be out of waiting: %#v", status) + return false, fmt.Errorf("second init container should not be out of waiting: %s", toDebugJSON(status)) } if status.State.Waiting.Reason != "PodInitializing" { - return false, fmt.Errorf("second init container should have reason PodInitializing: %#v", status) + return false, fmt.Errorf("second init container should have reason PodInitializing: %s", toDebugJSON(status)) } status = t.Status.InitContainerStatuses[0] if status.State.Terminated != nil && status.State.Terminated.ExitCode == 0 { - return false, fmt.Errorf("first init container should have exitCode != 0: %#v", status) + return false, fmt.Errorf("first init container should have exitCode != 0: %s", toDebugJSON(status)) } // continue until we see an attempt to restart the pod return status.LastTerminationState.Terminated != nil, nil @@ -518,10 +519,10 @@ var _ = SIGDescribe("InitContainer [NodeConformance]", func() { case *v1.Pod: for _, status := range t.Status.ContainerStatuses { if status.State.Waiting == nil { - return false, fmt.Errorf("container %q should not be out of waiting: %#v", status.Name, status) + return false, fmt.Errorf("container %q should not be out of waiting: %s", status.Name, toDebugJSON(status)) } if status.State.Waiting.Reason != "PodInitializing" { - return false, fmt.Errorf("container %q should have reason PodInitializing: %#v", status.Name, status) + return false, fmt.Errorf("container %q should have reason PodInitializing: %s", status.Name, toDebugJSON(status)) } } if len(t.Status.InitContainerStatuses) != 2 { @@ -530,19 +531,19 @@ var _ = SIGDescribe("InitContainer [NodeConformance]", func() { status := t.Status.InitContainerStatuses[0] if status.State.Terminated == nil { if status.State.Waiting != nil && status.State.Waiting.Reason != "PodInitializing" { - return false, fmt.Errorf("second init container should have reason PodInitializing: %#v", status) + return false, fmt.Errorf("second init container should have reason PodInitializing: %s", toDebugJSON(status)) } return false, nil } if status.State.Terminated != nil && status.State.Terminated.ExitCode != 0 { - return false, fmt.Errorf("first init container should have exitCode != 0: %#v", status) + return false, fmt.Errorf("first init container should have exitCode != 0: %s", toDebugJSON(status)) } status = t.Status.InitContainerStatuses[1] if status.State.Terminated == nil { return false, nil } if status.State.Terminated.ExitCode == 0 { - return false, fmt.Errorf("second init container should have failed: %#v", status) + return false, fmt.Errorf("second init container should have failed: %s", toDebugJSON(status)) } return true, nil default: @@ -566,3 +567,13 @@ var _ = SIGDescribe("InitContainer [NodeConformance]", func() { gomega.Expect(endPod.Status.ContainerStatuses[0].State.Waiting).ToNot(gomega.BeNil()) }) }) + +// toDebugJSON converts an object to its JSON representation for debug logging +// purposes instead of using a struct. +func toDebugJSON(obj interface{}) string { + m, err := json.Marshal(obj) + if err != nil { + return fmt.Sprintf("", err) + } + return string(m) +}