|
|
@ -3,7 +3,6 @@ package process
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
import (
|
|
|
|
"bufio"
|
|
|
|
"bufio"
|
|
|
|
"errors"
|
|
|
|
|
|
|
|
"fmt"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"io"
|
|
|
|
"net"
|
|
|
|
"net"
|
|
|
@ -27,12 +26,6 @@ import (
|
|
|
|
|
|
|
|
|
|
|
|
var mu sync.Mutex
|
|
|
|
var mu sync.Mutex
|
|
|
|
|
|
|
|
|
|
|
|
func skipIfNotImplementedErr(t *testing.T, err error) {
|
|
|
|
|
|
|
|
if errors.Is(err, common.ErrNotImplementedError) {
|
|
|
|
|
|
|
|
t.Skip("not implemented")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func testGetProcess() Process {
|
|
|
|
func testGetProcess() Process {
|
|
|
|
checkPid := os.Getpid() // process.test
|
|
|
|
checkPid := os.Getpid() // process.test
|
|
|
|
ret, _ := NewProcess(int32(checkPid))
|
|
|
|
ret, _ := NewProcess(int32(checkPid))
|
|
|
@ -41,7 +34,7 @@ func testGetProcess() Process {
|
|
|
|
|
|
|
|
|
|
|
|
func TestPids(t *testing.T) {
|
|
|
|
func TestPids(t *testing.T) {
|
|
|
|
ret, err := Pids()
|
|
|
|
ret, err := Pids()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
assert.NotEmptyf(t, ret, "could not get pids %v", ret)
|
|
|
|
assert.NotEmptyf(t, ret, "could not get pids %v", ret)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -50,7 +43,7 @@ func TestPid_exists(t *testing.T) {
|
|
|
|
checkPid := os.Getpid()
|
|
|
|
checkPid := os.Getpid()
|
|
|
|
|
|
|
|
|
|
|
|
ret, err := PidExists(int32(checkPid))
|
|
|
|
ret, err := PidExists(int32(checkPid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
|
|
assert.Truef(t, ret, "could not get process exists: %v", ret)
|
|
|
|
assert.Truef(t, ret, "could not get process exists: %v", ret)
|
|
|
@ -60,7 +53,7 @@ func TestNewProcess(t *testing.T) {
|
|
|
|
checkPid := os.Getpid()
|
|
|
|
checkPid := os.Getpid()
|
|
|
|
|
|
|
|
|
|
|
|
ret, err := NewProcess(int32(checkPid))
|
|
|
|
ret, err := NewProcess(int32(checkPid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
empty := &Process{}
|
|
|
|
empty := &Process{}
|
|
|
|
if runtime.GOOS != "windows" { // Windows pid is 0
|
|
|
|
if runtime.GOOS != "windows" { // Windows pid is 0
|
|
|
@ -72,12 +65,12 @@ func TestMemoryMaps(t *testing.T) {
|
|
|
|
checkPid := os.Getpid()
|
|
|
|
checkPid := os.Getpid()
|
|
|
|
|
|
|
|
|
|
|
|
ret, err := NewProcess(int32(checkPid))
|
|
|
|
ret, err := NewProcess(int32(checkPid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
|
|
// ungrouped memory maps
|
|
|
|
// ungrouped memory maps
|
|
|
|
mmaps, err := ret.MemoryMaps(false)
|
|
|
|
mmaps, err := ret.MemoryMaps(false)
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "memory map get error %v", err)
|
|
|
|
require.NoErrorf(t, err, "memory map get error %v", err)
|
|
|
|
empty := MemoryMapsStat{}
|
|
|
|
empty := MemoryMapsStat{}
|
|
|
|
for _, m := range *mmaps {
|
|
|
|
for _, m := range *mmaps {
|
|
|
@ -86,7 +79,7 @@ func TestMemoryMaps(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
|
|
// grouped memory maps
|
|
|
|
// grouped memory maps
|
|
|
|
mmaps, err = ret.MemoryMaps(true)
|
|
|
|
mmaps, err = ret.MemoryMaps(true)
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "memory map get error %v", err)
|
|
|
|
require.NoErrorf(t, err, "memory map get error %v", err)
|
|
|
|
assert.Lenf(t, *mmaps, 1, "grouped memory maps length (%v) is not equal to 1", len(*mmaps))
|
|
|
|
assert.Lenf(t, *mmaps, 1, "grouped memory maps length (%v) is not equal to 1", len(*mmaps))
|
|
|
|
assert.NotEqualf(t, (*mmaps)[0], empty, "memory map is empty")
|
|
|
|
assert.NotEqualf(t, (*mmaps)[0], empty, "memory map is empty")
|
|
|
@ -96,7 +89,7 @@ func TestMemoryInfo(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
v, err := p.MemoryInfo()
|
|
|
|
v, err := p.MemoryInfo()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting memory info error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting memory info error %v", err)
|
|
|
|
empty := MemoryInfoStat{}
|
|
|
|
empty := MemoryInfoStat{}
|
|
|
|
if v == nil || *v == empty {
|
|
|
|
if v == nil || *v == empty {
|
|
|
@ -108,7 +101,7 @@ func TestCmdLine(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
v, err := p.Cmdline()
|
|
|
|
v, err := p.Cmdline()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting cmdline error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting cmdline error %v", err)
|
|
|
|
assert.Containsf(t, v, "process.test", "invalid cmd line %v", v)
|
|
|
|
assert.Containsf(t, v, "process.test", "invalid cmd line %v", v)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -117,7 +110,7 @@ func TestCmdLineSlice(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
v, err := p.CmdlineSlice()
|
|
|
|
v, err := p.CmdlineSlice()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting cmdline slice error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting cmdline slice error %v", err)
|
|
|
|
assert.Truef(t, reflect.DeepEqual(v, os.Args), "returned cmdline slice not as expected:\nexp: %v\ngot: %v", os.Args, v)
|
|
|
|
assert.Truef(t, reflect.DeepEqual(v, os.Args), "returned cmdline slice not as expected:\nexp: %v\ngot: %v", os.Args, v)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -126,7 +119,7 @@ func TestPpid(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
v, err := p.Ppid()
|
|
|
|
v, err := p.Ppid()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting ppid error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting ppid error %v", err)
|
|
|
|
assert.NotZerof(t, v, "return value is 0 %v", v)
|
|
|
|
assert.NotZerof(t, v, "return value is 0 %v", v)
|
|
|
|
expected := os.Getppid()
|
|
|
|
expected := os.Getppid()
|
|
|
@ -137,7 +130,7 @@ func TestStatus(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
v, err := p.Status()
|
|
|
|
v, err := p.Status()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting status error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting status error %v", err)
|
|
|
|
assert.NotEmptyf(t, v, "could not get state")
|
|
|
|
assert.NotEmptyf(t, v, "could not get state")
|
|
|
|
if v[0] != Running && v[0] != Sleep {
|
|
|
|
if v[0] != Running && v[0] != Sleep {
|
|
|
@ -149,7 +142,7 @@ func TestTerminal(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
_, err := p.Terminal()
|
|
|
|
_, err := p.Terminal()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
assert.NoErrorf(t, err, "getting terminal error %v", err)
|
|
|
|
assert.NoErrorf(t, err, "getting terminal error %v", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -157,7 +150,7 @@ func TestIOCounters(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
v, err := p.IOCounters()
|
|
|
|
v, err := p.IOCounters()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting iocounter error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting iocounter error %v", err)
|
|
|
|
empty := &IOCountersStat{}
|
|
|
|
empty := &IOCountersStat{}
|
|
|
|
assert.NotSamef(t, v, empty, "error %v", v)
|
|
|
|
assert.NotSamef(t, v, empty, "error %v", v)
|
|
|
@ -167,7 +160,7 @@ func TestNumCtx(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
_, err := p.NumCtxSwitches()
|
|
|
|
_, err := p.NumCtxSwitches()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
assert.NoErrorf(t, err, "getting numctx error %v", err)
|
|
|
|
assert.NoErrorf(t, err, "getting numctx error %v", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -180,7 +173,7 @@ func TestNice(t *testing.T) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
n, err := p.Nice()
|
|
|
|
n, err := p.Nice()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting nice error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting nice error %v", err)
|
|
|
|
if runtime.GOOS != "windows" && n != 0 && n != 20 && n != 8 {
|
|
|
|
if runtime.GOOS != "windows" && n != 0 && n != 20 && n != 8 {
|
|
|
|
t.Errorf("invalid nice: %d", n)
|
|
|
|
t.Errorf("invalid nice: %d", n)
|
|
|
@ -191,7 +184,7 @@ func TestGroups(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
v, err := p.Groups()
|
|
|
|
v, err := p.Groups()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting groups error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting groups error %v", err)
|
|
|
|
if len(v) == 0 {
|
|
|
|
if len(v) == 0 {
|
|
|
|
t.Skip("Groups is empty")
|
|
|
|
t.Skip("Groups is empty")
|
|
|
@ -202,7 +195,7 @@ func TestNumThread(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
n, err := p.NumThreads()
|
|
|
|
n, err := p.NumThreads()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting NumThread error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting NumThread error %v", err)
|
|
|
|
assert.GreaterOrEqualf(t, n, int32(0), "invalid NumThread: %d", n)
|
|
|
|
assert.GreaterOrEqualf(t, n, int32(0), "invalid NumThread: %d", n)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -211,12 +204,12 @@ func TestThreads(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
n, err := p.NumThreads()
|
|
|
|
n, err := p.NumThreads()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting NumThread error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting NumThread error %v", err)
|
|
|
|
assert.GreaterOrEqualf(t, n, int32(0), "invalid NumThread: %d", n)
|
|
|
|
assert.GreaterOrEqualf(t, n, int32(0), "invalid NumThread: %d", n)
|
|
|
|
|
|
|
|
|
|
|
|
ts, err := p.Threads()
|
|
|
|
ts, err := p.Threads()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting Threads error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting Threads error %v", err)
|
|
|
|
assert.Equalf(t, len(ts), int(n), "unexpected number of threads: %v vs %v", len(ts), n)
|
|
|
|
assert.Equalf(t, len(ts), int(n), "unexpected number of threads: %v vs %v", len(ts), n)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -225,7 +218,7 @@ func TestName(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
n, err := p.Name()
|
|
|
|
n, err := p.Name()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting name error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting name error %v", err)
|
|
|
|
assert.Containsf(t, n, "process.test", "invalid Name %s", n)
|
|
|
|
assert.Containsf(t, n, "process.test", "invalid Name %s", n)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -254,11 +247,11 @@ func TestLong_Name_With_Spaces(t *testing.T) {
|
|
|
|
require.NoError(t, cmd.Start())
|
|
|
|
require.NoError(t, cmd.Start())
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
|
|
n, err := p.Name()
|
|
|
|
n, err := p.Name()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting name error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting name error %v", err)
|
|
|
|
basename := filepath.Base(tmpfile.Name() + ".exe")
|
|
|
|
basename := filepath.Base(tmpfile.Name() + ".exe")
|
|
|
|
require.Equalf(t, basename, n, "%s != %s", basename, n)
|
|
|
|
require.Equalf(t, basename, n, "%s != %s", basename, n)
|
|
|
@ -289,11 +282,11 @@ func TestLong_Name(t *testing.T) {
|
|
|
|
require.NoError(t, cmd.Start())
|
|
|
|
require.NoError(t, cmd.Start())
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
|
|
n, err := p.Name()
|
|
|
|
n, err := p.Name()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting name error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting name error %v", err)
|
|
|
|
basename := filepath.Base(tmpfile.Name() + ".exe")
|
|
|
|
basename := filepath.Base(tmpfile.Name() + ".exe")
|
|
|
|
require.Equalf(t, basename, n, "%s != %s", basename, n)
|
|
|
|
require.Equalf(t, basename, n, "%s != %s", basename, n)
|
|
|
@ -334,10 +327,10 @@ func TestName_Against_Python(t *testing.T) {
|
|
|
|
pyName := scanner.Text() // first line printed by py3 script, its name
|
|
|
|
pyName := scanner.Text() // first line printed by py3 script, its name
|
|
|
|
t.Logf("pyName %s", pyName)
|
|
|
|
t.Logf("pyName %s", pyName)
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting process error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting process error %v", err)
|
|
|
|
name, err := p.Name()
|
|
|
|
name, err := p.Name()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting name error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting name error %v", err)
|
|
|
|
require.Equalf(t, pyName, name, "psutil and gopsutil process.Name() results differ: expected %s, got %s", pyName, name)
|
|
|
|
require.Equalf(t, pyName, name, "psutil and gopsutil process.Name() results differ: expected %s, got %s", pyName, name)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -346,7 +339,7 @@ func TestExe(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
n, err := p.Exe()
|
|
|
|
n, err := p.Exe()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting Exe error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting Exe error %v", err)
|
|
|
|
assert.Containsf(t, n, "process.test", "invalid Exe %s", n)
|
|
|
|
assert.Containsf(t, n, "process.test", "invalid Exe %s", n)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -354,7 +347,7 @@ func TestExe(t *testing.T) {
|
|
|
|
func TestCpuPercent(t *testing.T) {
|
|
|
|
func TestCpuPercent(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
_, err := p.Percent(0)
|
|
|
|
_, err := p.Percent(0)
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
duration := time.Duration(1000) * time.Microsecond
|
|
|
|
duration := time.Duration(1000) * time.Microsecond
|
|
|
|
time.Sleep(duration)
|
|
|
|
time.Sleep(duration)
|
|
|
@ -373,7 +366,7 @@ func TestCpuPercentLoop(t *testing.T) {
|
|
|
|
for i := 0; i < 2; i++ {
|
|
|
|
for i := 0; i < 2; i++ {
|
|
|
|
duration := time.Duration(100) * time.Microsecond
|
|
|
|
duration := time.Duration(100) * time.Microsecond
|
|
|
|
percent, err := p.Percent(duration)
|
|
|
|
percent, err := p.Percent(duration)
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
// if percent < 0.0 || percent > 100.0*float64(numcpu) { // TODO
|
|
|
|
// if percent < 0.0 || percent > 100.0*float64(numcpu) { // TODO
|
|
|
|
require.GreaterOrEqualf(t, percent, 0.0, "CPUPercent value is invalid: %f, %d", percent, numcpu)
|
|
|
|
require.GreaterOrEqualf(t, percent, 0.0, "CPUPercent value is invalid: %f, %d", percent, numcpu)
|
|
|
@ -388,7 +381,7 @@ func TestCreateTime(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
c, err := p.CreateTime()
|
|
|
|
c, err := p.CreateTime()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
|
|
assert.GreaterOrEqualf(t, c, 1420000000, "process created time is wrong.")
|
|
|
|
assert.GreaterOrEqualf(t, c, 1420000000, "process created time is wrong.")
|
|
|
@ -403,7 +396,7 @@ func TestParent(t *testing.T) {
|
|
|
|
p := testGetProcess()
|
|
|
|
p := testGetProcess()
|
|
|
|
|
|
|
|
|
|
|
|
c, err := p.Parent()
|
|
|
|
c, err := p.Parent()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNilf(t, c, "could not get parent")
|
|
|
|
require.NotNilf(t, c, "could not get parent")
|
|
|
|
require.NotZerof(t, c.Pid, "wrong parent pid")
|
|
|
|
require.NotZerof(t, c.Pid, "wrong parent pid")
|
|
|
@ -447,7 +440,7 @@ func TestConnections(t *testing.T) {
|
|
|
|
<-serverEstablished
|
|
|
|
<-serverEstablished
|
|
|
|
|
|
|
|
|
|
|
|
c, err := p.Connections()
|
|
|
|
c, err := p.Connections()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotEmptyf(t, c, "no connections found")
|
|
|
|
require.NotEmptyf(t, c, "no connections found")
|
|
|
|
|
|
|
|
|
|
|
@ -485,7 +478,7 @@ func TestChildren(t *testing.T) {
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
|
|
|
|
|
|
|
|
c, err := p.Children()
|
|
|
|
c, err := p.Children()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotEmptyf(t, c, "children is empty")
|
|
|
|
require.NotEmptyf(t, c, "children is empty")
|
|
|
|
found := false
|
|
|
|
found := false
|
|
|
@ -505,7 +498,7 @@ func TestUsername(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
|
|
process, _ := NewProcess(int32(myPid))
|
|
|
|
process, _ := NewProcess(int32(myPid))
|
|
|
|
pidUsername, err := process.Username()
|
|
|
|
pidUsername, err := process.Username()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
assert.Equal(t, myUsername, pidUsername)
|
|
|
|
assert.Equal(t, myUsername, pidUsername)
|
|
|
|
|
|
|
|
|
|
|
|
t.Log(pidUsername)
|
|
|
|
t.Log(pidUsername)
|
|
|
@ -514,12 +507,12 @@ func TestUsername(t *testing.T) {
|
|
|
|
func TestCPUTimes(t *testing.T) {
|
|
|
|
func TestCPUTimes(t *testing.T) {
|
|
|
|
pid := os.Getpid()
|
|
|
|
pid := os.Getpid()
|
|
|
|
process, err := NewProcess(int32(pid))
|
|
|
|
process, err := NewProcess(int32(pid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
|
|
spinSeconds := 0.2
|
|
|
|
spinSeconds := 0.2
|
|
|
|
cpuTimes0, err := process.Times()
|
|
|
|
cpuTimes0, err := process.Times()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
|
|
// Spin for a duration of spinSeconds
|
|
|
|
// Spin for a duration of spinSeconds
|
|
|
@ -552,11 +545,11 @@ func TestOpenFiles(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
|
|
pid := os.Getpid()
|
|
|
|
pid := os.Getpid()
|
|
|
|
p, err := NewProcess(int32(pid))
|
|
|
|
p, err := NewProcess(int32(pid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
|
|
v, err := p.OpenFiles()
|
|
|
|
v, err := p.OpenFiles()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
assert.NotEmpty(t, v) // test always open files.
|
|
|
|
assert.NotEmpty(t, v) // test always open files.
|
|
|
|
|
|
|
|
|
|
|
@ -575,10 +568,10 @@ func TestKill(t *testing.T) {
|
|
|
|
require.NoError(t, cmd.Start())
|
|
|
|
require.NoError(t, cmd.Start())
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
err = p.Kill()
|
|
|
|
err = p.Kill()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
cmd.Wait()
|
|
|
|
cmd.Wait()
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -592,15 +585,15 @@ func TestIsRunning(t *testing.T) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cmd.Start()
|
|
|
|
cmd.Start()
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
running, err := p.IsRunning()
|
|
|
|
running, err := p.IsRunning()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "IsRunning error: %v", err)
|
|
|
|
require.NoErrorf(t, err, "IsRunning error: %v", err)
|
|
|
|
require.Truef(t, running, "process should be found running")
|
|
|
|
require.Truef(t, running, "process should be found running")
|
|
|
|
cmd.Wait()
|
|
|
|
cmd.Wait()
|
|
|
|
running, err = p.IsRunning()
|
|
|
|
running, err = p.IsRunning()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "IsRunning error: %v", err)
|
|
|
|
require.NoErrorf(t, err, "IsRunning error: %v", err)
|
|
|
|
require.Falsef(t, running, "process should NOT be found running")
|
|
|
|
require.Falsef(t, running, "process should NOT be found running")
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -632,11 +625,11 @@ func TestEnviron(t *testing.T) {
|
|
|
|
defer cmd.Process.Kill()
|
|
|
|
defer cmd.Process.Kill()
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
p, err := NewProcess(int32(cmd.Process.Pid))
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
|
|
envs, err := p.Environ()
|
|
|
|
envs, err := p.Environ()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting environ error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting environ error %v", err)
|
|
|
|
var envvarFound bool
|
|
|
|
var envvarFound bool
|
|
|
|
for _, envvar := range envs {
|
|
|
|
for _, envvar := range envs {
|
|
|
@ -654,7 +647,7 @@ func TestCwd(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
|
|
process, _ := NewProcess(int32(myPid))
|
|
|
|
process, _ := NewProcess(int32(myPid))
|
|
|
|
pidCwd, err := process.Cwd()
|
|
|
|
pidCwd, err := process.Cwd()
|
|
|
|
skipIfNotImplementedErr(t, err)
|
|
|
|
common.SkipIfNotImplementedErr(t, err)
|
|
|
|
require.NoErrorf(t, err, "getting cwd error %v", err)
|
|
|
|
require.NoErrorf(t, err, "getting cwd error %v", err)
|
|
|
|
pidCwd = strings.TrimSuffix(pidCwd, string(os.PathSeparator))
|
|
|
|
pidCwd = strings.TrimSuffix(pidCwd, string(os.PathSeparator))
|
|
|
|
assert.Equal(t, currentWorkingDirectory, pidCwd)
|
|
|
|
assert.Equal(t, currentWorkingDirectory, pidCwd)
|
|
|
|