Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/agentctl/sync_test.go
4094 views
1
package agentctl
2
3
import (
4
"context"
5
"errors"
6
"testing"
7
8
"github.com/grafana/agent/pkg/metrics/cluster/configapi"
9
"github.com/grafana/agent/pkg/metrics/instance"
10
"github.com/stretchr/testify/require"
11
)
12
13
func TestConfigSync_EmptyStore(t *testing.T) {
14
cli := &mockFuncPromClient{}
15
cli.ListConfigsFunc = func(_ context.Context) (*configapi.ListConfigurationsResponse, error) {
16
return &configapi.ListConfigurationsResponse{}, nil
17
}
18
19
var putConfigs []string
20
cli.PutConfigurationFunc = func(_ context.Context, name string, _ *instance.Config) error {
21
putConfigs = append(putConfigs, name)
22
return nil
23
}
24
25
err := ConfigSync(nil, cli, "./testdata", false)
26
require.NoError(t, err)
27
28
expect := []string{
29
"agent-1",
30
"agent-2",
31
"agent-3",
32
}
33
require.Equal(t, expect, putConfigs)
34
}
35
36
func TestConfigSync_PrepopulatedStore(t *testing.T) {
37
cli := &mockFuncPromClient{}
38
cli.ListConfigsFunc = func(_ context.Context) (*configapi.ListConfigurationsResponse, error) {
39
return &configapi.ListConfigurationsResponse{
40
Configs: []string{"delete-a", "agent-1", "delete-b", "delete-c"},
41
}, nil
42
}
43
44
var putConfigs []string
45
cli.PutConfigurationFunc = func(_ context.Context, name string, _ *instance.Config) error {
46
putConfigs = append(putConfigs, name)
47
return nil
48
}
49
50
var deletedConfigs []string
51
cli.DeleteConfigurationFunc = func(_ context.Context, name string) error {
52
deletedConfigs = append(deletedConfigs, name)
53
return nil
54
}
55
56
err := ConfigSync(nil, cli, "./testdata", false)
57
require.NoError(t, err)
58
59
expectUpdated := []string{
60
"agent-1",
61
"agent-2",
62
"agent-3",
63
}
64
require.Equal(t, expectUpdated, putConfigs)
65
66
expectDeleted := []string{
67
"delete-a",
68
"delete-b",
69
"delete-c",
70
}
71
require.Equal(t, expectDeleted, deletedConfigs)
72
}
73
74
func TestConfigSync_DryRun(t *testing.T) {
75
cli := &mockFuncPromClient{}
76
cli.ListConfigsFunc = func(_ context.Context) (*configapi.ListConfigurationsResponse, error) {
77
return &configapi.ListConfigurationsResponse{
78
Configs: []string{"delete-a", "agent-1", "delete-b", "delete-c"},
79
}, nil
80
}
81
82
cli.PutConfigurationFunc = func(_ context.Context, name string, _ *instance.Config) error {
83
t.FailNow()
84
return nil
85
}
86
87
cli.DeleteConfigurationFunc = func(_ context.Context, name string) error {
88
t.FailNow()
89
return nil
90
}
91
92
err := ConfigSync(nil, cli, "./testdata", true)
93
require.NoError(t, err)
94
}
95
96
type mockFuncPromClient struct {
97
InstancesFunc func(ctx context.Context) ([]string, error)
98
ListConfigsFunc func(ctx context.Context) (*configapi.ListConfigurationsResponse, error)
99
GetConfigurationFunc func(ctx context.Context, name string) (*instance.Config, error)
100
PutConfigurationFunc func(ctx context.Context, name string, cfg *instance.Config) error
101
DeleteConfigurationFunc func(ctx context.Context, name string) error
102
}
103
104
func (m mockFuncPromClient) Instances(ctx context.Context) ([]string, error) {
105
if m.InstancesFunc != nil {
106
return m.InstancesFunc(ctx)
107
}
108
return nil, errors.New("not implemented")
109
}
110
111
func (m mockFuncPromClient) ListConfigs(ctx context.Context) (*configapi.ListConfigurationsResponse, error) {
112
if m.ListConfigsFunc != nil {
113
return m.ListConfigsFunc(ctx)
114
}
115
return nil, errors.New("not implemented")
116
}
117
118
func (m mockFuncPromClient) GetConfiguration(ctx context.Context, name string) (*instance.Config, error) {
119
if m.GetConfigurationFunc != nil {
120
return m.GetConfigurationFunc(ctx, name)
121
}
122
return nil, errors.New("not implemented")
123
}
124
125
func (m mockFuncPromClient) PutConfiguration(ctx context.Context, name string, cfg *instance.Config) error {
126
if m.PutConfigurationFunc != nil {
127
return m.PutConfigurationFunc(ctx, name, cfg)
128
}
129
return errors.New("not implemented")
130
}
131
132
func (m mockFuncPromClient) DeleteConfiguration(ctx context.Context, name string) error {
133
if m.DeleteConfigurationFunc != nil {
134
return m.DeleteConfigurationFunc(ctx, name)
135
}
136
return errors.New("not implemented")
137
}
138
139