Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/loki/source/windowsevent/component_test.go
5304 views
1
//go:build windows
2
3
package windowsevent
4
5
import (
6
"context"
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/prometheus/client_golang/prometheus"
15
"github.com/stretchr/testify/require"
16
"golang.org/x/sys/windows/svc/eventlog"
17
)
18
19
func TestEventLogger(t *testing.T) {
20
var loggerName = "agent_test"
21
//Setup Windows Event log with the log source name and logging levels
22
_ = eventlog.InstallAsEventCreate(loggerName, eventlog.Info|eventlog.Warning|eventlog.Error)
23
wlog, err := eventlog.Open(loggerName)
24
require.NoError(t, err)
25
dataPath := t.TempDir()
26
rec := make(loki.LogsReceiver)
27
c, err := New(component.Options{
28
ID: "loki.source.windowsevent.test",
29
Logger: util.TestFlowLogger(t),
30
DataPath: dataPath,
31
OnStateChange: func(e component.Exports) {
32
33
},
34
Registerer: prometheus.DefaultRegisterer,
35
Tracer: nil,
36
HTTPListenAddr: "",
37
HTTPPath: "",
38
}, Arguments{
39
Locale: 0,
40
EventLogName: "Application",
41
XPathQuery: "*",
42
BookmarkPath: "",
43
PollInterval: 10 * time.Millisecond,
44
ExcludeEventData: false,
45
ExcludeUserdata: false,
46
UseIncomingTimestamp: false,
47
ForwardTo: []loki.LogsReceiver{rec},
48
})
49
require.NoError(t, err)
50
ctx := context.Background()
51
ctx, cancelFunc := context.WithTimeout(ctx, 10*time.Second)
52
found := false
53
go c.Run(ctx)
54
tm := time.Now().Format(time.RFC3339Nano)
55
err = wlog.Info(2, tm)
56
require.NoError(t, err)
57
select {
58
case <-ctx.Done():
59
// Fail!
60
require.True(t, false)
61
case e := <-rec:
62
if strings.Contains(e.Line, tm) {
63
found = true
64
break
65
}
66
}
67
cancelFunc()
68
require.True(t, found)
69
}
70
71