118 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
package models
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/influxdata/telegraf"
 | 
						|
	"github.com/influxdata/telegraf/testutil"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
)
 | 
						|
 | 
						|
type TestProcessor struct {
 | 
						|
}
 | 
						|
 | 
						|
func (f *TestProcessor) SampleConfig() string { return "" }
 | 
						|
func (f *TestProcessor) Description() string  { return "" }
 | 
						|
 | 
						|
// Apply renames:
 | 
						|
//   "foo" to "fuz"
 | 
						|
//   "bar" to "baz"
 | 
						|
// And it also drops measurements named "dropme"
 | 
						|
func (f *TestProcessor) Apply(in ...telegraf.Metric) []telegraf.Metric {
 | 
						|
	out := make([]telegraf.Metric, 0)
 | 
						|
	for _, m := range in {
 | 
						|
		switch m.Name() {
 | 
						|
		case "foo":
 | 
						|
			out = append(out, testutil.TestMetric(1, "fuz"))
 | 
						|
		case "bar":
 | 
						|
			out = append(out, testutil.TestMetric(1, "baz"))
 | 
						|
		case "dropme":
 | 
						|
			// drop the metric!
 | 
						|
		default:
 | 
						|
			out = append(out, m)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return out
 | 
						|
}
 | 
						|
 | 
						|
func NewTestRunningProcessor() *RunningProcessor {
 | 
						|
	out := &RunningProcessor{
 | 
						|
		Name:      "test",
 | 
						|
		Processor: &TestProcessor{},
 | 
						|
		Config:    &ProcessorConfig{Filter: Filter{}},
 | 
						|
	}
 | 
						|
	return out
 | 
						|
}
 | 
						|
 | 
						|
func TestRunningProcessor(t *testing.T) {
 | 
						|
	inmetrics := []telegraf.Metric{
 | 
						|
		testutil.TestMetric(1, "foo"),
 | 
						|
		testutil.TestMetric(1, "bar"),
 | 
						|
		testutil.TestMetric(1, "baz"),
 | 
						|
	}
 | 
						|
 | 
						|
	expectedNames := []string{
 | 
						|
		"fuz",
 | 
						|
		"baz",
 | 
						|
		"baz",
 | 
						|
	}
 | 
						|
	rfp := NewTestRunningProcessor()
 | 
						|
	filteredMetrics := rfp.Apply(inmetrics...)
 | 
						|
 | 
						|
	actualNames := []string{
 | 
						|
		filteredMetrics[0].Name(),
 | 
						|
		filteredMetrics[1].Name(),
 | 
						|
		filteredMetrics[2].Name(),
 | 
						|
	}
 | 
						|
	assert.Equal(t, expectedNames, actualNames)
 | 
						|
}
 | 
						|
 | 
						|
func TestRunningProcessor_WithNameDrop(t *testing.T) {
 | 
						|
	inmetrics := []telegraf.Metric{
 | 
						|
		testutil.TestMetric(1, "foo"),
 | 
						|
		testutil.TestMetric(1, "bar"),
 | 
						|
		testutil.TestMetric(1, "baz"),
 | 
						|
	}
 | 
						|
 | 
						|
	expectedNames := []string{
 | 
						|
		"foo",
 | 
						|
		"baz",
 | 
						|
		"baz",
 | 
						|
	}
 | 
						|
	rfp := NewTestRunningProcessor()
 | 
						|
 | 
						|
	rfp.Config.Filter.NameDrop = []string{"foo"}
 | 
						|
	assert.NoError(t, rfp.Config.Filter.Compile())
 | 
						|
 | 
						|
	filteredMetrics := rfp.Apply(inmetrics...)
 | 
						|
 | 
						|
	actualNames := []string{
 | 
						|
		filteredMetrics[0].Name(),
 | 
						|
		filteredMetrics[1].Name(),
 | 
						|
		filteredMetrics[2].Name(),
 | 
						|
	}
 | 
						|
	assert.Equal(t, expectedNames, actualNames)
 | 
						|
}
 | 
						|
 | 
						|
func TestRunningProcessor_DroppedMetric(t *testing.T) {
 | 
						|
	inmetrics := []telegraf.Metric{
 | 
						|
		testutil.TestMetric(1, "dropme"),
 | 
						|
		testutil.TestMetric(1, "foo"),
 | 
						|
		testutil.TestMetric(1, "bar"),
 | 
						|
	}
 | 
						|
 | 
						|
	expectedNames := []string{
 | 
						|
		"fuz",
 | 
						|
		"baz",
 | 
						|
	}
 | 
						|
	rfp := NewTestRunningProcessor()
 | 
						|
	filteredMetrics := rfp.Apply(inmetrics...)
 | 
						|
 | 
						|
	actualNames := []string{
 | 
						|
		filteredMetrics[0].Name(),
 | 
						|
		filteredMetrics[1].Name(),
 | 
						|
	}
 | 
						|
	assert.Equal(t, expectedNames, actualNames)
 | 
						|
}
 |