helmfile/pkg/testutil/testutil.go

41 lines
621 B
Go

package testutil
import (
"bytes"
"io"
"log"
"os"
"sync"
)
// CaptureStdout is a helper function to capture stdout.
func CaptureStdout(f func()) string {
reader, writer, err := os.Pipe()
if err != nil {
panic(err)
}
stdout := os.Stdout
defer func() {
os.Stdout = stdout
log.SetOutput(os.Stderr)
}()
os.Stdout = writer
log.SetOutput(writer)
out := make(chan string)
wg := new(sync.WaitGroup)
wg.Add(1)
go func() {
var buf bytes.Buffer
wg.Done()
_, err = io.Copy(&buf, reader)
if err != nil {
panic(err)
}
out <- buf.String()
}()
wg.Wait()
f()
_ = writer.Close()
return <-out
}