277 lines
8.1 KiB
Go
277 lines
8.1 KiB
Go
//go:build !windows
|
|
|
|
package intel_rdt
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/influxdata/telegraf/testutil"
|
|
)
|
|
|
|
type mockProc struct{}
|
|
|
|
func (*mockProc) getAllProcesses() ([]process, error) {
|
|
procs := []process{
|
|
{Name: "process", PID: 1000},
|
|
{Name: "process2", PID: 1002},
|
|
{Name: "process2", PID: 1003},
|
|
}
|
|
return procs, nil
|
|
}
|
|
|
|
func TestAssociateProcessesWithPIDs(t *testing.T) {
|
|
log := testutil.Logger{}
|
|
proc := &mockProc{}
|
|
rdt := IntelRDT{
|
|
Log: log,
|
|
processor: proc,
|
|
}
|
|
processes := []string{"process"}
|
|
expectedPID := "1000"
|
|
result, err := rdt.associateProcessesWithPIDs(processes)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedPID, result[processes[0]])
|
|
|
|
processes = []string{"process2"}
|
|
expectedPID = "1002,1003"
|
|
result, err = rdt.associateProcessesWithPIDs(processes)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedPID, result[processes[0]])
|
|
|
|
processes = []string{"process1"}
|
|
result, err = rdt.associateProcessesWithPIDs(processes)
|
|
require.NoError(t, err)
|
|
require.Empty(t, result)
|
|
}
|
|
|
|
func TestSplitCSVLineIntoValues(t *testing.T) {
|
|
line := "2020-08-12 13:34:36,\"45417,29170\",37,44,0.00,0,0.0,0.0,0.0,0.0"
|
|
expectedTimeValue := "2020-08-12 13:34:36"
|
|
expectedMetricsValue := []string{"0.00", "0", "0.0", "0.0", "0.0", "0.0"}
|
|
expectedCoreOrPidsValue := []string{"\"45417", "29170\"", "37", "44"}
|
|
|
|
splitCSV, err := splitCSVLineIntoValues(line)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedTimeValue, splitCSV.timeValue)
|
|
require.Equal(t, expectedMetricsValue, splitCSV.metricsValues)
|
|
require.Equal(t, expectedCoreOrPidsValue, splitCSV.coreOrPIDsValues)
|
|
|
|
wrongLine := "2020-08-12 13:34:36,37,44,0.00,0,0.0"
|
|
splitCSV, err = splitCSVLineIntoValues(wrongLine)
|
|
require.Error(t, err)
|
|
require.Empty(t, splitCSV.timeValue)
|
|
require.Nil(t, splitCSV.metricsValues)
|
|
require.Nil(t, splitCSV.coreOrPIDsValues)
|
|
}
|
|
|
|
func TestFindPIDsInMeasurement(t *testing.T) {
|
|
line := "2020-08-12 13:34:36,\"45417,29170\""
|
|
expected := "45417,29170"
|
|
result, err := findPIDsInMeasurement(line)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expected, result)
|
|
|
|
line = "pids not included"
|
|
result, err = findPIDsInMeasurement(line)
|
|
require.Error(t, err)
|
|
require.Empty(t, result)
|
|
}
|
|
|
|
func TestCreateArgsProcesses(t *testing.T) {
|
|
processesPIDs := map[string]string{
|
|
"process": "12345, 99999",
|
|
}
|
|
expected := "--mon-pid=all:[12345, 99999];mbt:[12345, 99999];"
|
|
result := createArgProcess(processesPIDs)
|
|
require.EqualValues(t, expected, result)
|
|
|
|
processesPIDs = map[string]string{
|
|
"process": "12345, 99999",
|
|
"process2": "44444, 11111",
|
|
}
|
|
expectedPrefix := "--mon-pid="
|
|
expectedSubstring := "all:[12345, 99999];mbt:[12345, 99999];"
|
|
expectedSubstring2 := "all:[44444, 11111];mbt:[44444, 11111];"
|
|
result = createArgProcess(processesPIDs)
|
|
require.Contains(t, result, expectedPrefix)
|
|
require.Contains(t, result, expectedSubstring)
|
|
require.Contains(t, result, expectedSubstring2)
|
|
}
|
|
|
|
func TestCreateArgsCores(t *testing.T) {
|
|
cores := []string{"1,2,3"}
|
|
expected := "--mon-core=all:[1,2,3];mbt:[1,2,3];"
|
|
result := createArgCores(cores)
|
|
require.EqualValues(t, expected, result)
|
|
|
|
cores = []string{"1,2,3", "4,5,6"}
|
|
expectedPrefix := "--mon-core="
|
|
expectedSubstring := "all:[1,2,3];mbt:[1,2,3];"
|
|
expectedSubstring2 := "all:[4,5,6];mbt:[4,5,6];"
|
|
result = createArgCores(cores)
|
|
require.Contains(t, result, expectedPrefix)
|
|
require.Contains(t, result, expectedSubstring)
|
|
require.Contains(t, result, expectedSubstring2)
|
|
}
|
|
|
|
func TestParseCoresConfig(t *testing.T) {
|
|
t.Run("empty slice", func(t *testing.T) {
|
|
var configCores []string
|
|
result, err := parseCoresConfig(configCores)
|
|
require.NoError(t, err)
|
|
require.Empty(t, result)
|
|
})
|
|
|
|
t.Run("empty string in slice", func(t *testing.T) {
|
|
configCores := []string{""}
|
|
result, err := parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Empty(t, result)
|
|
})
|
|
|
|
t.Run("not correct string", func(t *testing.T) {
|
|
configCores := []string{"wrong string"}
|
|
result, err := parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Empty(t, result)
|
|
})
|
|
|
|
t.Run("not correct string", func(t *testing.T) {
|
|
configCores := []string{"1,2", "wasd:#$!;"}
|
|
result, err := parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Empty(t, result)
|
|
})
|
|
|
|
t.Run("not correct string", func(t *testing.T) {
|
|
configCores := []string{"1,2,2"}
|
|
result, err := parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Empty(t, result)
|
|
})
|
|
|
|
t.Run("coma separated cores - positive", func(t *testing.T) {
|
|
configCores := []string{"0,1,2,3,4,5"}
|
|
expected := []string{"0,1,2,3,4,5"}
|
|
result, err := parseCoresConfig(configCores)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, expected, result)
|
|
|
|
configCores = []string{"0,1,2", "3,4,5"}
|
|
expected = []string{"0,1,2", "3,4,5"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, expected, result)
|
|
|
|
configCores = []string{"0,4,1", "2,3,5", "9"}
|
|
expected = []string{"0,4,1", "2,3,5", "9"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, expected, result)
|
|
})
|
|
|
|
t.Run("coma separated cores - negative", func(t *testing.T) {
|
|
// cannot monitor same cores in different groups
|
|
configCores := []string{"0,1,2", "2"}
|
|
result, err := parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Nil(t, result)
|
|
|
|
configCores = []string{"0,1,2", "2,3,4"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Nil(t, result)
|
|
|
|
configCores = []string{"0,-1,2", "2,3,4"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Nil(t, result)
|
|
})
|
|
|
|
t.Run("dash separated cores - positive", func(t *testing.T) {
|
|
configCores := []string{"0-5"}
|
|
expected := []string{"0,1,2,3,4,5"}
|
|
result, err := parseCoresConfig(configCores)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, expected, result)
|
|
|
|
configCores = []string{"0-5", "7-10"}
|
|
expected = []string{"0,1,2,3,4,5", "7,8,9,10"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, expected, result)
|
|
|
|
configCores = []string{"5-5"}
|
|
expected = []string{"5"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, expected, result)
|
|
})
|
|
|
|
t.Run("dash separated cores - negative", func(t *testing.T) {
|
|
// cannot monitor same cores in different groups
|
|
configCores := []string{"0-5", "2-7"}
|
|
result, err := parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Nil(t, result)
|
|
|
|
// more than two values in range
|
|
configCores = []string{"0-5-10"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Nil(t, result)
|
|
|
|
// first value cannot be higher than second
|
|
configCores = []string{"12-5"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Nil(t, result)
|
|
|
|
configCores = []string{"0-"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Nil(t, result)
|
|
})
|
|
|
|
t.Run("mixed separator - positive", func(t *testing.T) {
|
|
configCores := []string{"0-5,6,7"}
|
|
expected := []string{"0,1,2,3,4,5,6,7"}
|
|
result, err := parseCoresConfig(configCores)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, expected, result)
|
|
|
|
configCores = []string{"0-5,6,7", "8,9,10"}
|
|
expected = []string{"0,1,2,3,4,5,6,7", "8,9,10"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, expected, result)
|
|
|
|
configCores = []string{"0-7", "8-10"}
|
|
expected = []string{"0,1,2,3,4,5,6,7", "8,9,10"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, expected, result)
|
|
})
|
|
|
|
t.Run("mixed separator - negative", func(t *testing.T) {
|
|
// cannot monitor same cores in different groups
|
|
configCores := []string{"0-5,", "2-7"}
|
|
result, err := parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Nil(t, result)
|
|
|
|
// cores cannot be duplicated
|
|
configCores = []string{"0-5,5"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Nil(t, result)
|
|
|
|
// more than two values in range
|
|
configCores = []string{"0-5-6,9"}
|
|
result, err = parseCoresConfig(configCores)
|
|
require.Error(t, err)
|
|
require.Nil(t, result)
|
|
})
|
|
}
|