Skip to content

Commit

Permalink
[chore] add first integration test for telemetrygen (#26668)
Browse files Browse the repository at this point in the history
It shows trace ingest with otlp.

Relates to #26659
  • Loading branch information
atoulme authored Sep 25, 2023
1 parent a3aa0ef commit 88c3225
Show file tree
Hide file tree
Showing 8 changed files with 1,232 additions and 13 deletions.
31 changes: 31 additions & 0 deletions cmd/telemetrygen/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@ go 1.20

require (
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0
github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.85.0
github.com/spf13/cobra v1.7.0
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.8.4
go.opentelemetry.io/collector/component v0.85.1-0.20230921012510-68dd7d763b59
go.opentelemetry.io/collector/consumer v0.85.1-0.20230921012510-68dd7d763b59
go.opentelemetry.io/collector/pdata v1.0.0-rcv0014.0.20230921012510-68dd7d763b59
go.opentelemetry.io/collector/receiver v0.85.1-0.20230921012510-68dd7d763b59
go.opentelemetry.io/collector/receiver/otlpreceiver v0.85.1-0.20230921012510-68dd7d763b59
go.opentelemetry.io/collector/semconv v0.85.1-0.20230921012510-68dd7d763b59
go.opentelemetry.io/otel v1.18.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.41.0
Expand All @@ -27,24 +31,46 @@ require (
require (
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.3 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-logr/logr v1.2.4 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.17.0 // indirect
github.com/knadh/koanf v1.5.0 // indirect
github.com/knadh/koanf/v2 v2.0.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mostynb/go-grpc-compression v1.2.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rs/cors v1.10.0 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/collector v0.85.0 // indirect
go.opentelemetry.io/collector/config/configauth v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/config/configcompression v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/config/configgrpc v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/config/confighttp v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/config/confignet v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/config/configopaque v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/config/configtelemetry v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/config/configtls v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/config/internal v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/confmap v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/exporter v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/extension v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/extension/auth v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/featuregate v1.0.0-rcv0014.0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/collector/processor v0.85.1-0.20230921012510-68dd7d763b59 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.44.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.41.0 // indirect
go.opentelemetry.io/otel/metric v1.18.0 // indirect
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
Expand All @@ -63,3 +89,8 @@ retract (
v0.76.1
v0.65.0
)

replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common

// ambiguous import: found package cloud.google.com/go/compute/metadata in multiple modules
replace cloud.google.com/go => cloud.google.com/go v0.110.2
1,128 changes: 1,126 additions & 2 deletions cmd/telemetrygen/go.sum

Large diffs are not rendered by default.

9 changes: 5 additions & 4 deletions cmd/telemetrygen/internal/common/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,11 @@ func (v *KeyValue) Type() string {
}

type Config struct {
WorkerCount int
Rate int64
TotalDuration time.Duration
ReportingInterval time.Duration
WorkerCount int
Rate int64
TotalDuration time.Duration
ReportingInterval time.Duration
SkipSettingGRPCLogger bool

// OTLP config
Endpoint string
Expand Down
10 changes: 6 additions & 4 deletions cmd/telemetrygen/internal/common/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@ import (
)

// CreateLogger creates a logger for use by telemetrygen
func CreateLogger() (*zap.Logger, error) {
func CreateLogger(skipSettingGRPCLogger bool) (*zap.Logger, error) {
logger, err := zap.NewDevelopment()
if err != nil {
return nil, fmt.Errorf("failed to obtain logger: %w", err)
}
grpcZap.ReplaceGrpcLoggerV2WithVerbosity(logger.WithOptions(
zap.AddCallerSkip(3),
), 1) // set to warn verbosity to avoid copious logging from grpc framework
if !skipSettingGRPCLogger {
grpcZap.ReplaceGrpcLoggerV2WithVerbosity(logger.WithOptions(
zap.AddCallerSkip(3),
), 1) // set to warn verbosity to avoid copious logging from grpc framework
}
return logger, err
}
2 changes: 1 addition & 1 deletion cmd/telemetrygen/internal/logs/logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func (e *gRPCClientExporter) export(logs plog.Logs) error {

// Start starts the log telemetry generator
func Start(cfg *Config) error {
logger, err := common.CreateLogger()
logger, err := common.CreateLogger(cfg.SkipSettingGRPCLogger)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/telemetrygen/internal/metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (

// Start starts the metric telemetry generator
func Start(cfg *Config) error {
logger, err := common.CreateLogger()
logger, err := common.CreateLogger(cfg.SkipSettingGRPCLogger)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/telemetrygen/internal/traces/traces.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import (
)

func Start(cfg *Config) error {
logger, err := common.CreateLogger()
logger, err := common.CreateLogger(cfg.SkipSettingGRPCLogger)
if err != nil {
return err
}
Expand Down
61 changes: 61 additions & 0 deletions cmd/telemetrygen/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package main

import (
"context"
"testing"
"time"

"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/consumer/consumertest"
"go.opentelemetry.io/collector/receiver/otlpreceiver"
"go.opentelemetry.io/collector/receiver/receivertest"

"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen/internal/common"
"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen/internal/traces"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/common/testutil"
)

func TestGenerateTraces(t *testing.T) {
f := otlpreceiver.NewFactory()
sink := &consumertest.TracesSink{}
rCfg := f.CreateDefaultConfig()
endpoint := testutil.GetAvailableLocalAddress(t)
rCfg.(*otlpreceiver.Config).GRPC.NetAddr.Endpoint = endpoint
r, err := f.CreateTracesReceiver(context.Background(), receivertest.NewNopCreateSettings(), rCfg, sink)
require.NoError(t, err)
err = r.Start(context.Background(), componenttest.NewNopHost())
require.NoError(t, err)
defer func() {
require.NoError(t, r.Shutdown(context.Background()))
}()
cfg := &traces.Config{
Config: common.Config{
WorkerCount: 10,
Rate: 10,
TotalDuration: 10 * time.Second,
ReportingInterval: 10,
Endpoint: endpoint,
Insecure: true,
UseHTTP: false,
Headers: nil,
ResourceAttributes: nil,
SkipSettingGRPCLogger: true,
},
NumTraces: 6000,
ServiceName: "foo",
StatusCode: "0",
LoadSize: 0,
Batch: true,
}
go func() {
err = traces.Start(cfg)
require.NoError(t, err)
}()
require.Eventually(t, func() bool {
return len(sink.AllTraces()) > 0
}, 10*time.Second, 100*time.Millisecond)
}

0 comments on commit 88c3225

Please sign in to comment.