1
0
Fork 0
telegraf/plugins/inputs/intel_rdt/intel_rdt_test.go
Daniel Baumann 4978089aab
Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-24 07:26:29 +02:00

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)
})
}