signal_linux_test.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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/assert"
  9. is "gotest.tools/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. signal, ok := SignalMap[sigStr]
  25. if ok {
  26. go func() {
  27. time.Sleep(1 * time.Millisecond)
  28. syscall.Kill(syscall.Getpid(), signal)
  29. }()
  30. s := <-sigs
  31. assert.Check(t, is.Equal(s.String(), signal.String()))
  32. }
  33. }
  34. }
  35. func TestStopCatch(t *testing.T) {
  36. signal := SignalMap["HUP"]
  37. channel := make(chan os.Signal, 1)
  38. CatchAll(channel)
  39. go func() {
  40. time.Sleep(1 * time.Millisecond)
  41. syscall.Kill(syscall.Getpid(), signal)
  42. }()
  43. signalString := <-channel
  44. assert.Check(t, is.Equal(signalString.String(), signal.String()))
  45. StopCatch(channel)
  46. _, ok := <-channel
  47. assert.Check(t, is.Equal(ok, false))
  48. }