Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/loki/source/gelf/gelf_test.go
4096 views
1
package gelf
2
3
import (
4
"context"
5
"fmt"
6
"net"
7
"strings"
8
"testing"
9
"time"
10
11
"github.com/grafana/agent/component"
12
"github.com/grafana/agent/component/common/loki"
13
"github.com/grafana/agent/pkg/util"
14
"github.com/phayes/freeport"
15
"github.com/prometheus/client_golang/prometheus"
16
"github.com/stretchr/testify/require"
17
)
18
19
func TestGelf(t *testing.T) {
20
opts := component.Options{
21
Logger: util.TestFlowLogger(t),
22
Registerer: prometheus.NewRegistry(),
23
OnStateChange: func(e component.Exports) {},
24
}
25
26
testMsg := `{"version":"1.1","host":"example.org","short_message":"A short message","timestamp":1231231123,"level":5,"_some_extra":"extra"}`
27
ch1 := make(chan loki.Entry)
28
29
udpListenerAddr := getFreeAddr(t)
30
args := Arguments{
31
ListenAddress: udpListenerAddr,
32
Receivers: []loki.LogsReceiver{ch1},
33
}
34
c, err := New(opts, args)
35
ctx := context.Background()
36
ctx, cancelFunc := context.WithTimeout(ctx, 5*time.Second)
37
defer cancelFunc()
38
go c.Run(ctx)
39
require.NoError(t, err)
40
wr, err := net.Dial("udp", udpListenerAddr)
41
require.NoError(t, err)
42
_, err = wr.Write([]byte(testMsg))
43
require.NoError(t, err)
44
found := false
45
select {
46
case <-ctx.Done():
47
// If this is called then it failed.
48
require.True(t, false)
49
case e := <-ch1:
50
require.True(t, strings.Contains(e.Entry.Line, "A short message"))
51
found = true
52
}
53
require.True(t, found)
54
}
55
56
func getFreeAddr(t *testing.T) string {
57
t.Helper()
58
59
portNumber, err := freeport.GetFreePort()
60
require.NoError(t, err)
61
62
return fmt.Sprintf("127.0.0.1:%d", portNumber)
63
}
64
65