Path: blob/main/component/otelcol/extension/extension_test.go
4096 views
package extension_test12import (3"context"4"testing"5"time"67"github.com/grafana/agent/component"8"github.com/grafana/agent/component/otelcol"9"github.com/grafana/agent/component/otelcol/extension"10"github.com/grafana/agent/pkg/flow/componenttest"11"github.com/grafana/agent/pkg/util"12"github.com/stretchr/testify/require"13otelcomponent "go.opentelemetry.io/collector/component"14otelconfig "go.opentelemetry.io/collector/config"15)1617func TestExtension(t *testing.T) {18var (19waitCreated = util.NewWaitTrigger()20onCreated = func() {21waitCreated.Trigger()22}23)2425// Create and start our Flow component. We then wait for it to export a26// consumer that we can send data to.27te := newTestEnvironment(t, onCreated)28te.Start(fakeExtensionArgs{})2930require.NoError(t, waitCreated.Wait(time.Second), "extension never created")31}3233type testEnvironment struct {34t *testing.T3536Controller *componenttest.Controller37}3839func newTestEnvironment(t *testing.T, onCreated func()) *testEnvironment {40t.Helper()4142reg := component.Registration{43Name: "testcomponent",44Args: fakeExtensionArgs{},45Exports: otelcol.ConsumerExports{},46Build: func(opts component.Options, args component.Arguments) (component.Component, error) {47factory := otelcomponent.NewExtensionFactory(48"testcomponent",49func() otelconfig.Extension { return nil },50func(51_ context.Context,52_ otelcomponent.ExtensionCreateSettings,53_ otelconfig.Extension,54) (otelcomponent.Extension, error) {5556onCreated()57return nil, nil58}, otelcomponent.StabilityLevelUndefined,59)6061return extension.New(opts, factory, args.(extension.Arguments))62},63}6465return &testEnvironment{66t: t,67Controller: componenttest.NewControllerFromReg(util.TestLogger(t), reg),68}69}7071func (te *testEnvironment) Start(args component.Arguments) {72go func() {73ctx := componenttest.TestContext(te.t)74err := te.Controller.Run(ctx, args)75require.NoError(te.t, err, "failed to run component")76}()77}7879type fakeExtensionArgs struct {80}8182var _ extension.Arguments = fakeExtensionArgs{}8384func (fa fakeExtensionArgs) Convert() (otelconfig.Extension, error) {85settings := otelconfig.NewExtensionSettings(otelconfig.NewComponentID("testcomponent"))86return &settings, nil87}8889func (fa fakeExtensionArgs) Extensions() map[otelconfig.ComponentID]otelcomponent.Extension {90return nil91}9293func (fa fakeExtensionArgs) Exporters() map[otelconfig.DataType]map[otelconfig.ComponentID]otelcomponent.Exporter {94return nil95}969798