remove cgo dependeny with forking sensors command
closes #1414 closes #649
This commit is contained in:
committed by
Cameron Sparr
parent
abcd19493e
commit
1989a5855d
328
plugins/inputs/sensors/sensors_test.go
Normal file
328
plugins/inputs/sensors/sensors_test.go
Normal file
@@ -0,0 +1,328 @@
|
||||
// +build linux
|
||||
|
||||
package sensors
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"testing"
|
||||
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
)
|
||||
|
||||
func TestGatherDefault(t *testing.T) {
|
||||
s := Sensors{
|
||||
RemoveNumbers: true,
|
||||
path: "sensors",
|
||||
}
|
||||
// overwriting exec commands with mock commands
|
||||
execCommand = fakeExecCommand
|
||||
defer func() { execCommand = exec.Command }()
|
||||
var acc testutil.Accumulator
|
||||
|
||||
err := s.Gather(&acc)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
var tests = []struct {
|
||||
tags map[string]string
|
||||
fields map[string]interface{}
|
||||
}{
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "acpitz-virtual-0",
|
||||
"feature": "temp1",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp_input": 8.3,
|
||||
"temp_crit": 31.3,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "power_meter-acpi-0",
|
||||
"feature": "power1",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"power_average": 0.0,
|
||||
"power_average_interval": 300.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0000",
|
||||
"feature": "physical_id_0",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp_input": 77.0,
|
||||
"temp_max": 82.0,
|
||||
"temp_crit": 92.0,
|
||||
"temp_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0000",
|
||||
"feature": "core_0",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp_input": 75.0,
|
||||
"temp_max": 82.0,
|
||||
"temp_crit": 92.0,
|
||||
"temp_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0000",
|
||||
"feature": "core_1",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp_input": 77.0,
|
||||
"temp_max": 82.0,
|
||||
"temp_crit": 92.0,
|
||||
"temp_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0001",
|
||||
"feature": "physical_id_1",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp_input": 70.0,
|
||||
"temp_max": 82.0,
|
||||
"temp_crit": 92.0,
|
||||
"temp_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0001",
|
||||
"feature": "core_0",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp_input": 66.0,
|
||||
"temp_max": 82.0,
|
||||
"temp_crit": 92.0,
|
||||
"temp_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0001",
|
||||
"feature": "core_1",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp_input": 70.0,
|
||||
"temp_max": 82.0,
|
||||
"temp_crit": 92.0,
|
||||
"temp_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
acc.AssertContainsTaggedFields(t, "sensors", test.fields, test.tags)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGatherNotRemoveNumbers(t *testing.T) {
|
||||
s := Sensors{
|
||||
RemoveNumbers: false,
|
||||
path: "sensors",
|
||||
}
|
||||
// overwriting exec commands with mock commands
|
||||
execCommand = fakeExecCommand
|
||||
defer func() { execCommand = exec.Command }()
|
||||
var acc testutil.Accumulator
|
||||
|
||||
err := s.Gather(&acc)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
var tests = []struct {
|
||||
tags map[string]string
|
||||
fields map[string]interface{}
|
||||
}{
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "acpitz-virtual-0",
|
||||
"feature": "temp1",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp1_input": 8.3,
|
||||
"temp1_crit": 31.3,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "power_meter-acpi-0",
|
||||
"feature": "power1",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"power1_average": 0.0,
|
||||
"power1_average_interval": 300.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0000",
|
||||
"feature": "physical_id_0",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp1_input": 77.0,
|
||||
"temp1_max": 82.0,
|
||||
"temp1_crit": 92.0,
|
||||
"temp1_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0000",
|
||||
"feature": "core_0",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp2_input": 75.0,
|
||||
"temp2_max": 82.0,
|
||||
"temp2_crit": 92.0,
|
||||
"temp2_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0000",
|
||||
"feature": "core_1",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp3_input": 77.0,
|
||||
"temp3_max": 82.0,
|
||||
"temp3_crit": 92.0,
|
||||
"temp3_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0001",
|
||||
"feature": "physical_id_1",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp1_input": 70.0,
|
||||
"temp1_max": 82.0,
|
||||
"temp1_crit": 92.0,
|
||||
"temp1_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0001",
|
||||
"feature": "core_0",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp2_input": 66.0,
|
||||
"temp2_max": 82.0,
|
||||
"temp2_crit": 92.0,
|
||||
"temp2_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
map[string]string{
|
||||
"chip": "coretemp-isa-0001",
|
||||
"feature": "core_1",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"temp3_input": 70.0,
|
||||
"temp3_max": 82.0,
|
||||
"temp3_crit": 92.0,
|
||||
"temp3_crit_alarm": 0.0,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
acc.AssertContainsTaggedFields(t, "sensors", test.fields, test.tags)
|
||||
}
|
||||
}
|
||||
|
||||
// fackeExecCommand is a helper function that mock
|
||||
// the exec.Command call (and call the test binary)
|
||||
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
|
||||
}
|
||||
|
||||
// TestHelperProcess isn't a real test. It's used to mock exec.Command
|
||||
// For example, if you run:
|
||||
// GO_WANT_HELPER_PROCESS=1 go test -test.run=TestHelperProcess -- chrony tracking
|
||||
// it returns below mockData.
|
||||
func TestHelperProcess(t *testing.T) {
|
||||
if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" {
|
||||
return
|
||||
}
|
||||
|
||||
mockData := `acpitz-virtual-0
|
||||
temp1:
|
||||
temp1_input: 8.300
|
||||
temp1_crit: 31.300
|
||||
|
||||
power_meter-acpi-0
|
||||
power1:
|
||||
power1_average: 0.000
|
||||
power1_average_interval: 300.000
|
||||
|
||||
coretemp-isa-0000
|
||||
Physical id 0:
|
||||
temp1_input: 77.000
|
||||
temp1_max: 82.000
|
||||
temp1_crit: 92.000
|
||||
temp1_crit_alarm: 0.000
|
||||
Core 0:
|
||||
temp2_input: 75.000
|
||||
temp2_max: 82.000
|
||||
temp2_crit: 92.000
|
||||
temp2_crit_alarm: 0.000
|
||||
Core 1:
|
||||
temp3_input: 77.000
|
||||
temp3_max: 82.000
|
||||
temp3_crit: 92.000
|
||||
temp3_crit_alarm: 0.000
|
||||
|
||||
coretemp-isa-0001
|
||||
Physical id 1:
|
||||
temp1_input: 70.000
|
||||
temp1_max: 82.000
|
||||
temp1_crit: 92.000
|
||||
temp1_crit_alarm: 0.000
|
||||
Core 0:
|
||||
temp2_input: 66.000
|
||||
temp2_max: 82.000
|
||||
temp2_crit: 92.000
|
||||
temp2_crit_alarm: 0.000
|
||||
Core 1:
|
||||
temp3_input: 70.000
|
||||
temp3_max: 82.000
|
||||
temp3_crit: 92.000
|
||||
temp3_crit_alarm: 0.000
|
||||
`
|
||||
|
||||
args := os.Args
|
||||
|
||||
// Previous arguments are tests stuff, that looks like :
|
||||
// /tmp/go-build970079519/…/_test/integration.test -test.run=TestHelperProcess --
|
||||
cmd, args := args[3], args[4:]
|
||||
|
||||
if cmd == "sensors" {
|
||||
fmt.Fprint(os.Stdout, mockData)
|
||||
} else {
|
||||
fmt.Fprint(os.Stdout, "command not found")
|
||||
os.Exit(1)
|
||||
|
||||
}
|
||||
os.Exit(0)
|
||||
}
|
||||
Reference in New Issue
Block a user