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
214
plugins/inputs/lvm/lvm_test.go
Normal file
214
plugins/inputs/lvm/lvm_test.go
Normal file
|
@ -0,0 +1,214 @@
|
|||
package lvm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
)
|
||||
|
||||
func TestGather(t *testing.T) {
|
||||
var acc testutil.Accumulator
|
||||
|
||||
lvm := LVM{
|
||||
PVSBinary: "/usr/sbin/pvs",
|
||||
VGSBinary: "/usr/sbin/vgs",
|
||||
LVSBinary: "/usr/sbin/lvs",
|
||||
}
|
||||
|
||||
// overwriting exec commands with mock commands
|
||||
execCommand = fakeExecCommand
|
||||
err := lvm.Gather(&acc)
|
||||
require.NoError(t, err)
|
||||
|
||||
pvsTags := map[string]string{
|
||||
"path": "/dev/sdb",
|
||||
"vol_group": "docker",
|
||||
}
|
||||
pvsFields := map[string]interface{}{
|
||||
"size": uint64(128316342272),
|
||||
"free": uint64(3858759680),
|
||||
"used": uint64(124457582592),
|
||||
"used_percent": 96.99277612525741,
|
||||
}
|
||||
acc.AssertContainsTaggedFields(t, "lvm_physical_vol", pvsFields, pvsTags)
|
||||
|
||||
vgsTags := map[string]string{
|
||||
"name": "docker",
|
||||
}
|
||||
vgsFields := map[string]interface{}{
|
||||
"size": uint64(128316342272),
|
||||
"free": uint64(3858759680),
|
||||
"used_percent": 96.99277612525741,
|
||||
"physical_volume_count": uint64(1),
|
||||
"logical_volume_count": uint64(1),
|
||||
"snapshot_count": uint64(0),
|
||||
}
|
||||
acc.AssertContainsTaggedFields(t, "lvm_vol_group", vgsFields, vgsTags)
|
||||
|
||||
lvsTags := map[string]string{
|
||||
"name": "thinpool",
|
||||
"vol_group": "docker",
|
||||
}
|
||||
lvsFields := map[string]interface{}{
|
||||
"size": uint64(121899057152),
|
||||
"data_percent": 0.36000001430511475,
|
||||
"metadata_percent": 1.3300000429153442,
|
||||
}
|
||||
acc.AssertContainsTaggedFields(t, "lvm_logical_vol", lvsFields, lvsTags)
|
||||
}
|
||||
|
||||
// Used as a helper function that mock the exec.Command call
|
||||
func fakeExecCommand(command string, args ...string) *exec.Cmd {
|
||||
cs := []string{"-test.run=TestHelperProcess", "--", command}
|
||||
cs = append(cs, args...)
|
||||
cmd := exec.Command(os.Args[0], cs...)
|
||||
cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"}
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Used to mock exec.Command output
|
||||
func TestHelperProcess(_ *testing.T) {
|
||||
if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" {
|
||||
return
|
||||
}
|
||||
|
||||
mockPVSData := `{
|
||||
"report": [
|
||||
{
|
||||
"pv": [
|
||||
{"pv_name":"/dev/sdb", "vg_name":"docker", "pv_size":"128316342272", "pv_free":"3858759680", "pv_used":"124457582592"}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
`
|
||||
|
||||
mockVGSData := `{
|
||||
"report": [
|
||||
{
|
||||
"vg": [
|
||||
{"vg_name":"docker", "pv_count":"1", "lv_count":"1", "snap_count":"0", "vg_size":"128316342272", "vg_free":"3858759680"}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
`
|
||||
|
||||
mockLVSData := `{
|
||||
"report": [
|
||||
{
|
||||
"lv": [
|
||||
{"lv_name":"thinpool", "vg_name":"docker", "lv_size":"121899057152", "data_percent":"0.36", "metadata_percent":"1.33"}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
`
|
||||
|
||||
// Previous arguments are tests stuff, that looks like :
|
||||
// /tmp/go-build970079519/…/_test/integration.test -test.run=TestHelperProcess --
|
||||
args := os.Args
|
||||
cmd := args[3]
|
||||
if cmd == "/usr/sbin/pvs" {
|
||||
fmt.Fprint(os.Stdout, mockPVSData)
|
||||
} else if cmd == "/usr/sbin/vgs" {
|
||||
fmt.Fprint(os.Stdout, mockVGSData)
|
||||
} else if cmd == "/usr/sbin/lvs" {
|
||||
fmt.Fprint(os.Stdout, mockLVSData)
|
||||
} else {
|
||||
fmt.Fprint(os.Stdout, "command not found")
|
||||
//nolint:revive // error code is important for this "test"
|
||||
os.Exit(1)
|
||||
}
|
||||
//nolint:revive // error code is important for this "test"
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// test when no lvm devices exist
|
||||
func TestGatherNoLVM(t *testing.T) {
|
||||
var acc testutil.Accumulator
|
||||
|
||||
noLVM := LVM{
|
||||
PVSBinary: "/usr/sbin/pvs",
|
||||
VGSBinary: "/usr/sbin/vgs",
|
||||
LVSBinary: "/usr/sbin/lvs",
|
||||
}
|
||||
|
||||
// overwriting exec commands with mock commands
|
||||
execCommand = fakeExecCommandNoLVM
|
||||
err := noLVM.Gather(&acc)
|
||||
require.NoError(t, err)
|
||||
|
||||
acc.AssertDoesNotContainMeasurement(t, "lvm_physical_vol")
|
||||
acc.AssertDoesNotContainMeasurement(t, "lvm_vol_group")
|
||||
acc.AssertDoesNotContainMeasurement(t, "lvm_logical_vol")
|
||||
}
|
||||
|
||||
// Used as a helper function that mock the exec.Command call
|
||||
func fakeExecCommandNoLVM(command string, args ...string) *exec.Cmd {
|
||||
cs := []string{"-test.run=TestHelperProcessNoLVM", "--", command}
|
||||
cs = append(cs, args...)
|
||||
cmd := exec.Command(os.Args[0], cs...)
|
||||
cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"}
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Used to mock exec.Command output
|
||||
func TestHelperProcessNoLVM(_ *testing.T) {
|
||||
if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" {
|
||||
return
|
||||
}
|
||||
|
||||
mockPVSData := `{
|
||||
"report": [
|
||||
{
|
||||
"pv": [
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
`
|
||||
|
||||
mockVGSData := `{
|
||||
"report": [
|
||||
{
|
||||
"vg": [
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
`
|
||||
|
||||
mockLVSData := `{
|
||||
"report": [
|
||||
{
|
||||
"lv": [
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
`
|
||||
|
||||
// Previous arguments are tests stuff, that looks like :
|
||||
// /tmp/go-build970079519/…/_test/integration.test -test.run=TestHelperProcess --
|
||||
args := os.Args
|
||||
cmd := args[3]
|
||||
if cmd == "/usr/sbin/pvs" {
|
||||
fmt.Fprint(os.Stdout, mockPVSData)
|
||||
} else if cmd == "/usr/sbin/vgs" {
|
||||
fmt.Fprint(os.Stdout, mockVGSData)
|
||||
} else if cmd == "/usr/sbin/lvs" {
|
||||
fmt.Fprint(os.Stdout, mockLVSData)
|
||||
} else {
|
||||
fmt.Fprint(os.Stdout, "command not found")
|
||||
//nolint:revive // error code is important for this "test"
|
||||
os.Exit(1)
|
||||
}
|
||||
//nolint:revive // error code is important for this "test"
|
||||
os.Exit(0)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue