Files
telegraf/plugins/processors/stats/stats_test.go
2018-08-23 13:23:41 -07:00

167 lines
3.3 KiB
Go

package stats
import (
"log"
"testing"
"time"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/metric"
"github.com/stretchr/testify/require"
)
func MakeInputMetrics(num int) []telegraf.Metric {
allOfEm := make([]telegraf.Metric, 0)
for i := 1; i <= num; i++ {
m, _ := metric.New("test", map[string]string{}, map[string]interface{}{"sample": i}, time.Now())
allOfEm = append(allOfEm, m)
}
return allOfEm
}
func MakeOutputMetric(num int, dev float64, variance float64, mean float64) telegraf.Metric {
m, _ := metric.New("test", map[string]string{}, map[string]interface{}{"sample": num,
"sample_deviation": dev,
"sample_variance": variance,
"sample_mean": mean}, time.Now())
return m
}
func MakeAllOutputMetrics(count int) []telegraf.Metric {
outputs := MakeInputMetrics(2)
type Stat struct {
val int
dev float64
variance float64
mean float64
}
testGoodies := []Stat{
{
val: 3,
dev: 0.7905694150420949,
variance: 0.625,
mean: 2,
},
{
val: 4,
dev: 1.0801234497346435,
variance: 1.1666666666666667,
mean: 2.5,
},
{
val: 5,
dev: 0.7905694150420949,
variance: 0.625,
mean: 4,
},
{
val: 6,
dev: 1.0801234497346435,
variance: 1.1666666666666667,
mean: 4.5,
},
{
val: 7,
dev: 0.7905694150420949,
variance: 0.625,
mean: 6,
},
{
val: 8,
dev: 1.0801234497346435,
variance: 1.1666666666666667,
mean: 6.5,
},
{
val: 9,
dev: 0.7905694150420949,
variance: 0.625,
mean: 8,
},
{
val: 10,
dev: 1.0801234497346435,
variance: 1.1666666666666667,
mean: 8.5,
},
{
val: 11,
dev: 0.7905694150420949,
variance: 0.625,
mean: 10,
},
{
val: 12,
dev: 1.0801234497346435,
variance: 1.1666666666666667,
mean: 10.5,
},
{
val: 13,
dev: 0.7905694150420949,
variance: 0.625,
mean: 12,
},
{
val: 14,
dev: 1.0801234497346435,
variance: 1.1666666666666667,
mean: 12.5,
},
{
val: 15,
dev: 0.7905694150420949,
variance: 0.625,
mean: 14,
},
{
val: 16,
dev: 1.0801234497346435,
variance: 1.1666666666666667,
mean: 14.5,
},
}
for _, s := range testGoodies {
outputs = append(outputs, MakeOutputMetric(s.val, s.dev, s.variance, s.mean))
}
return outputs
}
func TestStats(t *testing.T) {
tests := []struct {
StatsField string
WindowSize int
name string
input []telegraf.Metric
want []telegraf.Metric
now func() time.Time
wantErr bool
}{
{
name: "Test deviation, mean, and variant fields are added",
now: func() time.Time { return time.Unix(0, 0) },
input: MakeInputMetrics(16),
want: MakeAllOutputMetrics(16)},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := Stats{
WindowSize: 4,
StatsField: "sample",
}
got := s.Apply(tt.input...)
for i, m := range got {
std := m.Fields()["sample_deviation"]
variance := m.Fields()["sample_variance"]
mean := m.Fields()["sample_mean"]
log.Printf("m[%v]: std: %v, var: %v, mean: %v", i, std, variance, mean)
}
for i, m := range tt.want {
require.Equal(t, m.Fields(), got[i].Fields())
}
})
}
}