github.com/adityamillind98/moby@v23.0.0-rc.4+incompatible/cmd/dockerd/trap/trap_linux_test.go (about) 1 //go:build linux 2 // +build linux 3 4 package trap // import "github.com/docker/docker/cmd/dockerd/trap" 5 6 import ( 7 "os" 8 "os/exec" 9 "syscall" 10 "testing" 11 12 "gotest.tools/v3/assert" 13 is "gotest.tools/v3/assert/cmp" 14 ) 15 16 func buildTestBinary(t *testing.T, tmpdir string, prefix string) (string, string) { 17 t.Helper() 18 tmpDir, err := os.MkdirTemp(tmpdir, prefix) 19 assert.NilError(t, err) 20 exePath := tmpDir + "/" + prefix 21 wd, _ := os.Getwd() 22 testHelperCode := wd + "/testfiles/main.go" 23 cmd := exec.Command("go", "build", "-o", exePath, testHelperCode) 24 err = cmd.Run() 25 assert.NilError(t, err) 26 return exePath, tmpDir 27 } 28 29 func TestTrap(t *testing.T) { 30 var sigmap = []struct { 31 name string 32 signal os.Signal 33 multiple bool 34 }{ 35 {"TERM", syscall.SIGTERM, false}, 36 {"INT", os.Interrupt, false}, 37 {"TERM", syscall.SIGTERM, true}, 38 {"INT", os.Interrupt, true}, 39 } 40 exePath, tmpDir := buildTestBinary(t, "", "main") 41 defer os.RemoveAll(tmpDir) 42 43 for _, v := range sigmap { 44 t.Run(v.name, func(t *testing.T) { 45 cmd := exec.Command(exePath) 46 cmd.Env = append(os.Environ(), "SIGNAL_TYPE="+v.name) 47 if v.multiple { 48 cmd.Env = append(cmd.Env, "IF_MULTIPLE=1") 49 } 50 err := cmd.Start() 51 assert.NilError(t, err) 52 err = cmd.Wait() 53 e, ok := err.(*exec.ExitError) 54 assert.Assert(t, ok, "expected exec.ExitError, got %T", e) 55 56 code := e.Sys().(syscall.WaitStatus).ExitStatus() 57 if v.multiple { 58 assert.Check(t, is.DeepEqual(128+int(v.signal.(syscall.Signal)), code)) 59 } else { 60 assert.Check(t, is.Equal(99, code)) 61 } 62 }) 63 } 64 }