diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-07-04 17:40:12 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2024-07-08 07:01:24 +0000 |
| commit | b1cb3770ed1055dd3ec9a74ba287139fde14789e (patch) | |
| tree | 6b2902a0e92c8adc7254329b8c079f7dfaf71aa8 /pkg/runtest | |
| parent | 7ca8bbea5b1d25d89927d7b017d7f7da4ab226a7 (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.go | 15 |
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) { |
