Source file
src/os/exec_test.go
1
2
3
4
5 package os_test
6
7 import (
8 "internal/testenv"
9 "os"
10 "os/signal"
11 "runtime"
12 "syscall"
13 "testing"
14 "time"
15 )
16
17 func TestProcessLiteral(t *testing.T) {
18 if runtime.GOOS == "windows" {
19 t.Skip("Process literals do not work on Windows. FindProcess/etc must initialize the process handle")
20 }
21 if runtime.GOARCH == "wasm" {
22 t.Skip("Signals send + notify not fully supported om wasm port")
23 }
24
25 c := make(chan os.Signal, 1)
26 signal.Notify(c, os.Interrupt)
27 defer signal.Stop(c)
28
29 p := &os.Process{Pid: os.Getpid()}
30 if err := p.Signal(os.Interrupt); err != nil {
31 t.Fatalf("Signal got err %v, want nil", err)
32 }
33
34
35 select {
36 case <-time.After(1 * time.Second):
37 t.Error("timeout waiting for signal")
38 case <-c:
39
40 }
41 }
42
43 func TestProcessReleaseTwice(t *testing.T) {
44 testenv.MustHaveGoBuild(t)
45 t.Parallel()
46
47 r, w, err := os.Pipe()
48 if err != nil {
49 t.Fatalf("Pipe() got err %v, want nil", err)
50 }
51 defer r.Close()
52 defer w.Close()
53
54 p, err := os.StartProcess(testenv.GoToolPath(t), []string{"go"}, &os.ProcAttr{
55
56
57 Files: []*os.File{r, w, w},
58 })
59 if err != nil {
60 t.Fatalf("starting test process: %v", err)
61 }
62 if err := p.Release(); err != nil {
63 t.Fatalf("first Release: got err %v, want nil", err)
64 }
65
66 err = p.Release()
67
68
69 var want error
70 if runtime.GOOS == "windows" {
71 want = syscall.EINVAL
72 }
73
74 if err != want {
75 t.Fatalf("second Release: got err %v, want %v", err, want)
76 }
77 }
78
View as plain text