83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package opentelemetry
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
|
|
"go.opentelemetry.io/otel/metric"
|
|
"go.opentelemetry.io/otel/metric/global"
|
|
controller "go.opentelemetry.io/otel/sdk/metric/controller/basic"
|
|
processor "go.opentelemetry.io/otel/sdk/metric/processor/basic"
|
|
"go.opentelemetry.io/otel/sdk/metric/selector/simple"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/test/bufconn"
|
|
|
|
"github.com/influxdata/telegraf"
|
|
"github.com/influxdata/telegraf/plugins/inputs"
|
|
"github.com/influxdata/telegraf/testutil"
|
|
)
|
|
|
|
func TestOpenTelemetry(t *testing.T) {
|
|
mockListener := bufconn.Listen(1024 * 1024)
|
|
plugin := inputs.Inputs["opentelemetry"]().(*OpenTelemetry)
|
|
plugin.listener = mockListener
|
|
accumulator := new(testutil.Accumulator)
|
|
|
|
err := plugin.Start(accumulator)
|
|
require.NoError(t, err)
|
|
t.Cleanup(plugin.Stop)
|
|
|
|
metricExporter, err := otlpmetricgrpc.New(context.Background(),
|
|
otlpmetricgrpc.WithInsecure(),
|
|
otlpmetricgrpc.WithDialOption(
|
|
grpc.WithBlock(),
|
|
grpc.WithContextDialer(func(_ context.Context, _ string) (net.Conn, error) {
|
|
return mockListener.Dial()
|
|
})),
|
|
)
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() { _ = metricExporter.Shutdown(context.Background()) })
|
|
|
|
pusher := controller.New(
|
|
processor.NewFactory(
|
|
simple.NewWithHistogramDistribution(),
|
|
metricExporter,
|
|
),
|
|
controller.WithExporter(metricExporter),
|
|
)
|
|
|
|
err = pusher.Start(context.Background())
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() { _ = pusher.Stop(context.Background()) })
|
|
|
|
global.SetMeterProvider(pusher)
|
|
|
|
// write metrics
|
|
meter := global.Meter("library-name")
|
|
counter := metric.Must(meter).NewInt64Counter("measurement-counter")
|
|
meter.RecordBatch(context.Background(), nil, counter.Measurement(7))
|
|
|
|
err = pusher.Stop(context.Background())
|
|
require.NoError(t, err)
|
|
|
|
// Shutdown
|
|
|
|
plugin.Stop()
|
|
|
|
err = metricExporter.Shutdown(context.Background())
|
|
require.NoError(t, err)
|
|
|
|
// Check
|
|
|
|
require.Empty(t, accumulator.Errors)
|
|
|
|
require.Len(t, accumulator.Metrics, 1)
|
|
got := accumulator.Metrics[0]
|
|
require.Equal(t, "measurement-counter", got.Measurement)
|
|
require.Equal(t, telegraf.Counter, got.Type)
|
|
require.Equal(t, "library-name", got.Tags["otel.library.name"])
|
|
}
|