Skip to content

Commit 028f90a

Browse files
adding unit tests
1 parent ded0d91 commit 028f90a

File tree

2 files changed

+265
-0
lines changed

2 files changed

+265
-0
lines changed

cmd/otel-allocator/server/server_test.go

+45
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
logf "sigs.k8s.io/controller-runtime/pkg/log"
3535

3636
"github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/allocation"
37+
allocatorconfig "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/config"
3738
"github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target"
3839
)
3940

@@ -612,6 +613,50 @@ func TestServer_Readiness(t *testing.T) {
612613
}
613614
}
614615

616+
func TestServer_ScrapeConfigRespose(t *testing.T) {
617+
tests := []struct {
618+
description string
619+
expectedCode int
620+
}{
621+
{
622+
description: "Jobs with all actions",
623+
expectedCode: http.StatusOK,
624+
},
625+
}
626+
for _, tc := range tests {
627+
t.Run(tc.description, func(t *testing.T) {
628+
listenAddr := ":8080"
629+
s := NewServer(logger, nil, listenAddr)
630+
631+
allocCfg := allocatorconfig.CreateDefaultConfig()
632+
err := allocatorconfig.LoadFromFile("./testdata/prom-config-all-actions.yaml", &allocCfg)
633+
634+
jobToScrapeConfig := make(map[string]*promconfig.ScrapeConfig)
635+
636+
for _, scrapeConfig := range allocCfg.PromConfig.ScrapeConfigs {
637+
jobToScrapeConfig[scrapeConfig.JobName] = scrapeConfig
638+
}
639+
640+
assert.NoError(t, s.UpdateScrapeConfigResponse(jobToScrapeConfig))
641+
642+
request := httptest.NewRequest("GET", "/scrape_configs", nil)
643+
w := httptest.NewRecorder()
644+
645+
s.server.Handler.ServeHTTP(w, request)
646+
result := w.Result()
647+
648+
assert.Equal(t, tc.expectedCode, result.StatusCode)
649+
bodyBytes, err := io.ReadAll(result.Body)
650+
require.NoError(t, err)
651+
652+
// Checking to make sure yaml unmarshaling doesn't result in errors for responses containing any supported prometheus relabel action
653+
scrapeConfigs := map[string]*promconfig.ScrapeConfig{}
654+
err = yaml.Unmarshal(bodyBytes, scrapeConfigs)
655+
require.NoError(t, err)
656+
})
657+
}
658+
}
659+
615660
func newLink(jobName string) target.LinkJSON {
616661
return target.LinkJSON{Link: fmt.Sprintf("/jobs/%s/targets", url.QueryEscape(jobName))}
617662
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
collector_selector:
2+
matchlabels:
3+
app.kubernetes.io/instance: default.test
4+
app.kubernetes.io/managed-by: opentelemetry-operator
5+
prometheus_cr:
6+
scrape_interval: 60s
7+
config:
8+
scrape_configs:
9+
- job_name: job-replace
10+
scheme: http
11+
kubernetes_sd_configs:
12+
- role: pod
13+
relabel_configs:
14+
- source_labels: [__meta_kubernetes_pod_label_app]
15+
action: keep
16+
regex: "prometheus-reference-app"
17+
- source_labels: [__meta_kubernetes_pod_label_test]
18+
action: replace
19+
regex: "test$1replacement"
20+
replacement: "myreplacement$$1"
21+
target_label: "mytarget"
22+
metric_relabel_configs:
23+
- action: replace
24+
source_labels: [city]
25+
separator: ","
26+
regex: (s.*)(ttle$)
27+
replacement: "test_newest_1_$1"
28+
target_label: city
29+
- job_name: job-lowercase
30+
scheme: http
31+
kubernetes_sd_configs:
32+
- role: pod
33+
relabel_configs:
34+
- source_labels: [__meta_kubernetes_pod_label_app]
35+
action: keep
36+
regex: "prometheus-reference-app"
37+
- source_labels: [__meta_kubernetes_pod_label_test]
38+
action: lowercase
39+
regex: "test$1replacement"
40+
target_label: "mytarget"
41+
metric_relabel_configs:
42+
- action: lowercase
43+
source_labels: [city]
44+
separator: ","
45+
regex: (s.*)(ttle$)
46+
target_label: city
47+
- job_name: job-uppercase
48+
scheme: http
49+
kubernetes_sd_configs:
50+
- role: pod
51+
relabel_configs:
52+
- source_labels: [__meta_kubernetes_pod_label_app]
53+
action: keep
54+
regex: "prometheus-reference-app"
55+
- source_labels: [__meta_kubernetes_pod_label_test]
56+
action: uppercase
57+
regex: "test$1replacement"
58+
target_label: "mytarget"
59+
metric_relabel_configs:
60+
- action: uppercase
61+
source_labels: [city]
62+
regex: (s.*)(ttle$)
63+
separator: ","
64+
target_label: city
65+
- job_name: job-keep
66+
scheme: http
67+
kubernetes_sd_configs:
68+
- role: pod
69+
relabel_configs:
70+
- source_labels: [__meta_kubernetes_pod_label_app]
71+
action: keep
72+
regex: "prometheus-reference-app"
73+
metric_relabel_configs:
74+
- action: keep
75+
source_labels: [city]
76+
separator: ","
77+
regex: (s.*)(ttle$)
78+
replacement: "test_newest_1_$$1"
79+
target_label: city
80+
- job_name: job-drop
81+
scheme: http
82+
kubernetes_sd_configs:
83+
- role: pod
84+
relabel_configs:
85+
- source_labels: [__meta_kubernetes_pod_label_app]
86+
action: keep
87+
regex: "prometheus-reference-app"
88+
- source_labels: [__meta_kubernetes_pod_label_droplabel]
89+
action: drop
90+
regex: "prometheus-reference-app"
91+
metric_relabel_configs:
92+
- action: drop
93+
source_labels: [city]
94+
separator: ","
95+
regex: (s.*)(ttle$)
96+
replacement: "test_newest_1_$1"
97+
target_label: city
98+
- job_name: job-keepequal
99+
scheme: http
100+
kubernetes_sd_configs:
101+
- role: pod
102+
relabel_configs:
103+
- source_labels: [__meta_kubernetes_pod_label_app]
104+
action: keepequal
105+
target_label: __meta_kubernetes_pod_label_mylabel
106+
metric_relabel_configs:
107+
- action: keepequal
108+
source_labels: [city]
109+
target_label: city
110+
- job_name: job-dropequal
111+
scheme: http
112+
kubernetes_sd_configs:
113+
- role: pod
114+
relabel_configs:
115+
- source_labels: [__meta_kubernetes_pod_label_app]
116+
action: keep
117+
regex: "prometheus-reference-app"
118+
- source_labels: [__meta_kubernetes_pod_label_dropequallabel]
119+
action: dropequal
120+
target_label: "test"
121+
metric_relabel_configs:
122+
- action: dropequal
123+
source_labels: [citytest]
124+
target_label: city
125+
- job_name: job-hashmod
126+
scheme: http
127+
kubernetes_sd_configs:
128+
- role: pod
129+
relabel_configs:
130+
- source_labels: [__meta_kubernetes_pod_label_app]
131+
action: keep
132+
regex: "prometheus-reference-app"
133+
- source_labels: [__meta_kubernetes_pod_label_hashmod]
134+
action: hashmod
135+
modulus: 5
136+
regex: "prometheus-reference-app"
137+
target_label: city
138+
metric_relabel_configs:
139+
- action: hashmod
140+
modulus: 5
141+
separator: ","
142+
source_labels: [city]
143+
regex: (s.*)(ttle$)
144+
replacement: "test_newest_1_$1"
145+
target_label: city
146+
- job_name: job-labelmap
147+
scheme: http
148+
kubernetes_sd_configs:
149+
- role: pod
150+
relabel_configs:
151+
- source_labels: [__meta_kubernetes_pod_label_app]
152+
action: keep
153+
regex: "prometheus-reference-app"
154+
- source_labels: [__meta_kubernetes_pod_label_hashmod]
155+
action: labelmap
156+
regex: "prometheus-reference-app"
157+
replacement: "$1"
158+
target_label: city
159+
metric_relabel_configs:
160+
- action: labelmap
161+
source_labels: [city]
162+
regex: (s.*)(ttle$)
163+
separator: ","
164+
replacement: $1
165+
target_label: city
166+
- job_name: job-labeldrop
167+
scheme: http
168+
kubernetes_sd_configs:
169+
- role: pod
170+
relabel_configs:
171+
- source_labels: [__meta_kubernetes_pod_label_app]
172+
action: keep
173+
regex: "prometheus-reference-app"
174+
- action: labeldrop
175+
regex: "prometheus-reference-app"
176+
metric_relabel_configs:
177+
- action: labeldrop
178+
regex: (s.*)(ttle$)
179+
- job_name: job-labelkeep
180+
scheme: http
181+
kubernetes_sd_configs:
182+
- role: pod
183+
relabel_configs:
184+
- source_labels: [__meta_kubernetes_pod_label_app]
185+
action: keep
186+
regex: "prometheus-reference-app"
187+
- action: labelkeep
188+
regex: "prometheus-reference-app"
189+
metric_relabel_configs:
190+
- action: labelkeep
191+
regex: (s.*)(ttle$$)
192+
- job_name: job-nodename-nodeip
193+
scheme: http
194+
kubernetes_sd_configs:
195+
- role: pod
196+
relabel_configs:
197+
- source_labels: [__meta_kubernetes_pod_label_app]
198+
action: keep
199+
regex: "prometheus-reference-app"
200+
- source_labels: [__meta_kubernetes_pod_label_test]
201+
action: keep
202+
regex: "$NODE_NAME"
203+
target_label: city
204+
- source_labels: [__meta_kubernetes_pod_label_test]
205+
action: keep
206+
regex: "$NODE_IP"
207+
target_label: city
208+
metric_relabel_configs:
209+
- action: keep
210+
source_labels: [city]
211+
regex: $NODE_NAME
212+
replacement: $1
213+
separator: ","
214+
target_label: city
215+
- action: replace
216+
source_labels: [city]
217+
regex: (s.*)(ttle$$)
218+
replacement: $NODE_IP
219+
separator: ","
220+
target_label: city

0 commit comments

Comments
 (0)