gstat/commands/processes_internals_test.go

138 lines
3.8 KiB
Go

package commands
import (
"errors"
"testing"
"github.com/stretchr/testify/assert"
)
func TestByCPULen(t *testing.T) {
t.Run("three item inside the array", func(t *testing.T) {
array := []cpuProcess{{}, {}, {}}
got := byCPU(array).Len()
want := 3
assert.Equal(t, want, got, "they should be equal")
})
t.Run("one item inside the array", func(t *testing.T) {
array := []cpuProcess{{}}
got := byCPU(array).Len()
want := 1
assert.Equal(t, want, got, "they should be equal")
})
t.Run("empty array", func(t *testing.T) {
array := []cpuProcess{}
got := byCPU(array).Len()
want := 0
assert.Equal(t, want, got, "they should be equal")
})
}
func TestByCPUSwap(t *testing.T) {
t.Run("swap array items", func(t *testing.T) {
unswaped := []cpuProcess{{Name: "foo"}, {Name: "bar"}}
swaped := []cpuProcess{{Name: "bar"}, {Name: "foo"}}
got := byCPU(unswaped)
got.Swap(0, 1)
want := byCPU(swaped)
assert.Equal(t, want, got)
})
}
func TestByCPULess(t *testing.T) {
cpuProcessArray := []cpuProcess{{CPU: 1}, {CPU: 2}}
t.Run("less on cpu field smaller", func(t *testing.T) {
got := byCPU(cpuProcessArray).Less(0, 1)
want := false
assert.Equal(t, want, got)
})
t.Run("less on cpu field bigger", func(t *testing.T) {
got := byCPU(cpuProcessArray).Less(1, 0)
want := true
assert.Equal(t, want, got)
})
}
func TestGetProcessCPUInfos(t *testing.T) {
t.Run("transform Process to cpuProcess", func(t *testing.T) {
nameFunc := func() (string, error) { return "foo", nil }
cpuProcessFunc := func() (float64, error) { return 0, nil }
process := Process{Pid: 1, Name: nameFunc, CPUPercent: cpuProcessFunc}
got, err := getProcessCPUInfos(&process)
want := &cpuProcess{Name: "foo", Pid: 1, CPU: 0}
assert.Nil(t, err, "No error expected")
assert.Equal(t, want, got)
})
t.Run("calling name function returns error", func(t *testing.T) {
wantErr := errors.New("error")
nameFunc := func() (string, error) { return "", wantErr }
cpuProcessFunc := func() (float64, error) { return 0, nil }
process := Process{Pid: 1, Name: nameFunc, CPUPercent: cpuProcessFunc}
_, gotErr := getProcessCPUInfos(&process)
assert.NotNil(t, gotErr, "An error was expected")
assert.Equal(t, wantErr, gotErr)
})
t.Run("calling cpuProcess function returns error", func(t *testing.T) {
wantErr := errors.New("error")
nameFunc := func() (string, error) { return "", nil }
cpuProcessFunc := func() (float64, error) { return 0, wantErr }
process := Process{Pid: 1, Name: nameFunc, CPUPercent: cpuProcessFunc}
_, gotErr := getProcessCPUInfos(&process)
assert.NotNil(t, gotErr, "An error was expected")
assert.Equal(t, wantErr, gotErr)
})
}
func TestGetProcessesCPUInfos(t *testing.T) {
err := errors.New("error")
nameFunc := func() (string, error) { return "foo", nil }
nameErrFunc := func() (string, error) { return "foo", err }
cpuProcessFunc := func() (float64, error) { return 0, nil }
t.Run("transform array of process into an array of cpuProcess", func(t *testing.T) {
processes := []*Process{{Pid: 2, Name: nameFunc, CPUPercent: cpuProcessFunc}, {Pid: 1, Name: nameFunc, CPUPercent: cpuProcessFunc}}
got, gotErr := getProcessesCPUInfos(processes)
want := []cpuProcess{{Name: "foo", CPU: 0, Pid: 2}, {Name: "foo", CPU: 0, Pid: 1}}
assert.Nil(t, gotErr, "No error expected")
assert.Equal(t, want, got)
})
t.Run("return error directly if one happens", func(t *testing.T) {
processes := []*Process{{Pid: 2, Name: nameFunc, CPUPercent: cpuProcessFunc}, {Pid: 1, Name: nameErrFunc, CPUPercent: cpuProcessFunc}}
got, gotErr := getProcessesCPUInfos(processes)
want := []cpuProcess{{Name: "foo", CPU: 0, Pid: 2}}
wantErr := err
assert.NotNil(t, gotErr, "an error was expected")
assert.Equal(t, wantErr, gotErr)
assert.Equal(t, want, got)
})
}