aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/runtest
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-07-04 17:40:12 +0200
committerDmitry Vyukov <dvyukov@google.com>2024-07-08 07:01:24 +0000
commitb1cb3770ed1055dd3ec9a74ba287139fde14789e (patch)
tree6b2902a0e92c8adc7254329b8c079f7dfaf71aa8 /pkg/runtest
parent7ca8bbea5b1d25d89927d7b017d7f7da4ab226a7 (diff)
pkg/runtest: pass a proper context for Request.Wait() calls
Otherwise there's a risk of an infinite hang in case RPCServer has finished its execution.
Diffstat (limited to 'pkg/runtest')
-rw-r--r--pkg/runtest/run_test.go15
1 files changed, 9 insertions, 6 deletions
diff --git a/pkg/runtest/run_test.go b/pkg/runtest/run_test.go
index 9d42e110c..19619ee73 100644
--- a/pkg/runtest/run_test.go
+++ b/pkg/runtest/run_test.go
@@ -366,13 +366,13 @@ func testCover(t *testing.T, target *prog.Target) {
if test.Is64Bit {
vmArch = targets.TestArch64
}
- startRPCServer(t, target, executor, vmArch, source, test.MaxSignal, test.CoverFilter, nil)
- testCover1(t, target, test, source)
+ ctx := startRPCServer(t, target, executor, vmArch, source, test.MaxSignal, test.CoverFilter, nil)
+ testCover1(t, ctx, target, test, source)
})
}
}
-func testCover1(t *testing.T, target *prog.Target, test CoverTest, source *queue.PlainQueue) {
+func testCover1(t *testing.T, ctx context.Context, target *prog.Target, test CoverTest, source *queue.PlainQueue) {
text := fmt.Sprintf(`syz_inject_cover(&AUTO="%s", AUTO)`, hex.EncodeToString(test.Input))
p, err := target.Deserialize([]byte(text), prog.Strict)
if err != nil {
@@ -389,7 +389,7 @@ func testCover1(t *testing.T, target *prog.Target, test CoverTest, source *queue
req.ReturnAllSignal = []int{0}
}
source.Submit(req)
- res := req.Wait(context.Background())
+ res := req.Wait(ctx)
if res.Err != nil || res.Info == nil || len(res.Info.Calls) != 1 || res.Info.Calls[0] == nil {
t.Fatalf("program execution failed: status=%v err=%v\n%s", res.Status, res.Err, res.Output)
}
@@ -438,7 +438,7 @@ func makeComps(comps ...Comparison) []byte {
}
func startRPCServer(t *testing.T, target *prog.Target, executor, vmArch string, source queue.Source,
- maxSignal, coverFilter []uint64, machineChecked func(features flatrpc.Feature)) {
+ maxSignal, coverFilter []uint64, machineChecked func(features flatrpc.Feature)) context.Context {
dir, err := os.MkdirTemp("", "syz-runtest")
if err != nil {
t.Fatal(err)
@@ -472,7 +472,9 @@ func startRPCServer(t *testing.T, target *prog.Target, executor, vmArch string,
}
errc := make(chan error)
go func() {
- errc <- rpcserver.RunLocal(cfg)
+ err := rpcserver.RunLocal(cfg)
+ done()
+ errc <- err
}()
t.Cleanup(func() {
done()
@@ -492,6 +494,7 @@ func startRPCServer(t *testing.T, target *prog.Target, executor, vmArch string,
t.Fatalf("failed to remove temp dir %v: %v", dir, err)
}
})
+ return ctx
}
func TestParsing(t *testing.T) {