Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/integrations/gcp_exporter/gcp_exporter_test.go
5414 views
1
package gcp_exporter_test
2
3
import (
4
"testing"
5
6
"github.com/stretchr/testify/require"
7
8
"github.com/grafana/agent/pkg/integrations/gcp_exporter"
9
)
10
11
func TestConfig_Validate(t *testing.T) {
12
baseConfig := gcp_exporter.Config{
13
ProjectIDs: []string{"project1"},
14
MetricPrefixes: []string{"prefix1"},
15
ExtraFilters: nil,
16
ClientTimeout: 0,
17
RequestInterval: 0,
18
RequestOffset: 0,
19
IngestDelay: false,
20
DropDelegatedProjects: false,
21
}
22
23
t.Run("Base Config is Valid", func(t *testing.T) {
24
err := baseConfig.Validate()
25
require.NoError(t, err, "Base config was not valid but needs to be for these tests")
26
})
27
28
tests := []struct {
29
name string
30
configModifier func(config gcp_exporter.Config) gcp_exporter.Config
31
shouldError bool
32
}{
33
{
34
name: "nil ProjectIDs",
35
configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {
36
config.ProjectIDs = nil
37
return config
38
},
39
shouldError: true,
40
},
41
{
42
name: "empty ProjectIDs",
43
configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {
44
config.ProjectIDs = []string{}
45
return config
46
},
47
shouldError: true,
48
},
49
{
50
name: "nil MetricPrefixes",
51
configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {
52
config.MetricPrefixes = nil
53
return config
54
},
55
shouldError: true,
56
},
57
{
58
name: "empty MetricPrefixes",
59
configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {
60
config.MetricPrefixes = []string{}
61
return config
62
},
63
shouldError: true,
64
},
65
{
66
name: "extraFilter which does not match a MetricPrefix",
67
configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {
68
config.MetricPrefixes = []string{"gcp.service/logging"}
69
config.ExtraFilters = []string{`logging:resource.name==\"my_resource"`}
70
return config
71
},
72
shouldError: true,
73
},
74
{
75
name: "1 extraFilter which matches a MetricPrefix and 1 which does not",
76
configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {
77
config.MetricPrefixes = []string{
78
"gcp.service/logging",
79
"gcp.service/compute",
80
}
81
config.ExtraFilters = []string{
82
`gcp.service/logging:resource.name=="my_resource"`,
83
`gcp.service/notcompute:compute_instance.name=="instance_a"`,
84
}
85
return config
86
},
87
shouldError: true,
88
},
89
{
90
name: "extra filter with shorter prefix than metric prefix",
91
configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {
92
config.MetricPrefixes = []string{
93
"loadbalancing.googleapis.com/https/total_latencies",
94
"loadbalancing.googleapis.com/https/request_bytes_count",
95
}
96
config.ExtraFilters = []string{
97
`loadbalancing.googleapis.com:resource.labels.backend_target_name="something"`,
98
}
99
return config
100
},
101
shouldError: false,
102
},
103
{
104
name: "2 extra filters which both match",
105
configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {
106
config.MetricPrefixes = []string{
107
"loadbalancing.googleapis.com/https/total_latencies",
108
"loadbalancing.googleapis.com/https/request_bytes_count",
109
}
110
config.ExtraFilters = []string{
111
`loadbalancing.googleapis.com/https/total_latencies:resource.labels.backend_target_name="something"`,
112
`loadbalancing.googleapis.com/https/request_bytes_count:resource.labels.backend_target_name="something else"`,
113
}
114
return config
115
},
116
shouldError: false,
117
},
118
}
119
for _, tt := range tests {
120
testName := tt.name
121
if tt.shouldError {
122
testName = testName + " should error"
123
} else {
124
testName = testName + " should succeed"
125
}
126
t.Run(testName, func(t *testing.T) {
127
config := tt.configModifier(baseConfig)
128
err := config.Validate()
129
if tt.shouldError {
130
require.Error(t, err)
131
} else {
132
require.NoError(t, err)
133
}
134
})
135
}
136
}
137
138