gopkg.in/docker/docker.v20@v20.10.27/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  }