269 lines
4.7 KiB
Go
269 lines
4.7 KiB
Go
|
package health_test
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/influxdata/telegraf"
|
||
|
"github.com/influxdata/telegraf/plugins/outputs/health"
|
||
|
"github.com/influxdata/telegraf/testutil"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func addr(v float64) *float64 {
|
||
|
return &v
|
||
|
}
|
||
|
|
||
|
func TestFieldNotFoundIsSuccess(t *testing.T) {
|
||
|
metrics := []telegraf.Metric{
|
||
|
testutil.MustMetric(
|
||
|
"cpu",
|
||
|
map[string]string{},
|
||
|
map[string]interface{}{},
|
||
|
time.Now()),
|
||
|
}
|
||
|
|
||
|
compares := &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
GT: addr(42.0),
|
||
|
}
|
||
|
result := compares.Check(metrics)
|
||
|
require.True(t, result)
|
||
|
}
|
||
|
|
||
|
func TestStringFieldIsFailure(t *testing.T) {
|
||
|
metrics := []telegraf.Metric{
|
||
|
testutil.MustMetric(
|
||
|
"cpu",
|
||
|
map[string]string{},
|
||
|
map[string]interface{}{
|
||
|
"time_idle": "foo",
|
||
|
},
|
||
|
time.Now()),
|
||
|
}
|
||
|
|
||
|
compares := &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
GT: addr(42.0),
|
||
|
}
|
||
|
result := compares.Check(metrics)
|
||
|
require.False(t, result)
|
||
|
}
|
||
|
|
||
|
func TestFloatConvert(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
metrics []telegraf.Metric
|
||
|
expected bool
|
||
|
}{
|
||
|
{
|
||
|
name: "int64 field",
|
||
|
metrics: []telegraf.Metric{
|
||
|
testutil.MustMetric(
|
||
|
"cpu",
|
||
|
map[string]string{},
|
||
|
map[string]interface{}{
|
||
|
"time_idle": int64(42.0),
|
||
|
},
|
||
|
time.Now()),
|
||
|
},
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "uint64 field",
|
||
|
metrics: []telegraf.Metric{
|
||
|
testutil.MustMetric(
|
||
|
"cpu",
|
||
|
map[string]string{},
|
||
|
map[string]interface{}{
|
||
|
"time_idle": uint64(42.0),
|
||
|
},
|
||
|
time.Now()),
|
||
|
},
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "float64 field",
|
||
|
metrics: []telegraf.Metric{
|
||
|
testutil.MustMetric(
|
||
|
"cpu",
|
||
|
map[string]string{},
|
||
|
map[string]interface{}{
|
||
|
"time_idle": float64(42.0),
|
||
|
},
|
||
|
time.Now()),
|
||
|
},
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "bool field true",
|
||
|
metrics: []telegraf.Metric{
|
||
|
testutil.MustMetric(
|
||
|
"cpu",
|
||
|
map[string]string{},
|
||
|
map[string]interface{}{
|
||
|
"time_idle": true,
|
||
|
},
|
||
|
time.Now()),
|
||
|
},
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "bool field false",
|
||
|
metrics: []telegraf.Metric{
|
||
|
testutil.MustMetric(
|
||
|
"cpu",
|
||
|
map[string]string{},
|
||
|
map[string]interface{}{
|
||
|
"time_idle": false,
|
||
|
},
|
||
|
time.Now()),
|
||
|
},
|
||
|
expected: false,
|
||
|
},
|
||
|
{
|
||
|
name: "string field",
|
||
|
metrics: []telegraf.Metric{
|
||
|
testutil.MustMetric(
|
||
|
"cpu",
|
||
|
map[string]string{},
|
||
|
map[string]interface{}{
|
||
|
"time_idle": "42.0",
|
||
|
},
|
||
|
time.Now()),
|
||
|
},
|
||
|
expected: false,
|
||
|
},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
compares := &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
GT: addr(0.0),
|
||
|
}
|
||
|
actual := compares.Check(tt.metrics)
|
||
|
require.Equal(t, tt.expected, actual)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestOperators(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
compares *health.Compares
|
||
|
expected bool
|
||
|
}{
|
||
|
{
|
||
|
name: "gt",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
GT: addr(41.0),
|
||
|
},
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "not gt",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
GT: addr(42.0),
|
||
|
},
|
||
|
expected: false,
|
||
|
},
|
||
|
{
|
||
|
name: "ge",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
GE: addr(42.0),
|
||
|
},
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "not ge",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
GE: addr(43.0),
|
||
|
},
|
||
|
expected: false,
|
||
|
},
|
||
|
{
|
||
|
name: "lt",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
LT: addr(43.0),
|
||
|
},
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "not lt",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
LT: addr(42.0),
|
||
|
},
|
||
|
expected: false,
|
||
|
},
|
||
|
{
|
||
|
name: "le",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
LE: addr(42.0),
|
||
|
},
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "not le",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
LE: addr(41.0),
|
||
|
},
|
||
|
expected: false,
|
||
|
},
|
||
|
{
|
||
|
name: "eq",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
EQ: addr(42.0),
|
||
|
},
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "not eq",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
EQ: addr(41.0),
|
||
|
},
|
||
|
expected: false,
|
||
|
},
|
||
|
{
|
||
|
name: "ne",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
NE: addr(41.0),
|
||
|
},
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "not ne",
|
||
|
compares: &health.Compares{
|
||
|
Field: "time_idle",
|
||
|
NE: addr(42.0),
|
||
|
},
|
||
|
expected: false,
|
||
|
},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
metrics := []telegraf.Metric{
|
||
|
testutil.MustMetric(
|
||
|
"cpu",
|
||
|
map[string]string{},
|
||
|
map[string]interface{}{
|
||
|
"time_idle": 42.0,
|
||
|
},
|
||
|
time.Now()),
|
||
|
}
|
||
|
actual := tt.compares.Check(metrics)
|
||
|
require.Equal(t, tt.expected, actual)
|
||
|
})
|
||
|
}
|
||
|
}
|