diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-04-23 13:19:45 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-04-23 16:26:26 +0200 |
| commit | ff12bea91c22bba93d3ffc3034d813d686bc7eeb (patch) | |
| tree | 4683d8c6eb9d273becb576b39ce0789ab1f4824c /pkg/ipc/ipc_test.go | |
| parent | c7b0bb14c0629cd3d4a1c153efa0e0a3e55a6e66 (diff) | |
pkg/ipc: fix data race on config.Timeout
Diffstat (limited to 'pkg/ipc/ipc_test.go')
| -rw-r--r-- | pkg/ipc/ipc_test.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/pkg/ipc/ipc_test.go b/pkg/ipc/ipc_test.go index 0d90f2363..23f51f64e 100644 --- a/pkg/ipc/ipc_test.go +++ b/pkg/ipc/ipc_test.go @@ -100,3 +100,58 @@ func TestExecute(t *testing.T) { } } } + +func TestParallel(t *testing.T) { + target, _, _, configFlags := initTest(t) + bin := buildExecutor(t, target) + defer os.Remove(bin) + cfg := &Config{ + Executor: bin, + Flags: configFlags, + } + const P = 10 + errs := make(chan error, P) + for p := 0; p < P; p++ { + go func() { + env, err := MakeEnv(cfg, 0) + if err != nil { + errs <- fmt.Errorf("failed to create env: %v", err) + return + } + defer env.Close() + p := target.GenerateSimpleProg() + opts := &ExecOpts{} + output, info, failed, hanged, err := env.Exec(opts, p) + if err != nil { + errs <- fmt.Errorf("failed to run executor: %v", err) + return + } + if hanged { + errs <- fmt.Errorf("program hanged:\n%s", output) + return + } + if failed { + errs <- fmt.Errorf("program failed:\n%s", output) + return + } + if len(info) == 0 { + errs <- fmt.Errorf("no calls executed:\n%s", output) + return + } + if info[0].Errno != 0 { + errs <- fmt.Errorf("simple call failed: %v\n%s", info[0].Errno, output) + return + } + if len(output) != 0 { + errs <- fmt.Errorf("output on empty program") + return + } + errs <- nil + }() + } + for p := 0; p < P; p++ { + if err := <-errs; err != nil { + t.Fatal(err) + } + } +} |
