From 844f6e95837abe355e4233d033a7baa15d4a53e9 Mon Sep 17 00:00:00 2001 From: Yusuke Kuoka Date: Sun, 13 Nov 2022 02:48:00 +0000 Subject: [PATCH] Introduce a new test helper for easier log snapshot testing Use the new runWithLogCapture helper instead of the long boilerplate to capture the log for snapshot testing. Signed-off-by: Yusuke Kuoka --- pkg/app/app_apply_nokubectx_test.go | 34 +++--------------------- pkg/app/snapshot_test.go | 41 +++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/pkg/app/app_apply_nokubectx_test.go b/pkg/app/app_apply_nokubectx_test.go index 43d17ca2..1261e31d 100644 --- a/pkg/app/app_apply_nokubectx_test.go +++ b/pkg/app/app_apply_nokubectx_test.go @@ -1,14 +1,12 @@ package app import ( - "bufio" - "bytes" - "io" "sync" "testing" "github.com/google/go-cmp/cmp" "github.com/variantdev/vals" + "go.uber.org/zap" "github.com/helmfile/helmfile/pkg/exectest" "github.com/helmfile/helmfile/pkg/filesystem" @@ -54,35 +52,9 @@ func TestApply_3(t *testing.T) { ReleasesMutex: &sync.Mutex{}, } - bs := &bytes.Buffer{} - - func() { + bs := runWithLogCapture(t, func(t *testing.T, logger *zap.SugaredLogger) { t.Helper() - logReader, logWriter := io.Pipe() - - logFlushed := &sync.WaitGroup{} - // Ensure all the log is consumed into `bs` by calling `logWriter.Close()` followed by `logFlushed.Wait()` - logFlushed.Add(1) - go func() { - scanner := bufio.NewScanner(logReader) - for scanner.Scan() { - bs.Write(scanner.Bytes()) - bs.WriteString("\n") - } - logFlushed.Done() - }() - - defer func() { - // This is here to avoid data-trace on bytes buffer `bs` to capture logs - if err := logWriter.Close(); err != nil { - panic(err) - } - logFlushed.Wait() - }() - - logger := helmexec.NewLogger(logWriter, "debug") - valsRuntime, err := vals.New(vals.Options{CacheSize: 32}) if err != nil { t.Errorf("unexpected error creating vals runtime: %v", err) @@ -156,7 +128,7 @@ func TestApply_3(t *testing.T) { } } } - }() + }) if tc.log != "" { actual := bs.String() diff --git a/pkg/app/snapshot_test.go b/pkg/app/snapshot_test.go index b36ea6e1..da42453f 100644 --- a/pkg/app/snapshot_test.go +++ b/pkg/app/snapshot_test.go @@ -1,15 +1,56 @@ package app import ( + "bufio" + "bytes" + "io" "os" "path/filepath" "reflect" "strings" + "sync" "testing" "github.com/google/go-cmp/cmp" + "go.uber.org/zap" + + "github.com/helmfile/helmfile/pkg/helmexec" ) +func runWithLogCapture(t *testing.T, f func(*testing.T, *zap.SugaredLogger)) *bytes.Buffer { + t.Helper() + + bs := &bytes.Buffer{} + + logReader, logWriter := io.Pipe() + + logFlushed := &sync.WaitGroup{} + // Ensure all the log is consumed into `bs` by calling `logWriter.Close()` followed by `logFlushed.Wait()` + logFlushed.Add(1) + go func() { + scanner := bufio.NewScanner(logReader) + for scanner.Scan() { + bs.Write(scanner.Bytes()) + bs.WriteString("\n") + } + logFlushed.Done() + }() + + defer func() { + // This is here to avoid data-trace on bytes buffer `bs` to capture logs + if err := logWriter.Close(); err != nil { + panic(err) + } + logFlushed.Wait() + }() + + logger := helmexec.NewLogger(logWriter, "debug") + + f(t, logger) + + return bs +} + func assertLogEqualsToSnapshot(t *testing.T, data string) { t.Helper()