Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/prometheus/operator/configgen/config_gen_test.go
5391 views
1
package configgen
2
3
import (
4
"net/url"
5
"testing"
6
7
"github.com/grafana/agent/component/common/config"
8
"github.com/grafana/agent/component/common/kubernetes"
9
promopv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
10
promConfig "github.com/prometheus/common/config"
11
"github.com/prometheus/common/model"
12
promk8s "github.com/prometheus/prometheus/discovery/kubernetes"
13
"github.com/prometheus/prometheus/model/relabel"
14
"github.com/stretchr/testify/assert"
15
k8sv1 "k8s.io/api/core/v1"
16
)
17
18
var (
19
configGen = &ConfigGenerator{}
20
)
21
22
func TestGenerateK8SSDConfig(t *testing.T) {
23
nsDiscovery := promk8s.NamespaceDiscovery{
24
Names: []string{""},
25
}
26
27
tests := []struct {
28
name string
29
client *kubernetes.ClientArguments
30
attachMetadata *promopv1.AttachMetadata
31
expected *promk8s.SDConfig
32
}{
33
{
34
name: "empty",
35
client: &kubernetes.ClientArguments{
36
APIServer: config.URL{},
37
},
38
attachMetadata: nil,
39
expected: &promk8s.SDConfig{
40
Role: promk8s.RoleEndpoint,
41
NamespaceDiscovery: nsDiscovery,
42
},
43
},
44
{
45
name: "kubeconfig",
46
client: &kubernetes.ClientArguments{
47
KubeConfig: "kubeconfig",
48
APIServer: config.URL{},
49
},
50
attachMetadata: nil,
51
expected: &promk8s.SDConfig{
52
Role: promk8s.RoleEndpoint,
53
NamespaceDiscovery: nsDiscovery,
54
KubeConfig: "kubeconfig",
55
},
56
},
57
{
58
name: "attach metadata",
59
client: &kubernetes.ClientArguments{
60
APIServer: config.URL{},
61
},
62
attachMetadata: &promopv1.AttachMetadata{
63
Node: true,
64
},
65
expected: &promk8s.SDConfig{
66
Role: promk8s.RoleEndpoint,
67
NamespaceDiscovery: nsDiscovery,
68
AttachMetadata: promk8s.AttachMetadataConfig{Node: true},
69
},
70
},
71
{
72
name: "http client config",
73
client: &kubernetes.ClientArguments{
74
APIServer: config.URL{
75
URL: &url.URL{
76
Scheme: "https",
77
Host: "localhost:8080",
78
},
79
},
80
HTTPClientConfig: config.HTTPClientConfig{
81
BasicAuth: &config.BasicAuth{
82
Username: "username",
83
Password: "password",
84
},
85
BearerToken: "bearer",
86
BearerTokenFile: "bearer_file",
87
TLSConfig: config.TLSConfig{
88
CAFile: "ca_file",
89
CertFile: "cert_file",
90
},
91
Authorization: &config.Authorization{
92
Credentials: "credentials",
93
},
94
},
95
},
96
attachMetadata: nil,
97
expected: &promk8s.SDConfig{
98
Role: promk8s.RoleEndpoint,
99
NamespaceDiscovery: nsDiscovery,
100
APIServer: promConfig.URL{
101
URL: &url.URL{
102
Scheme: "https",
103
Host: "localhost:8080",
104
},
105
},
106
HTTPClientConfig: promConfig.HTTPClientConfig{
107
BasicAuth: &promConfig.BasicAuth{
108
Username: "username",
109
Password: "password",
110
},
111
BearerToken: "bearer",
112
BearerTokenFile: "bearer_file",
113
TLSConfig: promConfig.TLSConfig{
114
CAFile: "ca_file",
115
CertFile: "cert_file",
116
},
117
Authorization: &promConfig.Authorization{
118
Type: "Bearer",
119
Credentials: "credentials",
120
},
121
},
122
},
123
},
124
}
125
for _, tt := range tests {
126
t.Run(tt.name, func(t *testing.T) {
127
cg := &ConfigGenerator{
128
Client: tt.client,
129
}
130
got := cg.generateK8SSDConfig(promopv1.NamespaceSelector{}, "", promk8s.RoleEndpoint, tt.attachMetadata)
131
assert.Equal(t, tt.expected, got)
132
})
133
}
134
}
135
136
func TestGenerateSafeTLSConfig(t *testing.T) {
137
tests := []struct {
138
name string
139
tlsConfig promopv1.SafeTLSConfig
140
hasErr bool
141
serverName string
142
}{
143
{
144
name: "empty",
145
tlsConfig: promopv1.SafeTLSConfig{
146
InsecureSkipVerify: true,
147
ServerName: "test",
148
},
149
hasErr: false,
150
serverName: "test",
151
},
152
{
153
name: "ca_file",
154
tlsConfig: promopv1.SafeTLSConfig{
155
InsecureSkipVerify: true,
156
CA: promopv1.SecretOrConfigMap{Secret: &k8sv1.SecretKeySelector{Key: "ca_file"}},
157
},
158
hasErr: true,
159
serverName: "",
160
},
161
{
162
name: "ca_file",
163
tlsConfig: promopv1.SafeTLSConfig{
164
InsecureSkipVerify: true,
165
CA: promopv1.SecretOrConfigMap{ConfigMap: &k8sv1.ConfigMapKeySelector{Key: "ca_file"}},
166
},
167
hasErr: true,
168
serverName: "",
169
},
170
{
171
name: "cert_file",
172
tlsConfig: promopv1.SafeTLSConfig{
173
InsecureSkipVerify: true,
174
Cert: promopv1.SecretOrConfigMap{Secret: &k8sv1.SecretKeySelector{Key: "cert_file"}},
175
},
176
hasErr: true,
177
serverName: "",
178
},
179
{
180
name: "cert_file",
181
tlsConfig: promopv1.SafeTLSConfig{
182
InsecureSkipVerify: true,
183
Cert: promopv1.SecretOrConfigMap{ConfigMap: &k8sv1.ConfigMapKeySelector{Key: "cert_file"}},
184
},
185
hasErr: true,
186
serverName: "",
187
},
188
{
189
name: "key_file",
190
tlsConfig: promopv1.SafeTLSConfig{
191
InsecureSkipVerify: true,
192
KeySecret: &k8sv1.SecretKeySelector{Key: "key_file"},
193
},
194
hasErr: true,
195
serverName: "",
196
},
197
}
198
for _, tt := range tests {
199
t.Run(tt.name, func(t *testing.T) {
200
got, err := configGen.generateSafeTLS(tt.tlsConfig)
201
assert.Equal(t, tt.hasErr, err != nil)
202
assert.True(t, got.InsecureSkipVerify)
203
assert.Equal(t, tt.serverName, got.ServerName)
204
})
205
}
206
}
207
208
func TestRelabelerAdd(t *testing.T) {
209
relabeler := &relabeler{}
210
211
cfgs := []*relabel.Config{
212
{
213
Action: "",
214
Separator: "",
215
Regex: relabel.Regexp{},
216
Replacement: "",
217
},
218
}
219
expected := relabel.Config{
220
Action: relabel.DefaultRelabelConfig.Action,
221
Separator: relabel.DefaultRelabelConfig.Separator,
222
Regex: relabel.DefaultRelabelConfig.Regex,
223
Replacement: relabel.DefaultRelabelConfig.Replacement,
224
}
225
relabeler.add(cfgs...)
226
cfg := cfgs[0]
227
228
assert.Equal(t, expected.Action, cfg.Action)
229
assert.Equal(t, expected.Separator, cfg.Separator)
230
assert.Equal(t, expected.Regex, cfg.Regex)
231
assert.Equal(t, expected.Replacement, cfg.Replacement)
232
}
233
234
func TestRelabelerAddFromV1(t *testing.T) {
235
relabeler := &relabeler{}
236
237
cfgs := []*promopv1.RelabelConfig{
238
{
239
SourceLabels: []promopv1.LabelName{"__meta_kubernetes_pod_label_app"},
240
Separator: ";",
241
TargetLabel: "app",
242
Regex: "(.*)",
243
Modulus: 1,
244
Replacement: "$1",
245
Action: "replace",
246
},
247
}
248
expected := relabel.Config{
249
SourceLabels: model.LabelNames{"__meta_kubernetes_pod_label_app"},
250
Separator: ";",
251
TargetLabel: "app",
252
Regex: relabel.MustNewRegexp("(.*)"),
253
Modulus: 1,
254
Replacement: "$1",
255
Action: relabel.Replace,
256
}
257
relabeler.addFromV1(cfgs...)
258
cfg := relabeler.configs[0]
259
260
assert.Equal(t, expected.SourceLabels, cfg.SourceLabels)
261
assert.Equal(t, expected.Separator, cfg.Separator)
262
assert.Equal(t, expected.TargetLabel, cfg.TargetLabel)
263
assert.Equal(t, expected.Regex, cfg.Regex)
264
assert.Equal(t, expected.Modulus, cfg.Modulus)
265
assert.Equal(t, expected.Replacement, cfg.Replacement)
266
assert.Equal(t, expected.Action, cfg.Action)
267
}
268
269