github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/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/assert"
    12  	is "gotest.tools/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  		signal, ok := SignalMap[sigStr]
    31  		if ok {
    32  			go func() {
    33  				time.Sleep(1 * time.Millisecond)
    34  				syscall.Kill(syscall.Getpid(), signal)
    35  			}()
    36  
    37  			s := <-sigs
    38  			assert.Check(t, is.Equal(s.String(), signal.String()))
    39  		}
    40  
    41  	}
    42  }
    43  
    44  func TestStopCatch(t *testing.T) {
    45  	signal := SignalMap["HUP"]
    46  	channel := make(chan os.Signal, 1)
    47  	CatchAll(channel)
    48  	go func() {
    49  
    50  		time.Sleep(1 * time.Millisecond)
    51  		syscall.Kill(syscall.Getpid(), signal)
    52  	}()
    53  	signalString := <-channel
    54  	assert.Check(t, is.Equal(signalString.String(), signal.String()))
    55  
    56  	StopCatch(channel)
    57  	_, ok := <-channel
    58  	assert.Check(t, is.Equal(ok, false))
    59  }