tests(cli/harness): use unused Verbose flag to pipe daemon outputs (#10601)
Obtain actual daemon output on the screen while debugging tests. Might be useful in the future even though it needs to manually set verbose somewhere.
Hector Sanjuan committed
Nov 27, 2024 at 19:35 UTC
02995d5d7dd99250198003d9cb4c09dd6193c4b7
1 file changed
+24
-4
test/cli/harness/run.go
+24
-4
@@ -3,6 +3,7 @@ package harness
3
import (
4
"fmt"
5
"io"
6
+ "os"
7
"os/exec"
8
"strings"
9
)
@@ -60,8 +61,27 @@ func environToMap(environ []string) map[string]string {
61
62
func (r *Runner) Run(req RunRequest) *RunResult {
63
cmd := exec.Command(req.Path, req.Args...)
63
- stdout := &Buffer{}
64
- stderr := &Buffer{}
64
+ var stdout io.Writer
65
+ var stderr io.Writer
66
+ outbuf := &Buffer{}
67
+ errbuf := &Buffer{}
68
+
69
+ if r.Verbose {
70
+ or, ow := io.Pipe()
71
+ errr, errw := io.Pipe()
72
+ stdout = io.MultiWriter(outbuf, ow)
73
+ stderr = io.MultiWriter(errbuf, errw)
74
+ go func() {
75
+ _, _ = io.Copy(os.Stdout, or)
76
+ }()
77
+ go func() {
78
+ _, _ = io.Copy(os.Stderr, errr)
79
+ }()
80
+ } else {
81
+ stdout = outbuf
82
+ stderr = errbuf
83
+ }
84
+
85
cmd.Stdout = stdout
86
cmd.Stderr = stderr
87
cmd.Dir = r.Dir
@@ -83,8 +103,8 @@ func (r *Runner) Run(req RunRequest) *RunResult {
103
err := req.RunFunc(cmd)
104
105
result := RunResult{
86
- Stdout: stdout,
87
- Stderr: stderr,
106
+ Stdout: outbuf,
107
+ Stderr: errbuf,
108
Cmd: cmd,
109
Err: err,
110
}