|
15 | 15 | package cmdtest
|
16 | 16 |
|
17 | 17 | import (
|
| 18 | + "bytes" |
18 | 19 | "fmt"
|
19 | 20 | "os"
|
20 | 21 | "os/exec"
|
@@ -54,12 +55,22 @@ func NewTestClusterCmd() *cobra.Command {
|
54 | 55 | }
|
55 | 56 |
|
56 | 57 | func testClusterFunc(cmd *cobra.Command, args []string) {
|
| 58 | + if len(args) != 1 { |
| 59 | + cmdError.ExitWithError(cmdError.ExitBadArgs, fmt.Errorf("operator-sdk test cluster requires exactly 1 argument")) |
| 60 | + } |
57 | 61 | if globalManifestPathCluster != "" {
|
58 | 62 | globalCmd := exec.Command("kubectl", "create", "-f", globalManifestPathCluster)
|
59 | 63 | cmdOut, err := globalCmd.CombinedOutput()
|
60 | 64 | if err != nil {
|
61 |
| - cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("could not create global resources: %v\nKubectl Output: %v", err, cmdOut)) |
| 65 | + cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("could not create global resources: %v\nKubectl Output: %v", err, string(cmdOut))) |
62 | 66 | }
|
| 67 | + defer func() { |
| 68 | + globalCmd := exec.Command("kubectl", "delete", "-f", globalManifestPathCluster) |
| 69 | + cmdOut, err := globalCmd.CombinedOutput() |
| 70 | + if err != nil { |
| 71 | + cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("could not delete global resources: %v\nKubectl Output: %v", err, string(cmdOut))) |
| 72 | + } |
| 73 | + }() |
63 | 74 | }
|
64 | 75 | testPod := &v1.Pod{
|
65 | 76 | ObjectMeta: metav1.ObjectMeta{
|
@@ -91,19 +102,33 @@ func testClusterFunc(cmd *cobra.Command, args []string) {
|
91 | 102 | if err != nil {
|
92 | 103 | cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("failed to create test pod: %v", err))
|
93 | 104 | }
|
| 105 | + defer func() { |
| 106 | + err = kubeclient.CoreV1().Pods(testNamespace).Delete(testPod.Name, &metav1.DeleteOptions{}) |
| 107 | + if err != nil { |
| 108 | + cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("failed to delete test pod")) |
| 109 | + } |
| 110 | + }() |
94 | 111 | for {
|
95 |
| - testPod, err = kubeclient.CoreV1().Pods(testNamespace).Get("operator-test", metav1.GetOptions{}) |
| 112 | + testPod, err = kubeclient.CoreV1().Pods(testNamespace).Get(testPod.Name, metav1.GetOptions{}) |
96 | 113 | if err != nil {
|
97 | 114 | cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("failed to get test pod: %v", err))
|
98 | 115 | }
|
99 | 116 | if testPod.Status.Phase != v1.PodSucceeded && testPod.Status.Phase != v1.PodFailed {
|
100 | 117 | time.Sleep(time.Second * 5)
|
101 | 118 | continue
|
102 | 119 | } else if testPod.Status.Phase == v1.PodSucceeded {
|
103 |
| - fmt.Printf("Test Successfully Completed") |
| 120 | + fmt.Printf("Test Successfully Completed\n") |
104 | 121 | return
|
105 | 122 | } else if testPod.Status.Phase == v1.PodFailed {
|
106 |
| - cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("test Failed: %+v", kubeclient.CoreV1().Pods(testNamespace).GetLogs("operator-test", &v1.PodLogOptions{}))) |
| 123 | + req := kubeclient.CoreV1().Pods(testNamespace).GetLogs(testPod.Name, &v1.PodLogOptions{}) |
| 124 | + readCloser, err := req.Stream() |
| 125 | + if err != nil { |
| 126 | + cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("test failed and failed to get error logs")) |
| 127 | + } |
| 128 | + defer readCloser.Close() |
| 129 | + buf := new(bytes.Buffer) |
| 130 | + buf.ReadFrom(readCloser) |
| 131 | + cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("test failed:\n%+v", buf.String())) |
107 | 132 | }
|
108 | 133 | }
|
109 | 134 | }
|
0 commit comments