Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/loki/source/journal/journal_test.go
4096 views
1
//go:build linux && cgo && promtail_journal_enabled
2
3
package journal
4
5
import (
6
"context"
7
"strings"
8
"testing"
9
"time"
10
11
"github.com/coreos/go-systemd/v22/journal"
12
"github.com/grafana/agent/component"
13
"github.com/grafana/agent/component/common/loki"
14
"github.com/grafana/agent/pkg/util"
15
"github.com/prometheus/client_golang/prometheus"
16
"github.com/stretchr/testify/require"
17
)
18
19
func TestJournal(t *testing.T) {
20
// Create opts for component
21
tmp := t.TempDir()
22
lr := make(loki.LogsReceiver)
23
c, err := New(component.Options{
24
ID: "loki.source.journal.test",
25
Logger: util.TestFlowLogger(t),
26
DataPath: tmp,
27
Registerer: prometheus.DefaultRegisterer,
28
}, Arguments{
29
FormatAsJson: false,
30
MaxAge: 7 * time.Hour,
31
Path: "",
32
Receivers: []loki.LogsReceiver{lr},
33
})
34
require.NoError(t, err)
35
ctx := context.Background()
36
ctx, cnc := context.WithTimeout(ctx, 5*time.Second)
37
defer cnc()
38
go c.Run(ctx)
39
ts := time.Now().String()
40
err = journal.Send(ts, journal.PriInfo, nil)
41
require.NoError(t, err)
42
found := false
43
for !found {
44
select {
45
case <-ctx.Done():
46
found = true
47
// Timed out getting message
48
require.True(t, false)
49
case msg := <-lr:
50
if strings.Contains(msg.Line, ts) {
51
found = true
52
break
53
}
54
}
55
}
56
require.True(t, found)
57
}
58
59