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 (
"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("<error: %v>", err)
}
return string(m)
}