github.com/jfrazelle/docker@v1.1.2-0.20210712172922-bf78e25fe508/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/v3/assert" 12 is "gotest.tools/v3/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 if signal, ok := SignalMap[sigStr]; ok { 31 syscall.Kill(syscall.Getpid(), signal) 32 s := <-sigs 33 assert.Check(t, is.Equal(s.String(), signal.String())) 34 } 35 } 36 } 37 38 func TestCatchAllIgnoreSigUrg(t *testing.T) { 39 sigs := make(chan os.Signal, 1) 40 CatchAll(sigs) 41 defer StopCatch(sigs) 42 43 err := syscall.Kill(syscall.Getpid(), syscall.SIGURG) 44 assert.NilError(t, err) 45 timer := time.NewTimer(1 * time.Second) 46 defer timer.Stop() 47 select { 48 case <-timer.C: 49 case s := <-sigs: 50 t.Fatalf("expected no signals to be handled, but received %q", s.String()) 51 } 52 } 53 54 func TestStopCatch(t *testing.T) { 55 signal := SignalMap["HUP"] 56 channel := make(chan os.Signal, 1) 57 CatchAll(channel) 58 syscall.Kill(syscall.Getpid(), signal) 59 signalString := <-channel 60 assert.Check(t, is.Equal(signalString.String(), signal.String())) 61 62 StopCatch(channel) 63 _, ok := <-channel 64 assert.Check(t, is.Equal(ok, false)) 65 }