384 lines
7.6 KiB
Go
384 lines
7.6 KiB
Go
// +build linux
|
|
|
|
package sensors
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"testing"
|
|
|
|
"github.com/influxdata/telegraf/testutil"
|
|
)
|
|
|
|
func TestGatherDefault(t *testing.T) {
|
|
s := Sensors{
|
|
RemoveNumbers: true,
|
|
Timeout: defaultTimeout,
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
map[string]string{
|
|
"chip": "atk0110-acpi-0",
|
|
"feature": "vcore_voltage",
|
|
},
|
|
map[string]interface{}{
|
|
"in_input": 1.136,
|
|
"in_min": 0.800,
|
|
"in_max": 1.600,
|
|
},
|
|
},
|
|
{
|
|
map[string]string{
|
|
"chip": "atk0110-acpi-0",
|
|
"feature": "+3.3_voltage",
|
|
},
|
|
map[string]interface{}{
|
|
"in_input": 3.360,
|
|
"in_min": 2.970,
|
|
"in_max": 3.630,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
acc.AssertContainsTaggedFields(t, "sensors", test.fields, test.tags)
|
|
}
|
|
}
|
|
|
|
func TestGatherNotRemoveNumbers(t *testing.T) {
|
|
s := Sensors{
|
|
RemoveNumbers: false,
|
|
Timeout: defaultTimeout,
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
map[string]string{
|
|
"chip": "atk0110-acpi-0",
|
|
"feature": "vcore_voltage",
|
|
},
|
|
map[string]interface{}{
|
|
"in0_input": 1.136,
|
|
"in0_min": 0.800,
|
|
"in0_max": 1.600,
|
|
},
|
|
},
|
|
{
|
|
map[string]string{
|
|
"chip": "atk0110-acpi-0",
|
|
"feature": "+3.3_voltage",
|
|
},
|
|
map[string]interface{}{
|
|
"in1_input": 3.360,
|
|
"in1_min": 2.970,
|
|
"in1_max": 3.630,
|
|
},
|
|
},
|
|
}
|
|
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
|
|
|
|
atk0110-acpi-0
|
|
Vcore Voltage:
|
|
in0_input: 1.136
|
|
in0_min: 0.800
|
|
in0_max: 1.600
|
|
+3.3 Voltage:
|
|
in1_input: 3.360
|
|
in1_min: 2.970
|
|
in1_max: 3.630
|
|
`
|
|
|
|
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)
|
|
}
|