Path: blob/main/component/prometheus/operator/configgen/config_gen_test.go
5391 views
package configgen12import (3"net/url"4"testing"56"github.com/grafana/agent/component/common/config"7"github.com/grafana/agent/component/common/kubernetes"8promopv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"9promConfig "github.com/prometheus/common/config"10"github.com/prometheus/common/model"11promk8s "github.com/prometheus/prometheus/discovery/kubernetes"12"github.com/prometheus/prometheus/model/relabel"13"github.com/stretchr/testify/assert"14k8sv1 "k8s.io/api/core/v1"15)1617var (18configGen = &ConfigGenerator{}19)2021func TestGenerateK8SSDConfig(t *testing.T) {22nsDiscovery := promk8s.NamespaceDiscovery{23Names: []string{""},24}2526tests := []struct {27name string28client *kubernetes.ClientArguments29attachMetadata *promopv1.AttachMetadata30expected *promk8s.SDConfig31}{32{33name: "empty",34client: &kubernetes.ClientArguments{35APIServer: config.URL{},36},37attachMetadata: nil,38expected: &promk8s.SDConfig{39Role: promk8s.RoleEndpoint,40NamespaceDiscovery: nsDiscovery,41},42},43{44name: "kubeconfig",45client: &kubernetes.ClientArguments{46KubeConfig: "kubeconfig",47APIServer: config.URL{},48},49attachMetadata: nil,50expected: &promk8s.SDConfig{51Role: promk8s.RoleEndpoint,52NamespaceDiscovery: nsDiscovery,53KubeConfig: "kubeconfig",54},55},56{57name: "attach metadata",58client: &kubernetes.ClientArguments{59APIServer: config.URL{},60},61attachMetadata: &promopv1.AttachMetadata{62Node: true,63},64expected: &promk8s.SDConfig{65Role: promk8s.RoleEndpoint,66NamespaceDiscovery: nsDiscovery,67AttachMetadata: promk8s.AttachMetadataConfig{Node: true},68},69},70{71name: "http client config",72client: &kubernetes.ClientArguments{73APIServer: config.URL{74URL: &url.URL{75Scheme: "https",76Host: "localhost:8080",77},78},79HTTPClientConfig: config.HTTPClientConfig{80BasicAuth: &config.BasicAuth{81Username: "username",82Password: "password",83},84BearerToken: "bearer",85BearerTokenFile: "bearer_file",86TLSConfig: config.TLSConfig{87CAFile: "ca_file",88CertFile: "cert_file",89},90Authorization: &config.Authorization{91Credentials: "credentials",92},93},94},95attachMetadata: nil,96expected: &promk8s.SDConfig{97Role: promk8s.RoleEndpoint,98NamespaceDiscovery: nsDiscovery,99APIServer: promConfig.URL{100URL: &url.URL{101Scheme: "https",102Host: "localhost:8080",103},104},105HTTPClientConfig: promConfig.HTTPClientConfig{106BasicAuth: &promConfig.BasicAuth{107Username: "username",108Password: "password",109},110BearerToken: "bearer",111BearerTokenFile: "bearer_file",112TLSConfig: promConfig.TLSConfig{113CAFile: "ca_file",114CertFile: "cert_file",115},116Authorization: &promConfig.Authorization{117Type: "Bearer",118Credentials: "credentials",119},120},121},122},123}124for _, tt := range tests {125t.Run(tt.name, func(t *testing.T) {126cg := &ConfigGenerator{127Client: tt.client,128}129got := cg.generateK8SSDConfig(promopv1.NamespaceSelector{}, "", promk8s.RoleEndpoint, tt.attachMetadata)130assert.Equal(t, tt.expected, got)131})132}133}134135func TestGenerateSafeTLSConfig(t *testing.T) {136tests := []struct {137name string138tlsConfig promopv1.SafeTLSConfig139hasErr bool140serverName string141}{142{143name: "empty",144tlsConfig: promopv1.SafeTLSConfig{145InsecureSkipVerify: true,146ServerName: "test",147},148hasErr: false,149serverName: "test",150},151{152name: "ca_file",153tlsConfig: promopv1.SafeTLSConfig{154InsecureSkipVerify: true,155CA: promopv1.SecretOrConfigMap{Secret: &k8sv1.SecretKeySelector{Key: "ca_file"}},156},157hasErr: true,158serverName: "",159},160{161name: "ca_file",162tlsConfig: promopv1.SafeTLSConfig{163InsecureSkipVerify: true,164CA: promopv1.SecretOrConfigMap{ConfigMap: &k8sv1.ConfigMapKeySelector{Key: "ca_file"}},165},166hasErr: true,167serverName: "",168},169{170name: "cert_file",171tlsConfig: promopv1.SafeTLSConfig{172InsecureSkipVerify: true,173Cert: promopv1.SecretOrConfigMap{Secret: &k8sv1.SecretKeySelector{Key: "cert_file"}},174},175hasErr: true,176serverName: "",177},178{179name: "cert_file",180tlsConfig: promopv1.SafeTLSConfig{181InsecureSkipVerify: true,182Cert: promopv1.SecretOrConfigMap{ConfigMap: &k8sv1.ConfigMapKeySelector{Key: "cert_file"}},183},184hasErr: true,185serverName: "",186},187{188name: "key_file",189tlsConfig: promopv1.SafeTLSConfig{190InsecureSkipVerify: true,191KeySecret: &k8sv1.SecretKeySelector{Key: "key_file"},192},193hasErr: true,194serverName: "",195},196}197for _, tt := range tests {198t.Run(tt.name, func(t *testing.T) {199got, err := configGen.generateSafeTLS(tt.tlsConfig)200assert.Equal(t, tt.hasErr, err != nil)201assert.True(t, got.InsecureSkipVerify)202assert.Equal(t, tt.serverName, got.ServerName)203})204}205}206207func TestRelabelerAdd(t *testing.T) {208relabeler := &relabeler{}209210cfgs := []*relabel.Config{211{212Action: "",213Separator: "",214Regex: relabel.Regexp{},215Replacement: "",216},217}218expected := relabel.Config{219Action: relabel.DefaultRelabelConfig.Action,220Separator: relabel.DefaultRelabelConfig.Separator,221Regex: relabel.DefaultRelabelConfig.Regex,222Replacement: relabel.DefaultRelabelConfig.Replacement,223}224relabeler.add(cfgs...)225cfg := cfgs[0]226227assert.Equal(t, expected.Action, cfg.Action)228assert.Equal(t, expected.Separator, cfg.Separator)229assert.Equal(t, expected.Regex, cfg.Regex)230assert.Equal(t, expected.Replacement, cfg.Replacement)231}232233func TestRelabelerAddFromV1(t *testing.T) {234relabeler := &relabeler{}235236cfgs := []*promopv1.RelabelConfig{237{238SourceLabels: []promopv1.LabelName{"__meta_kubernetes_pod_label_app"},239Separator: ";",240TargetLabel: "app",241Regex: "(.*)",242Modulus: 1,243Replacement: "$1",244Action: "replace",245},246}247expected := relabel.Config{248SourceLabels: model.LabelNames{"__meta_kubernetes_pod_label_app"},249Separator: ";",250TargetLabel: "app",251Regex: relabel.MustNewRegexp("(.*)"),252Modulus: 1,253Replacement: "$1",254Action: relabel.Replace,255}256relabeler.addFromV1(cfgs...)257cfg := relabeler.configs[0]258259assert.Equal(t, expected.SourceLabels, cfg.SourceLabels)260assert.Equal(t, expected.Separator, cfg.Separator)261assert.Equal(t, expected.TargetLabel, cfg.TargetLabel)262assert.Equal(t, expected.Regex, cfg.Regex)263assert.Equal(t, expected.Modulus, cfg.Modulus)264assert.Equal(t, expected.Replacement, cfg.Replacement)265assert.Equal(t, expected.Action, cfg.Action)266}267268269