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.
This commit is contained in:
Clayton Coleman 2023-05-12 12:48:32 -04:00
parent 1f16d71185
commit 6ac1bae281
No known key found for this signature in database
GPG Key ID: CF7DB7FC943D3E0E

View File

@ -18,6 +18,7 @@ package node
import ( import (
"context" "context"
"encoding/json"
"fmt" "fmt"
"strconv" "strconv"
"strings" "strings"
@ -394,10 +395,10 @@ var _ = SIGDescribe("InitContainer [NodeConformance]", func() {
case *v1.Pod: case *v1.Pod:
for _, status := range t.Status.ContainerStatuses { for _, status := range t.Status.ContainerStatuses {
if status.State.Waiting == nil { 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" { 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 { if len(t.Status.InitContainerStatuses) != 2 {
@ -405,14 +406,14 @@ var _ = SIGDescribe("InitContainer [NodeConformance]", func() {
} }
status := t.Status.InitContainerStatuses[1] status := t.Status.InitContainerStatuses[1]
if status.State.Waiting == nil { 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" { 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] status = t.Status.InitContainerStatuses[0]
if status.State.Terminated != nil && status.State.Terminated.ExitCode == 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 // continue until we see an attempt to restart the pod
return status.LastTerminationState.Terminated != nil, nil return status.LastTerminationState.Terminated != nil, nil
@ -518,10 +519,10 @@ var _ = SIGDescribe("InitContainer [NodeConformance]", func() {
case *v1.Pod: case *v1.Pod:
for _, status := range t.Status.ContainerStatuses { for _, status := range t.Status.ContainerStatuses {
if status.State.Waiting == nil { 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" { 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 { if len(t.Status.InitContainerStatuses) != 2 {
@ -530,19 +531,19 @@ var _ = SIGDescribe("InitContainer [NodeConformance]", func() {
status := t.Status.InitContainerStatuses[0] status := t.Status.InitContainerStatuses[0]
if status.State.Terminated == nil { if status.State.Terminated == nil {
if status.State.Waiting != nil && status.State.Waiting.Reason != "PodInitializing" { 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 return false, nil
} }
if status.State.Terminated != nil && status.State.Terminated.ExitCode != 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))
} }
status = t.Status.InitContainerStatuses[1] status = t.Status.InitContainerStatuses[1]
if status.State.Terminated == nil { if status.State.Terminated == nil {
return false, nil return false, nil
} }
if status.State.Terminated.ExitCode == 0 { 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 return true, nil
default: default:
@ -566,3 +567,13 @@ var _ = SIGDescribe("InitContainer [NodeConformance]", func() {
gomega.Expect(endPod.Status.ContainerStatuses[0].State.Waiting).ToNot(gomega.BeNil()) 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("<error: %v>", err)
}
return string(m)
}