Path: blob/main/component/loki/source/gelf/gelf_test.go
4096 views
package gelf12import (3"context"4"fmt"5"net"6"strings"7"testing"8"time"910"github.com/grafana/agent/component"11"github.com/grafana/agent/component/common/loki"12"github.com/grafana/agent/pkg/util"13"github.com/phayes/freeport"14"github.com/prometheus/client_golang/prometheus"15"github.com/stretchr/testify/require"16)1718func TestGelf(t *testing.T) {19opts := component.Options{20Logger: util.TestFlowLogger(t),21Registerer: prometheus.NewRegistry(),22OnStateChange: func(e component.Exports) {},23}2425testMsg := `{"version":"1.1","host":"example.org","short_message":"A short message","timestamp":1231231123,"level":5,"_some_extra":"extra"}`26ch1 := make(chan loki.Entry)2728udpListenerAddr := getFreeAddr(t)29args := Arguments{30ListenAddress: udpListenerAddr,31Receivers: []loki.LogsReceiver{ch1},32}33c, err := New(opts, args)34ctx := context.Background()35ctx, cancelFunc := context.WithTimeout(ctx, 5*time.Second)36defer cancelFunc()37go c.Run(ctx)38require.NoError(t, err)39wr, err := net.Dial("udp", udpListenerAddr)40require.NoError(t, err)41_, err = wr.Write([]byte(testMsg))42require.NoError(t, err)43found := false44select {45case <-ctx.Done():46// If this is called then it failed.47require.True(t, false)48case e := <-ch1:49require.True(t, strings.Contains(e.Entry.Line, "A short message"))50found = true51}52require.True(t, found)53}5455func getFreeAddr(t *testing.T) string {56t.Helper()5758portNumber, err := freeport.GetFreePort()59require.NoError(t, err)6061return fmt.Sprintf("127.0.0.1:%d", portNumber)62}636465