github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/pkg/signal/signal_linux_test.go (about) 1 //go:build darwin || linux 2 // +build darwin linux 3 4 package signal // import "github.com/docker/docker/pkg/signal" 5 6 import ( 7 "os" 8 "syscall" 9 "testing" 10 "time" 11 12 "gotest.tools/v3/assert" 13 is "gotest.tools/v3/assert/cmp" 14 ) 15 16 func TestCatchAll(t *testing.T) { 17 sigs := make(chan os.Signal, 1) 18 CatchAll(sigs) 19 defer StopCatch(sigs) 20 21 listOfSignals := map[string]string{ 22 "CONT": syscall.SIGCONT.String(), 23 "HUP": syscall.SIGHUP.String(), 24 "CHLD": syscall.SIGCHLD.String(), 25 "ILL": syscall.SIGILL.String(), 26 "FPE": syscall.SIGFPE.String(), 27 "CLD": syscall.SIGCLD.String(), 28 } 29 30 for sigStr := range listOfSignals { 31 if signal, ok := SignalMap[sigStr]; ok { 32 syscall.Kill(syscall.Getpid(), signal) 33 s := <-sigs 34 assert.Check(t, is.Equal(s.String(), signal.String())) 35 } 36 } 37 } 38 39 func TestCatchAllIgnoreSigUrg(t *testing.T) { 40 sigs := make(chan os.Signal, 1) 41 CatchAll(sigs) 42 defer StopCatch(sigs) 43 44 err := syscall.Kill(syscall.Getpid(), syscall.SIGURG) 45 assert.NilError(t, err) 46 timer := time.NewTimer(1 * time.Second) 47 defer timer.Stop() 48 select { 49 case <-timer.C: 50 case s := <-sigs: 51 t.Fatalf("expected no signals to be handled, but received %q", s.String()) 52 } 53 } 54 55 func TestStopCatch(t *testing.T) { 56 signal := SignalMap["HUP"] 57 channel := make(chan os.Signal, 1) 58 CatchAll(channel) 59 syscall.Kill(syscall.Getpid(), signal) 60 signalString := <-channel 61 assert.Check(t, is.Equal(signalString.String(), signal.String())) 62 63 StopCatch(channel) 64 _, ok := <-channel 65 assert.Check(t, is.Equal(ok, false)) 66 }