Skip to content

Commit 1de1bf1

Browse files
authored
add fuzz test for receiver (#10790)
Adds a fuzz test for the 3 exposed handlers of the receiver: `handleTraces`, `handleMetrics`, `handleLogs`. The fuzzer decides which content type header to set an also which of the handlers to invoke. Signed-off-by: Adam Korczynski <[email protected]>
1 parent 56908c3 commit 1de1bf1

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

receiver/otlpreceiver/fuzz_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package otlpreceiver
5+
6+
import (
7+
"bytes"
8+
"net/http"
9+
"net/http/httptest"
10+
"testing"
11+
12+
"go.opentelemetry.io/collector/component/componenttest"
13+
"go.opentelemetry.io/collector/receiver/otlpreceiver/internal/logs"
14+
"go.opentelemetry.io/collector/receiver/otlpreceiver/internal/metrics"
15+
"go.opentelemetry.io/collector/receiver/otlpreceiver/internal/trace"
16+
"go.opentelemetry.io/collector/receiver/receivertest"
17+
)
18+
19+
func FuzzReceiverHandlers(f *testing.F) {
20+
f.Fuzz(func(_ *testing.T, data []byte, pb bool, handler int) {
21+
req, err := http.NewRequest("POST", "", bytes.NewReader(data))
22+
if err != nil {
23+
return
24+
}
25+
if pb {
26+
req.Header.Add("Content-Type", pbContentType)
27+
} else {
28+
req.Header.Add("Content-Type", jsonContentType)
29+
}
30+
set := receivertest.NewNopSettings()
31+
set.TelemetrySettings = componenttest.NewNopTelemetrySettings()
32+
set.ID = otlpReceiverID
33+
cfg := createDefaultConfig().(*Config)
34+
r, err := newOtlpReceiver(cfg, &set)
35+
if err != nil {
36+
panic(err)
37+
}
38+
resp := httptest.NewRecorder()
39+
switch handler % 3 {
40+
case 0:
41+
httpTracesReceiver := trace.New(r.nextTraces, r.obsrepHTTP)
42+
handleTraces(resp, req, httpTracesReceiver)
43+
case 1:
44+
httpMetricsReceiver := metrics.New(r.nextMetrics, r.obsrepHTTP)
45+
handleMetrics(resp, req, httpMetricsReceiver)
46+
case 2:
47+
httpLogsReceiver := logs.New(r.nextLogs, r.obsrepHTTP)
48+
handleLogs(resp, req, httpLogsReceiver)
49+
}
50+
51+
})
52+
}

0 commit comments

Comments
 (0)