Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/flow/flow_test.go
4093 views
1
package flow
2
3
import (
4
"os"
5
"testing"
6
7
"github.com/grafana/agent/component"
8
"github.com/grafana/agent/pkg/cluster"
9
"github.com/grafana/agent/pkg/flow/internal/controller"
10
"github.com/grafana/agent/pkg/flow/internal/dag"
11
"github.com/grafana/agent/pkg/flow/internal/testcomponents"
12
"github.com/grafana/agent/pkg/flow/logging"
13
"github.com/stretchr/testify/require"
14
)
15
16
var testFile = `
17
testcomponents.tick "ticker" {
18
frequency = "1s"
19
}
20
21
testcomponents.passthrough "static" {
22
input = "hello, world!"
23
}
24
25
testcomponents.passthrough "ticker" {
26
input = testcomponents.tick.ticker.tick_time
27
}
28
29
testcomponents.passthrough "forwarded" {
30
input = testcomponents.passthrough.ticker.output
31
}
32
`
33
34
func TestController_LoadFile_Evaluation(t *testing.T) {
35
ctrl := New(testOptions(t))
36
37
// Use testFile from graph_builder_test.go.
38
f, err := ReadFile(t.Name(), []byte(testFile))
39
require.NoError(t, err)
40
require.NotNil(t, f)
41
42
err = ctrl.LoadFile(f, nil)
43
require.NoError(t, err)
44
require.Len(t, ctrl.loader.Components(), 4)
45
46
// Check the inputs and outputs of things that should be immediately resolved
47
// without having to run the components.
48
in, out := getFields(t, ctrl.loader.Graph(), "testcomponents.passthrough.static")
49
require.Equal(t, "hello, world!", in.(testcomponents.PassthroughConfig).Input)
50
require.Equal(t, "hello, world!", out.(testcomponents.PassthroughExports).Output)
51
}
52
53
func getFields(t *testing.T, g *dag.Graph, nodeID string) (component.Arguments, component.Exports) {
54
t.Helper()
55
56
n := g.GetByID(nodeID)
57
require.NotNil(t, n, "couldn't find node %q in graph", nodeID)
58
59
uc := n.(*controller.ComponentNode)
60
return uc.Arguments(), uc.Exports()
61
}
62
63
func testOptions(t *testing.T) Options {
64
t.Helper()
65
66
s, err := logging.WriterSink(os.Stderr, logging.DefaultSinkOptions)
67
require.NoError(t, err)
68
69
c := &cluster.Clusterer{Node: cluster.NewLocalNode("")}
70
71
return Options{
72
LogSink: s,
73
DataPath: t.TempDir(),
74
Reg: nil,
75
Clusterer: c,
76
}
77
}
78
79