Add health output plugin (#5882)
This commit is contained in:
124
plugins/outputs/health/health_test.go
Normal file
124
plugins/outputs/health/health_test.go
Normal file
@@ -0,0 +1,124 @@
|
||||
package health_test
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/plugins/outputs/health"
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestHealth(t *testing.T) {
|
||||
type Options struct {
|
||||
Compares []*health.Compares `toml:"compares"`
|
||||
Contains []*health.Contains `toml:"contains"`
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
tests := []struct {
|
||||
name string
|
||||
options Options
|
||||
metrics []telegraf.Metric
|
||||
expectedCode int
|
||||
}{
|
||||
{
|
||||
name: "healthy on startup",
|
||||
expectedCode: 200,
|
||||
},
|
||||
{
|
||||
name: "check passes",
|
||||
options: Options{
|
||||
Compares: []*health.Compares{
|
||||
{
|
||||
Field: "time_idle",
|
||||
GT: func() *float64 { v := 0.0; return &v }(),
|
||||
},
|
||||
},
|
||||
},
|
||||
metrics: []telegraf.Metric{
|
||||
testutil.MustMetric(
|
||||
"cpu",
|
||||
map[string]string{},
|
||||
map[string]interface{}{
|
||||
"time_idle": 42,
|
||||
},
|
||||
now),
|
||||
},
|
||||
expectedCode: 200,
|
||||
},
|
||||
{
|
||||
name: "check fails",
|
||||
options: Options{
|
||||
Compares: []*health.Compares{
|
||||
{
|
||||
Field: "time_idle",
|
||||
LT: func() *float64 { v := 0.0; return &v }(),
|
||||
},
|
||||
},
|
||||
},
|
||||
metrics: []telegraf.Metric{
|
||||
testutil.MustMetric(
|
||||
"cpu",
|
||||
map[string]string{},
|
||||
map[string]interface{}{
|
||||
"time_idle": 42,
|
||||
},
|
||||
now),
|
||||
},
|
||||
expectedCode: 503,
|
||||
},
|
||||
{
|
||||
name: "mixed check fails",
|
||||
options: Options{
|
||||
Compares: []*health.Compares{
|
||||
{
|
||||
Field: "time_idle",
|
||||
LT: func() *float64 { v := 0.0; return &v }(),
|
||||
},
|
||||
},
|
||||
Contains: []*health.Contains{
|
||||
{
|
||||
Field: "foo",
|
||||
},
|
||||
},
|
||||
},
|
||||
metrics: []telegraf.Metric{
|
||||
testutil.MustMetric(
|
||||
"cpu",
|
||||
map[string]string{},
|
||||
map[string]interface{}{
|
||||
"time_idle": 42,
|
||||
},
|
||||
now),
|
||||
},
|
||||
expectedCode: 503,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
output := health.NewHealth()
|
||||
output.ServiceAddress = "tcp://127.0.0.1:0"
|
||||
output.Compares = tt.options.Compares
|
||||
output.Contains = tt.options.Contains
|
||||
|
||||
err := output.Connect()
|
||||
|
||||
err = output.Write(tt.metrics)
|
||||
require.NoError(t, err)
|
||||
|
||||
resp, err := http.Get(output.Origin())
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, tt.expectedCode, resp.StatusCode)
|
||||
|
||||
_, err = ioutil.ReadAll(resp.Body)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = output.Close()
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user