github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/container/signals_unix_test.go (about) 1 //go:build !windows 2 3 package container 4 5 import ( 6 "context" 7 "os" 8 "syscall" 9 "testing" 10 "time" 11 12 "golang.org/x/sys/unix" 13 "gotest.tools/v3/assert" 14 ) 15 16 func TestIgnoredSignals(t *testing.T) { 17 ignoredSignals := []syscall.Signal{unix.SIGPIPE, unix.SIGCHLD, unix.SIGURG} 18 19 for _, s := range ignoredSignals { 20 t.Run(unix.SignalName(s), func(t *testing.T) { 21 ctx, cancel := context.WithCancel(context.Background()) 22 defer cancel() 23 24 var called bool 25 apiClient := &fakeClient{containerKillFunc: func(ctx context.Context, container, signal string) error { 26 called = true 27 return nil 28 }} 29 30 sigc := make(chan os.Signal) 31 defer close(sigc) 32 33 done := make(chan struct{}) 34 go func() { 35 ForwardAllSignals(ctx, apiClient, t.Name(), sigc) 36 close(done) 37 }() 38 39 timer := time.NewTimer(30 * time.Second) 40 defer timer.Stop() 41 42 select { 43 case <-timer.C: 44 t.Fatal("timeout waiting to send signal") 45 case sigc <- s: 46 case <-done: 47 } 48 49 // cancel the context so ForwardAllSignals will exit after it has processed the signal we sent. 50 // This is how we know the signal was actually processed and are not introducing a flakey test. 51 cancel() 52 <-done 53 54 assert.Assert(t, !called, "kill was called") 55 }) 56 } 57 }