opentelemetry-collector/receiver/otlpreceiver/fuzz_test.go

57 lines
1.7 KiB
Go

// 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/consumer/consumertest"
"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(http.MethodPost, "", 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)
}
r.nextTraces = consumertest.NewNop()
r.nextLogs = consumertest.NewNop()
r.nextMetrics = consumertest.NewNop()
r.nextProfiles = consumertest.NewNop()
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)
}
})
}