diff --git a/t/chaos/go.mod b/t/chaos/go.mod index 2db9fac6b054..336be3257246 100644 --- a/t/chaos/go.mod +++ b/t/chaos/go.mod @@ -4,6 +4,7 @@ require ( github.com/chaos-mesh/chaos-mesh v1.1.1 github.com/gavv/httpexpect/v2 v2.1.0 github.com/onsi/gomega v1.9.0 + github.com/pkg/errors v0.9.1 k8s.io/api v0.17.0 k8s.io/apimachinery v0.17.0 k8s.io/client-go v0.17.0 diff --git a/t/chaos/kill-etcd_test.go b/t/chaos/kill-etcd_test.go index f001b864447a..62a4578d48e3 100644 --- a/t/chaos/kill-etcd_test.go +++ b/t/chaos/kill-etcd_test.go @@ -93,7 +93,8 @@ func TestGetSuccessWhenEtcdKilled(t *testing.T) { apisixPod := getPod(g, cliSet.ctrlCli, metav1.NamespaceDefault, listOption) t.Run("error log not contains etcd error", func(t *testing.T) { - errorLog := execInPod(g, cliSet.kubeCli, apisixPod, "cat logs/error.log") + errorLog, err := log(apisixPod, cliSet.kubeCli) + g.Expect(err).To(BeNil()) g.Expect(strings.Contains(errorLog, "failed to fetch data from etcd")).To(BeFalse()) }) @@ -110,7 +111,8 @@ func TestGetSuccessWhenEtcdKilled(t *testing.T) { testPrometheusEtcdMetric(e, 0) t.Run("error log contains etcd error", func(t *testing.T) { - errorLog := execInPod(g, cliSet.kubeCli, apisixPod, "cat logs/error.log") + errorLog, err := log(apisixPod, cliSet.kubeCli) + g.Expect(err).To(BeNil()) g.Expect(strings.Contains(errorLog, "failed to fetch data from etcd")).To(BeTrue()) }) diff --git a/t/chaos/kube_utils.go b/t/chaos/kube_utils.go index f672f25ec135..13e5b8a39101 100644 --- a/t/chaos/kube_utils.go +++ b/t/chaos/kube_utils.go @@ -21,10 +21,12 @@ import ( "bytes" "context" "fmt" + "io" "strings" "github.com/chaos-mesh/chaos-mesh/api/v1alpha1" . "github.com/onsi/gomega" + "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes" @@ -100,3 +102,21 @@ func execInPod(g *WithT, cli *kubernetes.Clientset, pod *corev1.Pod, cmd string) } return stdout.String() } + +func log(pod *corev1.Pod, c *kubernetes.Clientset) (string, error) { + podLogOpts := corev1.PodLogOptions{} + + req := c.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, &podLogOpts) + podLogs, err := req.Stream() + if err != nil { + return "", errors.Wrapf(err, "failed to open log stream for pod %s/%s", pod.GetNamespace(), pod.GetName()) + } + defer podLogs.Close() + + buf := new(bytes.Buffer) + _, err = io.Copy(buf, podLogs) + if err != nil { + return "", errors.Wrapf(err, "failed to copy information from podLogs to buf") + } + return buf.String(), nil +}