aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-01-28 19:01:33 +0100
committerAleksandr Nogikh <nogikh@google.com>2025-01-30 11:47:19 +0000
commitec434200ebafacb1b16633f766a0501d79e9db99 (patch)
treea5be6c84867c159d2ceb2b5b4b7ab253b341e5f6 /pkg
parente961d16c3e35fd78acdfaf5531fc1c1365c24a97 (diff)
pkg/fuzzer: collect executor debug logs in tests
It should hopefully let us debug #5674.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/fuzzer/fuzzer_test.go10
-rw-r--r--pkg/rpcserver/local.go14
2 files changed, 17 insertions, 7 deletions
diff --git a/pkg/fuzzer/fuzzer_test.go b/pkg/fuzzer/fuzzer_test.go
index 6049ac615..145ce5c8b 100644
--- a/pkg/fuzzer/fuzzer_test.go
+++ b/pkg/fuzzer/fuzzer_test.go
@@ -159,9 +159,11 @@ func (f *testFuzzer) run() {
f.crashes = make(map[string]int)
ctx, done := context.WithCancel(context.Background())
f.done = done
+ var output bytes.Buffer
cfg := &rpcserver.LocalConfig{
Config: rpcserver.Config{
Config: vminfo.Config{
+ Debug: true,
Target: f.target,
Features: flatrpc.FeatureSandboxNone,
Sandbox: flatrpc.ExecEnvSandboxNone,
@@ -169,15 +171,17 @@ func (f *testFuzzer) run() {
Procs: 4,
Slowdown: 1,
},
- Executor: f.executor,
- Dir: f.t.TempDir(),
- Context: ctx,
+ Executor: f.executor,
+ Dir: f.t.TempDir(),
+ Context: ctx,
+ OutputWriter: &output,
}
cfg.MachineChecked = func(features flatrpc.Feature, syscalls map[*prog.Syscall]bool) queue.Source {
cfg.Cover = true
return f
}
if err := rpcserver.RunLocal(cfg); err != nil {
+ f.t.Logf("executor output:\n%s", output.String())
f.t.Fatal(err)
}
assert.Equal(f.t, len(f.expectedCrashes), len(f.crashes), "not all expected crashes were found")
diff --git a/pkg/rpcserver/local.go b/pkg/rpcserver/local.go
index e4e128dcf..de6dba592 100644
--- a/pkg/rpcserver/local.go
+++ b/pkg/rpcserver/local.go
@@ -6,6 +6,7 @@ package rpcserver
import (
"context"
"fmt"
+ "io"
"os"
"os/exec"
@@ -28,9 +29,11 @@ type LocalConfig struct {
// Handle ctrl+C and exit.
HandleInterrupts bool
// Run executor under gdb.
- GDB bool
- MaxSignal []uint64
- CoverFilter []uint64
+ GDB bool
+ // Can be used to intercept stdout/stderr output.
+ OutputWriter io.Writer
+ MaxSignal []uint64
+ CoverFilter []uint64
// RunLocal exits when the context is cancelled.
Context context.Context
MachineChecked func(features flatrpc.Feature, syscalls map[*prog.Syscall]bool) queue.Source
@@ -82,7 +85,10 @@ func RunLocal(cfg *LocalConfig) error {
}
cmd := exec.CommandContext(ctx, bin, args...)
cmd.Dir = cfg.Dir
- if cfg.Debug || cfg.GDB {
+ if cfg.OutputWriter != nil {
+ cmd.Stdout = cfg.OutputWriter
+ cmd.Stderr = cfg.OutputWriter
+ } else if cfg.Debug || cfg.GDB {
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
}