Path: blob/main/pkg/integrations/gcp_exporter/gcp_exporter_test.go
5414 views
package gcp_exporter_test12import (3"testing"45"github.com/stretchr/testify/require"67"github.com/grafana/agent/pkg/integrations/gcp_exporter"8)910func TestConfig_Validate(t *testing.T) {11baseConfig := gcp_exporter.Config{12ProjectIDs: []string{"project1"},13MetricPrefixes: []string{"prefix1"},14ExtraFilters: nil,15ClientTimeout: 0,16RequestInterval: 0,17RequestOffset: 0,18IngestDelay: false,19DropDelegatedProjects: false,20}2122t.Run("Base Config is Valid", func(t *testing.T) {23err := baseConfig.Validate()24require.NoError(t, err, "Base config was not valid but needs to be for these tests")25})2627tests := []struct {28name string29configModifier func(config gcp_exporter.Config) gcp_exporter.Config30shouldError bool31}{32{33name: "nil ProjectIDs",34configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {35config.ProjectIDs = nil36return config37},38shouldError: true,39},40{41name: "empty ProjectIDs",42configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {43config.ProjectIDs = []string{}44return config45},46shouldError: true,47},48{49name: "nil MetricPrefixes",50configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {51config.MetricPrefixes = nil52return config53},54shouldError: true,55},56{57name: "empty MetricPrefixes",58configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {59config.MetricPrefixes = []string{}60return config61},62shouldError: true,63},64{65name: "extraFilter which does not match a MetricPrefix",66configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {67config.MetricPrefixes = []string{"gcp.service/logging"}68config.ExtraFilters = []string{`logging:resource.name==\"my_resource"`}69return config70},71shouldError: true,72},73{74name: "1 extraFilter which matches a MetricPrefix and 1 which does not",75configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {76config.MetricPrefixes = []string{77"gcp.service/logging",78"gcp.service/compute",79}80config.ExtraFilters = []string{81`gcp.service/logging:resource.name=="my_resource"`,82`gcp.service/notcompute:compute_instance.name=="instance_a"`,83}84return config85},86shouldError: true,87},88{89name: "extra filter with shorter prefix than metric prefix",90configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {91config.MetricPrefixes = []string{92"loadbalancing.googleapis.com/https/total_latencies",93"loadbalancing.googleapis.com/https/request_bytes_count",94}95config.ExtraFilters = []string{96`loadbalancing.googleapis.com:resource.labels.backend_target_name="something"`,97}98return config99},100shouldError: false,101},102{103name: "2 extra filters which both match",104configModifier: func(config gcp_exporter.Config) gcp_exporter.Config {105config.MetricPrefixes = []string{106"loadbalancing.googleapis.com/https/total_latencies",107"loadbalancing.googleapis.com/https/request_bytes_count",108}109config.ExtraFilters = []string{110`loadbalancing.googleapis.com/https/total_latencies:resource.labels.backend_target_name="something"`,111`loadbalancing.googleapis.com/https/request_bytes_count:resource.labels.backend_target_name="something else"`,112}113return config114},115shouldError: false,116},117}118for _, tt := range tests {119testName := tt.name120if tt.shouldError {121testName = testName + " should error"122} else {123testName = testName + " should succeed"124}125t.Run(testName, func(t *testing.T) {126config := tt.configModifier(baseConfig)127err := config.Validate()128if tt.shouldError {129require.Error(t, err)130} else {131require.NoError(t, err)132}133})134}135}136137138