Add logs when e2e tests fail
This commit is contained in:
		
							parent
							
								
									287d12f88b
								
							
						
					
					
						commit
						ae4cba4058
					
				|  | @ -0,0 +1,72 @@ | ||||||
|  | package e2e | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"io" | ||||||
|  | 	"testing" | ||||||
|  | 
 | ||||||
|  | 	framework "github.com/operator-framework/operator-sdk/pkg/test" | ||||||
|  | 	v1 "k8s.io/api/core/v1" | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
|  | 	"k8s.io/apimachinery/pkg/labels" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var ( | ||||||
|  | 	podLogTailLimit int64 = 15 | ||||||
|  | 	// MUST match the labels in the deployment manifest: deploy/operator.yaml
 | ||||||
|  | 	operatorPodLabels = map[string]string{ | ||||||
|  | 		"name": "jenkins-operator", | ||||||
|  | 	} | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func getOperatorPod(t *testing.T, namespace string) *v1.Pod { | ||||||
|  | 	listOptions := metav1.ListOptions{ | ||||||
|  | 		LabelSelector: labels.SelectorFromSet(operatorPodLabels).String(), | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	podList, err := framework.Global.KubeClient.CoreV1().Pods(namespace).List(listOptions) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	if len(podList.Items) != 1 { | ||||||
|  | 		t.Fatalf("Expected exactly one pod, got: '%+v'", podList) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return &podList.Items[0] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func getOperatorLogs(pod v1.Pod) (string, error) { | ||||||
|  | 	logOptions := v1.PodLogOptions{TailLines: &podLogTailLimit} | ||||||
|  | 	req := framework.Global.KubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, &logOptions) | ||||||
|  | 	podLogs, err := req.Stream() | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "", err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	defer func() { | ||||||
|  | 		if podLogs != nil { | ||||||
|  | 			_ = podLogs.Close() | ||||||
|  | 		} | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
|  | 	buf := new(bytes.Buffer) | ||||||
|  | 	_, err = io.Copy(buf, podLogs) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "", err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	logs := buf.String() | ||||||
|  | 	return logs, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func failTestAndPrintLogs(t *testing.T, namespace string, err error) { | ||||||
|  | 	operatorPod := getOperatorPod(t, namespace) | ||||||
|  | 	logs, logsErr := getOperatorLogs(*operatorPod) | ||||||
|  | 	if logsErr != nil { | ||||||
|  | 		t.Errorf("Couldn't get pod logs: %s", logsErr) | ||||||
|  | 	} else { | ||||||
|  | 		t.Logf("Last %d lines of log from operator:\n %s", podLogTailLimit, logs) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	t.Fatal(err) | ||||||
|  | } | ||||||
|  | @ -58,7 +58,9 @@ func waitForJenkinsBaseConfigurationToComplete(t *testing.T, jenkins *v1alpha2.J | ||||||
| 		t.Logf("Current Jenkins status: '%+v', error '%s'", jenkins.Status, err) | 		t.Logf("Current Jenkins status: '%+v', error '%s'", jenkins.Status, err) | ||||||
| 		return err == nil && jenkins.Status.BaseConfigurationCompletedTime != nil | 		return err == nil && jenkins.Status.BaseConfigurationCompletedTime != nil | ||||||
| 	}) | 	}) | ||||||
| 	assert.NoError(t, err) | 	if err != nil { | ||||||
|  | 		failTestAndPrintLogs(t, jenkins.Namespace, err) | ||||||
|  | 	} | ||||||
| 	t.Log("Jenkins pod is running") | 	t.Log("Jenkins pod is running") | ||||||
| 
 | 
 | ||||||
| 	// update jenkins CR because Operator sets default values
 | 	// update jenkins CR because Operator sets default values
 | ||||||
|  | @ -83,7 +85,7 @@ func waitForRecreateJenkinsMasterPod(t *testing.T, jenkins *v1alpha2.Jenkins) { | ||||||
| 		return podList.Items[0].DeletionTimestamp == nil, nil | 		return podList.Items[0].DeletionTimestamp == nil, nil | ||||||
| 	}) | 	}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		t.Fatal(err) | 		failTestAndPrintLogs(t, jenkins.Namespace, err) | ||||||
| 	} | 	} | ||||||
| 	t.Log("Jenkins pod has been recreated") | 	t.Log("Jenkins pod has been recreated") | ||||||
| } | } | ||||||
|  | @ -95,7 +97,7 @@ func waitForJenkinsUserConfigurationToComplete(t *testing.T, jenkins *v1alpha2.J | ||||||
| 		return err == nil && jenkins.Status.UserConfigurationCompletedTime != nil | 		return err == nil && jenkins.Status.UserConfigurationCompletedTime != nil | ||||||
| 	}) | 	}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		t.Fatal(err) | 		failTestAndPrintLogs(t, jenkins.Namespace, err) | ||||||
| 	} | 	} | ||||||
| 	t.Log("Jenkins pod is running") | 	t.Log("Jenkins pod is running") | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue