Skip to content

Commit

Permalink
add fuzz test for receiver (#10790)
Browse files Browse the repository at this point in the history
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 <adam@adalogics.com>
  • Loading branch information
AdamKorcz committed Aug 7, 2024
1 parent 56908c3 commit 1de1bf1
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions receiver/otlpreceiver/fuzz_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package otlpreceiver

import (
"bytes"
"net/http"
"net/http/httptest"
"testing"

"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/receiver/otlpreceiver/internal/logs"
"go.opentelemetry.io/collector/receiver/otlpreceiver/internal/metrics"
"go.opentelemetry.io/collector/receiver/otlpreceiver/internal/trace"
"go.opentelemetry.io/collector/receiver/receivertest"
)

func FuzzReceiverHandlers(f *testing.F) {
f.Fuzz(func(_ *testing.T, data []byte, pb bool, handler int) {
req, err := http.NewRequest("POST", "", bytes.NewReader(data))
if err != nil {
return
}
if pb {
req.Header.Add("Content-Type", pbContentType)
} else {
req.Header.Add("Content-Type", jsonContentType)
}
set := receivertest.NewNopSettings()
set.TelemetrySettings = componenttest.NewNopTelemetrySettings()
set.ID = otlpReceiverID
cfg := createDefaultConfig().(*Config)
r, err := newOtlpReceiver(cfg, &set)
if err != nil {
panic(err)
}
resp := httptest.NewRecorder()
switch handler % 3 {
case 0:
httpTracesReceiver := trace.New(r.nextTraces, r.obsrepHTTP)
handleTraces(resp, req, httpTracesReceiver)
case 1:
httpMetricsReceiver := metrics.New(r.nextMetrics, r.obsrepHTTP)
handleMetrics(resp, req, httpMetricsReceiver)
case 2:
httpLogsReceiver := logs.New(r.nextLogs, r.obsrepHTTP)
handleLogs(resp, req, httpLogsReceiver)
}

})
}

0 comments on commit 1de1bf1

Please sign in to comment.