Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/discovery/relabel/relabel_test.go
4096 views
1
package relabel_test
2
3
import (
4
"testing"
5
"time"
6
7
flow_relabel "github.com/grafana/agent/component/common/relabel"
8
"github.com/grafana/agent/component/discovery"
9
"github.com/grafana/agent/component/discovery/relabel"
10
"github.com/grafana/agent/pkg/flow/componenttest"
11
"github.com/grafana/agent/pkg/river"
12
"github.com/stretchr/testify/require"
13
)
14
15
func TestRelabelConfigApplication(t *testing.T) {
16
riverArguments := `
17
targets = [
18
{ "__meta_foo" = "foo", "__meta_bar" = "bar", "__address__" = "localhost", "instance" = "one", "app" = "backend", "__tmp_a" = "tmp" },
19
{ "__meta_foo" = "foo", "__meta_bar" = "bar", "__address__" = "localhost", "instance" = "two", "app" = "db", "__tmp_b" = "tmp" },
20
{ "__meta_baz" = "baz", "__meta_qux" = "qux", "__address__" = "localhost", "instance" = "three", "app" = "frontend", "__tmp_c" = "tmp" },
21
]
22
23
rule {
24
source_labels = ["__address__", "instance"]
25
separator = "/"
26
target_label = "destination"
27
action = "replace"
28
}
29
30
rule {
31
source_labels = ["app"]
32
action = "drop"
33
regex = "frontend"
34
}
35
36
rule {
37
source_labels = ["app"]
38
action = "keep"
39
regex = "backend"
40
}
41
42
rule {
43
source_labels = ["instance"]
44
target_label = "name"
45
}
46
47
rule {
48
action = "labelmap"
49
regex = "__meta_(.*)"
50
replacement = "meta_$1"
51
}
52
53
rule {
54
action = "labeldrop"
55
regex = "__meta(.*)|__tmp(.*)|instance"
56
}
57
`
58
expectedOutput := []discovery.Target{
59
map[string]string{"__address__": "localhost", "app": "backend", "destination": "localhost/one", "meta_bar": "bar", "meta_foo": "foo", "name": "one"},
60
}
61
62
var args relabel.Arguments
63
require.NoError(t, river.Unmarshal([]byte(riverArguments), &args))
64
65
tc, err := componenttest.NewControllerFromID(nil, "discovery.relabel")
66
require.NoError(t, err)
67
go func() {
68
err = tc.Run(componenttest.TestContext(t), args)
69
require.NoError(t, err)
70
}()
71
72
require.NoError(t, tc.WaitExports(time.Second))
73
require.Equal(t, expectedOutput, tc.Exports().(relabel.Exports).Output)
74
require.NotNil(t, tc.Exports().(relabel.Exports).Rules)
75
}
76
77
func TestRuleGetter(t *testing.T) {
78
originalCfg := `
79
targets = []
80
81
rule {
82
action = "keep"
83
source_labels = ["__name__"]
84
regex = "up"
85
}`
86
var args relabel.Arguments
87
require.NoError(t, river.Unmarshal([]byte(originalCfg), &args))
88
89
tc, err := componenttest.NewControllerFromID(nil, "discovery.relabel")
90
require.NoError(t, err)
91
go func() {
92
err = tc.Run(componenttest.TestContext(t), args)
93
require.NoError(t, err)
94
}()
95
96
require.NoError(t, tc.WaitExports(time.Second))
97
98
// Use the getter to retrieve the original relabeling rules.
99
exports := tc.Exports().(relabel.Exports)
100
gotOriginal := exports.Rules
101
102
// Update the component with new relabeling rules and retrieve them.
103
updatedCfg := `
104
targets = []
105
106
rule {
107
action = "drop"
108
source_labels = ["__name__"]
109
regex = "up"
110
}`
111
require.NoError(t, river.Unmarshal([]byte(updatedCfg), &args))
112
113
require.NoError(t, tc.Update(args))
114
exports = tc.Exports().(relabel.Exports)
115
gotUpdated := exports.Rules
116
117
require.NotEqual(t, gotOriginal, gotUpdated)
118
require.Len(t, gotOriginal, 1)
119
require.Len(t, gotUpdated, 1)
120
121
require.Equal(t, gotOriginal[0].Action, flow_relabel.Keep)
122
require.Equal(t, gotUpdated[0].Action, flow_relabel.Drop)
123
require.Equal(t, gotUpdated[0].SourceLabels, gotOriginal[0].SourceLabels)
124
require.Equal(t, gotUpdated[0].Regex, gotOriginal[0].Regex)
125
}
126
127