opentelemetry-collector/service/internal/testcomponents/example_router_test.go

149 lines
5.0 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package testcomponents
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/connector/connectortest"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumertest"
"go.opentelemetry.io/collector/internal/testdata"
)
func TestExampleRouter(t *testing.T) {
conn := &ExampleRouter{}
host := componenttest.NewNopHost()
assert.False(t, conn.Started())
assert.NoError(t, conn.Start(context.Background(), host))
assert.True(t, conn.Started())
assert.False(t, conn.Stopped())
assert.NoError(t, conn.Shutdown(context.Background()))
assert.True(t, conn.Stopped())
}
func TestTracesRouter(t *testing.T) {
leftID := component.MustNewIDWithName("sink", "left")
rightID := component.MustNewIDWithName("sink", "right")
sinkLeft := new(consumertest.TracesSink)
sinkRight := new(consumertest.TracesSink)
// The service will build a router to give to every connector.
// Many connectors will just call router.ConsumeTraces,
// but some implementation will call RouteTraces instead.
router := connector.NewTracesRouter(
map[component.ID]consumer.Traces{
leftID: sinkLeft,
rightID: sinkRight,
})
cfg := ExampleRouterConfig{Traces: &LeftRightConfig{Left: leftID, Right: rightID}}
tr, err := ExampleRouterFactory.CreateTracesToTraces(
context.Background(), connectortest.NewNopCreateSettings(), cfg, router)
assert.NoError(t, err)
assert.False(t, tr.Capabilities().MutatesData)
td := testdata.GenerateTraces(1)
assert.NoError(t, tr.ConsumeTraces(context.Background(), td))
assert.Len(t, sinkRight.AllTraces(), 1)
assert.Len(t, sinkLeft.AllTraces(), 0)
assert.NoError(t, tr.ConsumeTraces(context.Background(), td))
assert.Len(t, sinkRight.AllTraces(), 1)
assert.Len(t, sinkLeft.AllTraces(), 1)
assert.NoError(t, tr.ConsumeTraces(context.Background(), td))
assert.NoError(t, tr.ConsumeTraces(context.Background(), td))
assert.NoError(t, tr.ConsumeTraces(context.Background(), td))
assert.Len(t, sinkRight.AllTraces(), 3)
assert.Len(t, sinkLeft.AllTraces(), 2)
}
func TestMetricsRouter(t *testing.T) {
leftID := component.MustNewIDWithName("sink", "left")
rightID := component.MustNewIDWithName("sink", "right")
sinkLeft := new(consumertest.MetricsSink)
sinkRight := new(consumertest.MetricsSink)
// The service will build a router to give to every connector.
// Many connectors will just call router.ConsumeMetrics,
// but some implementation will call RouteMetrics instead.
router := connector.NewMetricsRouter(
map[component.ID]consumer.Metrics{
leftID: sinkLeft,
rightID: sinkRight,
})
cfg := ExampleRouterConfig{Metrics: &LeftRightConfig{Left: leftID, Right: rightID}}
mr, err := ExampleRouterFactory.CreateMetricsToMetrics(
context.Background(), connectortest.NewNopCreateSettings(), cfg, router)
assert.NoError(t, err)
assert.False(t, mr.Capabilities().MutatesData)
md := testdata.GenerateMetrics(1)
assert.NoError(t, mr.ConsumeMetrics(context.Background(), md))
assert.Len(t, sinkRight.AllMetrics(), 1)
assert.Len(t, sinkLeft.AllMetrics(), 0)
assert.NoError(t, mr.ConsumeMetrics(context.Background(), md))
assert.Len(t, sinkRight.AllMetrics(), 1)
assert.Len(t, sinkLeft.AllMetrics(), 1)
assert.NoError(t, mr.ConsumeMetrics(context.Background(), md))
assert.NoError(t, mr.ConsumeMetrics(context.Background(), md))
assert.NoError(t, mr.ConsumeMetrics(context.Background(), md))
assert.Len(t, sinkRight.AllMetrics(), 3)
assert.Len(t, sinkLeft.AllMetrics(), 2)
}
func TestLogsRouter(t *testing.T) {
leftID := component.MustNewIDWithName("sink", "left")
rightID := component.MustNewIDWithName("sink", "right")
sinkLeft := new(consumertest.LogsSink)
sinkRight := new(consumertest.LogsSink)
// The service will build a router to give to every connector.
// Many connectors will just call router.ConsumeLogs,
// but some implementation will call RouteLogs instead.
router := connector.NewLogsRouter(
map[component.ID]consumer.Logs{
leftID: sinkLeft,
rightID: sinkRight,
})
cfg := ExampleRouterConfig{Logs: &LeftRightConfig{Left: leftID, Right: rightID}}
lr, err := ExampleRouterFactory.CreateLogsToLogs(
context.Background(), connectortest.NewNopCreateSettings(), cfg, router)
assert.NoError(t, err)
assert.False(t, lr.Capabilities().MutatesData)
ld := testdata.GenerateLogs(1)
assert.NoError(t, lr.ConsumeLogs(context.Background(), ld))
assert.Len(t, sinkRight.AllLogs(), 1)
assert.Len(t, sinkLeft.AllLogs(), 0)
assert.NoError(t, lr.ConsumeLogs(context.Background(), ld))
assert.Len(t, sinkRight.AllLogs(), 1)
assert.Len(t, sinkLeft.AllLogs(), 1)
assert.NoError(t, lr.ConsumeLogs(context.Background(), ld))
assert.NoError(t, lr.ConsumeLogs(context.Background(), ld))
assert.NoError(t, lr.ConsumeLogs(context.Background(), ld))
assert.Len(t, sinkRight.AllLogs(), 3)
assert.Len(t, sinkLeft.AllLogs(), 2)
}