github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/cmds/core/kill/kill_test.go (about) 1 // Copyright 2016 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "bytes" 9 "fmt" 10 "os/exec" 11 "strings" 12 "testing" 13 ) 14 15 func getUnusedPID() string { 16 cmd := exec.Command("true") 17 cmd.Start() 18 pid := cmd.Process.Pid 19 cmd.Wait() 20 return fmt.Sprintf("%d", pid) 21 } 22 23 func TestKillProcess(t *testing.T) { 24 for _, tt := range []struct { 25 name string 26 args []string 27 want string 28 }{ 29 { 30 name: "not enough args", 31 args: []string{"kill"}, 32 want: fmt.Sprintf("%s\n", eUsage), 33 }, 34 { 35 name: "list signal names with too much args", 36 args: []string{"kill", "-l", "10"}, 37 want: fmt.Sprintf("%s\n", eUsage), 38 }, 39 { 40 name: "list signal names", 41 args: []string{"kill", "-l"}, 42 want: fmt.Sprintf("%s\n", siglist()), 43 }, 44 { 45 name: "kill pid 2", 46 args: []string{"kill", "2"}, 47 want: "", 48 }, 49 { 50 name: "kill signal without signal and pid", 51 args: []string{"kill", "-s"}, 52 want: fmt.Sprintf("%s\n", eUsage), 53 }, 54 { 55 name: "kill signal with signal but without pid", 56 args: []string{"kill", "--signal", "50"}, 57 want: fmt.Sprintf("%s\n", eUsage), 58 }, 59 { 60 name: "kill signal with signal and pid", 61 args: []string{"kill", "--signal", "50", "2"}, 62 want: "", 63 }, 64 { 65 name: "kill signal with signal and wrong pid", 66 args: []string{"kill", "--signal", "50", getUnusedPID()}, 67 want: "some processes could not be killed", 68 }, 69 { 70 name: "signal is invalid", 71 args: []string{"kill", "--signal", "a"}, 72 want: "is not a valid signal", 73 }, 74 { 75 name: "signal is invalid", 76 args: []string{"kill", "-1", "a"}, 77 want: "some processes could not be killed: [a: arguments must be process or job IDS]", 78 }, 79 } { 80 t.Run(tt.name, func(t *testing.T) { 81 buf := &bytes.Buffer{} 82 if err := killProcess(buf, tt.args...); err != nil { 83 if !strings.Contains(err.Error(), tt.want) { 84 t.Errorf("killProcess() = %q, want to contain: %q", err.Error(), tt.want) 85 } 86 } else { 87 if buf.String() != tt.want { 88 t.Errorf("killProcess() = %q, want: %q", buf.String(), tt.want) 89 } 90 } 91 }) 92 } 93 }