github.com/influxdata/telegraf@v1.30.3/internal/templating/engine_test.go (about)

     1  package templating
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func TestEngineAlternateSeparator(t *testing.T) {
    10  	defaultTemplate, _ := NewDefaultTemplateWithPattern("topic*")
    11  	engine, err := NewEngine("_", defaultTemplate, []string{
    12  		"/ /*/*/* /measurement/origin/measurement*",
    13  	})
    14  	require.NoError(t, err)
    15  	name, tags, field, err := engine.Apply("/telegraf/host01/cpu")
    16  	require.NoError(t, err)
    17  	require.Equal(t, "telegraf_cpu", name)
    18  	require.Equal(t, map[string]string{
    19  		"origin": "host01",
    20  	}, tags)
    21  	require.Equal(t, "", field)
    22  }
    23  
    24  func TestEngineWithWildcardTemplate(t *testing.T) {
    25  	var (
    26  		defaultTmpl, err = NewDefaultTemplateWithPattern("measurement*")
    27  		templates        = []string{
    28  			"taskmanagerTask.alarm-detector.Assign.alarmDefinitionId metricsType.process.nodeId.x.alarmDefinitionId.measurement.field rule=1",
    29  			"taskmanagerTask.*.*.*.*                                 metricsType.process.nodeId.measurement rule=2",
    30  		}
    31  	)
    32  	require.NoError(t, err)
    33  
    34  	engine, err := NewEngine(".", defaultTmpl, templates)
    35  	require.NoError(t, err)
    36  
    37  	for _, testCase := range []struct {
    38  		line        string
    39  		measurement string
    40  		field       string
    41  		tags        map[string]string
    42  	}{
    43  		{
    44  			line:        "taskmanagerTask.alarm-detector.Assign.alarmDefinitionId.timeout_errors.duration.p75",
    45  			measurement: "duration",
    46  			field:       "p75",
    47  			tags: map[string]string{
    48  				"metricsType":       "taskmanagerTask",
    49  				"process":           "alarm-detector",
    50  				"nodeId":            "Assign",
    51  				"x":                 "alarmDefinitionId",
    52  				"alarmDefinitionId": "timeout_errors",
    53  				"rule":              "1",
    54  			},
    55  		},
    56  		{
    57  			line:        "taskmanagerTask.alarm-detector.Assign.numRecordsInPerSecond.m5_rate",
    58  			measurement: "numRecordsInPerSecond",
    59  			tags: map[string]string{
    60  				"metricsType": "taskmanagerTask",
    61  				"process":     "alarm-detector",
    62  				"nodeId":      "Assign",
    63  				"rule":        "2",
    64  			},
    65  		},
    66  	} {
    67  		t.Run(testCase.line, func(t *testing.T) {
    68  			measurement, tags, field, err := engine.Apply(testCase.line)
    69  			require.NoError(t, err)
    70  
    71  			require.Equal(t, testCase.measurement, measurement)
    72  			require.Equal(t, testCase.field, field)
    73  			require.Equal(t, testCase.tags, tags)
    74  		})
    75  	}
    76  }