Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e393c3af3f
commit
4978089aab
4963 changed files with 677545 additions and 0 deletions
227
plugins/inputs/hugepages/hugepages_test.go
Normal file
227
plugins/inputs/hugepages/hugepages_test.go
Normal file
|
@ -0,0 +1,227 @@
|
|||
//go:build linux
|
||||
|
||||
package hugepages
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
)
|
||||
|
||||
func TestInit(t *testing.T) {
|
||||
t.Run("when no config is provided then all fields should be set to default values", func(t *testing.T) {
|
||||
h := Hugepages{}
|
||||
err := h.Init()
|
||||
|
||||
require.NoError(t, err)
|
||||
require.True(t, h.gatherRoot)
|
||||
require.False(t, h.gatherPerNode)
|
||||
require.True(t, h.gatherMeminfo)
|
||||
require.Equal(t, rootHugepagePath, h.rootHugepagePath)
|
||||
require.Equal(t, numaNodePath, h.numaNodePath)
|
||||
require.Equal(t, meminfoPath, h.meminfoPath)
|
||||
})
|
||||
|
||||
t.Run("when empty hugepages types is provided then plugin should fail to initialize", func(t *testing.T) {
|
||||
h := Hugepages{Types: make([]string, 0)}
|
||||
err := h.Init()
|
||||
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), "plugin was configured with nothing to read")
|
||||
})
|
||||
|
||||
t.Run("when valid hugepages types is provided then proper flags should be set", func(t *testing.T) {
|
||||
h := Hugepages{Types: []string{"root", "per_node", "meminfo"}}
|
||||
err := h.Init()
|
||||
|
||||
require.NoError(t, err)
|
||||
require.True(t, h.gatherRoot)
|
||||
require.True(t, h.gatherPerNode)
|
||||
require.True(t, h.gatherMeminfo)
|
||||
})
|
||||
|
||||
t.Run("when hugepages types contains not supported value then plugin should fail to initialize", func(t *testing.T) {
|
||||
h := Hugepages{Types: []string{"root", "per_node", "linux_hdd", "meminfo"}}
|
||||
err := h.Init()
|
||||
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), "provided hugepages type")
|
||||
})
|
||||
}
|
||||
|
||||
func TestGather(t *testing.T) {
|
||||
t.Run("when root hugepages type is enabled then gather all root metrics successfully", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
rootHugepagePath: "./testdata/valid/mm/hugepages",
|
||||
gatherRoot: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.NoError(t, h.Gather(acc))
|
||||
|
||||
expectedFields := map[string]interface{}{
|
||||
"free": 883,
|
||||
"reserved": 0,
|
||||
"surplus": 0,
|
||||
"mempolicy": 2048,
|
||||
"total": 2048,
|
||||
"overcommit": 0,
|
||||
}
|
||||
acc.AssertContainsTaggedFields(t, "hugepages_root", expectedFields, map[string]string{"size_kb": "2048"})
|
||||
|
||||
expectedFields = map[string]interface{}{
|
||||
"free": 0,
|
||||
"reserved": 0,
|
||||
"surplus": 0,
|
||||
"mempolicy": 8,
|
||||
"total": 8,
|
||||
"overcommit": 0,
|
||||
}
|
||||
acc.AssertContainsTaggedFields(t, "hugepages_root", expectedFields, map[string]string{"size_kb": "1048576"})
|
||||
})
|
||||
|
||||
t.Run("when per node hugepages type is enabled then gather all per node metrics successfully", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
numaNodePath: "./testdata/valid/node",
|
||||
gatherPerNode: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.NoError(t, h.Gather(acc))
|
||||
|
||||
expectedFields := map[string]interface{}{
|
||||
"free": 434,
|
||||
"surplus": 0,
|
||||
"total": 1024,
|
||||
}
|
||||
acc.AssertContainsTaggedFields(t, "hugepages_per_node", expectedFields, map[string]string{"size_kb": "2048", "node": "0"})
|
||||
|
||||
expectedFields = map[string]interface{}{
|
||||
"free": 449,
|
||||
"surplus": 0,
|
||||
"total": 1024,
|
||||
}
|
||||
acc.AssertContainsTaggedFields(t, "hugepages_per_node", expectedFields, map[string]string{"size_kb": "2048", "node": "1"})
|
||||
|
||||
expectedFields = map[string]interface{}{
|
||||
"free": 0,
|
||||
"surplus": 0,
|
||||
"total": 4,
|
||||
}
|
||||
acc.AssertContainsTaggedFields(t, "hugepages_per_node", expectedFields, map[string]string{"size_kb": "1048576", "node": "0"})
|
||||
|
||||
expectedFields = map[string]interface{}{
|
||||
"free": 0,
|
||||
"surplus": 0,
|
||||
"total": 4,
|
||||
}
|
||||
acc.AssertContainsTaggedFields(t, "hugepages_per_node", expectedFields, map[string]string{"size_kb": "1048576", "node": "1"})
|
||||
})
|
||||
|
||||
t.Run("when meminfo hugepages type is enabled then gather all meminfo metrics successfully", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
meminfoPath: "./testdata/valid/meminfo",
|
||||
gatherMeminfo: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.NoError(t, h.Gather(acc))
|
||||
|
||||
expectedFields := map[string]interface{}{
|
||||
"anonymous_kb": 0,
|
||||
"shared_kb": 0,
|
||||
"file_kb": 0,
|
||||
"total": 2048,
|
||||
"free": 883,
|
||||
"reserved": 0,
|
||||
"surplus": 0,
|
||||
"size_kb": 2048,
|
||||
"tlb_kb": 12582912,
|
||||
}
|
||||
acc.AssertContainsFields(t, "hugepages_meminfo", expectedFields)
|
||||
})
|
||||
|
||||
t.Run("when root hugepages type is enabled but path is invalid then return error", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
rootHugepagePath: "./testdata/not_existing_path",
|
||||
gatherRoot: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.Error(t, h.Gather(acc))
|
||||
})
|
||||
|
||||
t.Run("when root hugepages type is enabled but files/directories don't have proper naming then gather no metrics", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
rootHugepagePath: "./testdata/invalid/1/node0/hugepages",
|
||||
gatherRoot: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.NoError(t, h.Gather(acc))
|
||||
require.Nil(t, acc.Metrics)
|
||||
})
|
||||
|
||||
t.Run("when root hugepages type is enabled but metric file doesn't contain number then return error", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
rootHugepagePath: "./testdata/invalid/2/node1/hugepages",
|
||||
gatherRoot: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.Error(t, h.Gather(acc))
|
||||
})
|
||||
|
||||
t.Run("when per node hugepages type is enabled but path is invalid then return error", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
numaNodePath: "./testdata/not_existing_path",
|
||||
gatherPerNode: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.Error(t, h.Gather(acc))
|
||||
})
|
||||
|
||||
t.Run("when per node hugepages type is enabled but files/directories don't have proper naming then gather no metrics", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
numaNodePath: "./testdata/invalid/1",
|
||||
gatherPerNode: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.NoError(t, h.Gather(acc))
|
||||
require.Nil(t, acc.Metrics)
|
||||
})
|
||||
|
||||
t.Run("when per node hugepages type is enabled but metric file doesn't contain number then return error", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
numaNodePath: "./testdata/invalid/2/",
|
||||
gatherPerNode: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.Error(t, h.Gather(acc))
|
||||
})
|
||||
|
||||
t.Run("when meminfo hugepages type is enabled but path is invalid then return error", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
meminfoPath: "./testdata/not_existing_path",
|
||||
gatherMeminfo: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.Error(t, h.Gather(acc))
|
||||
})
|
||||
|
||||
t.Run("when per node hugepages type is enabled but any metric doesn't contain number then return error", func(t *testing.T) {
|
||||
h := Hugepages{
|
||||
meminfoPath: "./testdata/invalid/meminfo",
|
||||
gatherMeminfo: true,
|
||||
}
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.Error(t, h.Gather(acc))
|
||||
})
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue