github.com/elastic/gosigar@v0.14.3/sigar_darwin_test.go (about) 1 package gosigar_test 2 3 import ( 4 "bufio" 5 "bytes" 6 "fmt" 7 "os/exec" 8 "os/user" 9 "strconv" 10 "strings" 11 "testing" 12 13 sigar "github.com/elastic/gosigar" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 var procinfo map[string]string 18 19 func setUp(t testing.TB) { 20 out, err := exec.Command("/bin/ps", "-p1", "-c", "-opid,comm,stat,ppid,pgid,tty,pri,ni").Output() 21 if err != nil { 22 t.Fatal(err) 23 } 24 rdr := bufio.NewReader(bytes.NewReader(out)) 25 _, err = rdr.ReadString('\n') // skip header 26 if err != nil { 27 t.Fatal(err) 28 } 29 data, err := rdr.ReadString('\n') 30 if err != nil { 31 t.Fatal(err) 32 } 33 procinfo = make(map[string]string, 8) 34 fields := strings.Fields(data) 35 procinfo["pid"] = fields[0] 36 procinfo["name"] = fields[1] 37 procinfo["stat"] = fields[2] 38 procinfo["ppid"] = fields[3] 39 procinfo["pgid"] = fields[4] 40 procinfo["tty"] = fields[5] 41 procinfo["prio"] = fields[6] 42 procinfo["nice"] = fields[7] 43 44 } 45 46 func tearDown(t testing.TB) { 47 } 48 49 /* ProcState.Get() call task_info, which on Mac OS X requires root 50 or a signed executable. Skip the test if not running as root 51 to accommodate automated tests, but let users test locally using 52 `sudo -E go test` 53 */ 54 55 func TestDarwinProcState(t *testing.T) { 56 setUp(t) 57 defer tearDown(t) 58 59 state := sigar.ProcState{} 60 usr, err := user.Current() 61 if err == nil && usr.Username == "root" { 62 if assert.NoError(t, state.Get(1)) { 63 64 ppid, _ := strconv.Atoi(procinfo["ppid"]) 65 pgid, _ := strconv.Atoi(procinfo["pgid"]) 66 67 assert.Equal(t, procinfo["name"], state.Name) 68 assert.Equal(t, ppid, state.Ppid) 69 assert.Equal(t, pgid, state.Pgid) 70 assert.Equal(t, 1, state.Pgid) 71 assert.Equal(t, 0, state.Ppid) 72 } 73 } else { 74 fmt.Println("Skipping ProcState test; run as root to test") 75 } 76 }