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  }