Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/common/loki/client/fake/client.go
4096 views
1
package fake
2
3
// This code is copied from Promtail. The fake package is used to configure
4
// fake client that can be used in testing.
5
6
import (
7
"sync"
8
9
"github.com/grafana/agent/component/common/loki"
10
)
11
12
// Client is a fake client used for testing.
13
type Client struct {
14
entries loki.LogsReceiver
15
received []loki.Entry
16
once sync.Once
17
mtx sync.Mutex
18
wg sync.WaitGroup
19
OnStop func()
20
}
21
22
func NewClient(stop func()) *Client {
23
c := &Client{
24
OnStop: stop,
25
entries: make(loki.LogsReceiver),
26
}
27
c.wg.Add(1)
28
go func() {
29
defer c.wg.Done()
30
for e := range c.entries {
31
c.mtx.Lock()
32
c.received = append(c.received, e)
33
c.mtx.Unlock()
34
}
35
}()
36
return c
37
}
38
39
// Stop implements client.Client
40
func (c *Client) Stop() {
41
c.once.Do(func() { close(c.entries) })
42
c.wg.Wait()
43
c.OnStop()
44
}
45
46
func (c *Client) Chan() chan<- loki.Entry {
47
return c.entries
48
}
49
50
// LogsReceiver returns this client as a LogsReceiver, which is useful in testing.
51
func (c *Client) LogsReceiver() loki.LogsReceiver {
52
return c.entries
53
}
54
55
func (c *Client) Received() []loki.Entry {
56
c.mtx.Lock()
57
defer c.mtx.Unlock()
58
cpy := make([]loki.Entry, len(c.received))
59
copy(cpy, c.received)
60
return cpy
61
}
62
63
// StopNow implements client.Client
64
func (c *Client) StopNow() {
65
c.Stop()
66
}
67
68
func (c *Client) Name() string {
69
return "fake"
70
}
71
72
// Clear is used to clean up the buffered received entries, so the same client can be re-used between
73
// test cases.
74
func (c *Client) Clear() {
75
c.mtx.Lock()
76
defer c.mtx.Unlock()
77
c.received = []loki.Entry{}
78
}
79
80