signal_linux_test.go 1.4 KB

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