Skip to content

Commit d05ed73

Browse files
author
Bohan Chen
committed
dump crds on failed test
it.After doesn't run if t.Fatal/t.FailNow is called, so we have to rely on t.Cleanup to register a cleanup function Signed-off-by: Bohan Chen <bohanc@vmware.com>
1 parent 1b57e90 commit d05ed73

2 files changed

Lines changed: 66 additions & 0 deletions

File tree

test/execute_build_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,13 @@ func testCreateImage(t *testing.T, when spec.G, it spec.S) {
123123
}
124124

125125
it.Before(func() {
126+
// register a cleanup function that dumps crds only if the test fails
127+
t.Cleanup(func() {
128+
if t.Failed() {
129+
dumpK8s(t, ctx, clients, testNamespace)
130+
}
131+
})
132+
126133
cfg = loadConfig(t)
127134
builtImages = map[string]struct{}{}
128135

test/testhelpers.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package test
22

33
import (
4+
"context"
5+
"os"
46
"testing"
57
"time"
8+
9+
"github.com/ghodss/yaml"
10+
"github.com/pivotal/kpack/pkg/logs"
11+
"github.com/stretchr/testify/require"
12+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
613
)
714

815
func eventually(t *testing.T, fun func() bool, interval time.Duration, duration time.Duration) {
@@ -19,3 +26,55 @@ func eventually(t *testing.T, fun func() bool, interval time.Duration, duration
1926
}
2027
}
2128
}
29+
30+
func printObject(t *testing.T, obj interface{}) {
31+
data, err := yaml.Marshal(obj)
32+
require.NoError(t, err)
33+
34+
t.Log(string(data))
35+
}
36+
37+
func dumpK8s(t *testing.T, ctx context.Context, clients *clients, namespace string) {
38+
const header = "=================%v=================\n"
39+
40+
t.Logf(header, "ClusterBuilders")
41+
clusterBuilders, err := clients.client.KpackV1alpha2().ClusterBuilders().List(ctx, metav1.ListOptions{})
42+
require.NoError(t, err)
43+
for _, cb := range clusterBuilders.Items {
44+
printObject(t, cb)
45+
}
46+
47+
t.Logf(header, "Builders")
48+
builders, err := clients.client.KpackV1alpha2().Builders(namespace).List(ctx, metav1.ListOptions{})
49+
require.NoError(t, err)
50+
for _, b := range builders.Items {
51+
printObject(t, b)
52+
}
53+
54+
t.Logf(header, "Images")
55+
images, err := clients.client.KpackV1alpha2().Images(namespace).List(ctx, metav1.ListOptions{})
56+
require.NoError(t, err)
57+
for _, i := range images.Items {
58+
printObject(t, i)
59+
}
60+
61+
t.Logf(header, "SourceResolvers")
62+
sourceResolvers, err := clients.client.KpackV1alpha2().SourceResolvers(namespace).List(ctx, metav1.ListOptions{})
63+
require.NoError(t, err)
64+
for _, sr := range sourceResolvers.Items {
65+
printObject(t, sr)
66+
}
67+
68+
t.Logf(header, "Pods")
69+
pods, err := clients.k8sClient.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{})
70+
require.NoError(t, err)
71+
for _, p := range pods.Items {
72+
printObject(t, p)
73+
}
74+
75+
t.Logf(header, "Image logs")
76+
for _, i := range images.Items {
77+
err = logs.NewBuildLogsClient(clients.k8sClient).GetImageLogs(ctx, os.Stdout, i.Name, i.Namespace)
78+
require.NoError(t, err)
79+
}
80+
}

0 commit comments

Comments
 (0)