2020-02-06 20:40:03 +00:00
package template
import (
"testing"
"time"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/testutil"
"github.com/stretchr/testify/assert"
2020-04-13 17:57:48 +00:00
"github.com/stretchr/testify/require"
2020-02-06 20:40:03 +00:00
)
2020-04-13 17:57:48 +00:00
func TestName ( t * testing . T ) {
plugin := TemplateProcessor {
Tag : "measurement" ,
Template : "{{ .Name }}" ,
}
err := plugin . Init ( )
require . NoError ( t , err )
input := [ ] telegraf . Metric {
testutil . MustMetric (
"cpu" ,
map [ string ] string { } ,
map [ string ] interface { } {
"time_idle" : 42 ,
} ,
time . Unix ( 0 , 0 ) ,
) ,
}
actual := plugin . Apply ( input ... )
expected := [ ] telegraf . Metric {
testutil . MustMetric (
"cpu" ,
map [ string ] string {
"measurement" : "cpu" ,
} ,
map [ string ] interface { } {
"time_idle" : 42 ,
} ,
time . Unix ( 0 , 0 ) ,
) ,
}
testutil . RequireMetricsEqual ( t , expected , actual )
}
2020-02-06 20:40:03 +00:00
func TestTagTemplateConcatenate ( t * testing . T ) {
now := time . Now ( )
// Create Template processor
tmp := TemplateProcessor { Tag : "topic" , Template : ` {{ .Tag "hostname" }} . {{ .Tag "level" }} ` }
// manually init
err := tmp . Init ( )
if err != nil {
panic ( err )
}
// create metric for testing
input := [ ] telegraf . Metric { testutil . MustMetric ( "Tags" , map [ string ] string { "hostname" : "localhost" , "level" : "debug" } , nil , now ) }
// act
actual := tmp . Apply ( input [ 0 ] )
// assert
expected := [ ] telegraf . Metric { testutil . MustMetric ( "Tags" , map [ string ] string { "hostname" : "localhost" , "level" : "debug" , "topic" : "localhost.debug" } , nil , now ) }
testutil . RequireMetricsEqual ( t , expected , actual )
}
func TestMetricMissingTagsIsNotLost ( t * testing . T ) {
now := time . Now ( )
// Create Template processor
tmp := TemplateProcessor { Tag : "topic" , Template : ` {{ .Tag "hostname" }} . {{ .Tag "level" }} ` }
// manually init
err := tmp . Init ( )
if err != nil {
panic ( err )
}
// create metrics for testing
m1 := testutil . MustMetric ( "Works" , map [ string ] string { "hostname" : "localhost" , "level" : "debug" } , nil , now )
m2 := testutil . MustMetric ( "Fails" , map [ string ] string { "hostname" : "localhost" } , nil , now )
// act
actual := tmp . Apply ( m1 , m2 )
// assert
// make sure no metrics are lost when a template process fails
assert . Equal ( t , 2 , len ( actual ) , "Number of metrics input should equal number of metrics output" )
}
func TestTagAndFieldConcatenate ( t * testing . T ) {
now := time . Now ( )
// Create Template processor
tmp := TemplateProcessor { Tag : "LocalTemp" , Template : ` {{ .Tag "location" }} is {{ .Field "temperature" }} ` }
// manually init
err := tmp . Init ( )
if err != nil {
panic ( err )
}
// create metric for testing
m1 := testutil . MustMetric ( "weather" , map [ string ] string { "location" : "us-midwest" } , map [ string ] interface { } { "temperature" : "too warm" } , now )
// act
actual := tmp . Apply ( m1 )
// assert
expected := [ ] telegraf . Metric { testutil . MustMetric ( "weather" , map [ string ] string { "location" : "us-midwest" , "LocalTemp" : "us-midwest is too warm" } , map [ string ] interface { } { "temperature" : "too warm" } , now ) }
testutil . RequireMetricsEqual ( t , expected , actual )
}