github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/pkg/signal/signal_linux_test.go (about) 1 // +build darwin linux 2 3 package signal // import "github.com/docker/docker/pkg/signal" 4 5 import ( 6 "os" 7 "syscall" 8 "testing" 9 "time" 10 11 "gotest.tools/assert" 12 is "gotest.tools/assert/cmp" 13 ) 14 15 func TestCatchAll(t *testing.T) { 16 sigs := make(chan os.Signal, 1) 17 CatchAll(sigs) 18 defer StopCatch(sigs) 19 20 listOfSignals := map[string]string{ 21 "CONT": syscall.SIGCONT.String(), 22 "HUP": syscall.SIGHUP.String(), 23 "CHLD": syscall.SIGCHLD.String(), 24 "ILL": syscall.SIGILL.String(), 25 "FPE": syscall.SIGFPE.String(), 26 "CLD": syscall.SIGCLD.String(), 27 } 28 29 for sigStr := range listOfSignals { 30 signal, ok := SignalMap[sigStr] 31 if ok { 32 go func() { 33 time.Sleep(1 * time.Millisecond) 34 syscall.Kill(syscall.Getpid(), signal) 35 }() 36 37 s := <-sigs 38 assert.Check(t, is.Equal(s.String(), signal.String())) 39 } 40 41 } 42 } 43 44 func TestStopCatch(t *testing.T) { 45 signal := SignalMap["HUP"] 46 channel := make(chan os.Signal, 1) 47 CatchAll(channel) 48 go func() { 49 50 time.Sleep(1 * time.Millisecond) 51 syscall.Kill(syscall.Getpid(), signal) 52 }() 53 signalString := <-channel 54 assert.Check(t, is.Equal(signalString.String(), signal.String())) 55 56 StopCatch(channel) 57 _, ok := <-channel 58 assert.Check(t, is.Equal(ok, false)) 59 }