Path: blob/main/pkg/config/agent_management_remote_config_test.go
4095 views
package config12import (3"testing"4"time"56"github.com/grafana/agent/pkg/metrics/instance"7"github.com/stretchr/testify/require"8)910func TestBuildRemoteConfig(t *testing.T) {11baseConfig := `12server:13log_level: debug14`15metricsSnippets := []Snippet{{16Config: `17metrics_scrape_configs:18- job_name: 'prometheus'19scrape_interval: 15s20static_configs:21- targets: ['localhost:9090']22`,23}}24logsSnippets := []Snippet{{25Config: `26logs_scrape_configs:27- job_name: 'loki'28static_configs:29- targets: ['localhost:3100']30`,31}}32integrationSnippets := []Snippet{{33Config: `34integration_configs:35agent:36enabled: true37relabel_configs:38- action: replace39source_labels:40- agent_hostname41target_label: instance42`,43}}4445allSnippets := []Snippet{}46allSnippets = append(allSnippets, metricsSnippets...)47allSnippets = append(allSnippets, logsSnippets...)48allSnippets = append(allSnippets, integrationSnippets...)4950t.Run("only metrics snippets provided", func(t *testing.T) {51rc := RemoteConfig{52BaseConfig: BaseConfigContent(baseConfig),53Snippets: metricsSnippets,54}55c, err := rc.BuildAgentConfig()56require.NoError(t, err)57require.Equal(t, len(c.Metrics.Configs), 1)58require.Empty(t, c.Logs)59require.Empty(t, c.Integrations.configV1.Integrations)60})6162t.Run("only log snippets provided", func(t *testing.T) {63rc := RemoteConfig{64BaseConfig: BaseConfigContent(baseConfig),65Snippets: logsSnippets,66}67c, err := rc.BuildAgentConfig()68require.NoError(t, err)69require.Equal(t, len(c.Logs.Configs), 1)70require.Empty(t, c.Metrics.Configs)71require.Empty(t, c.Integrations.configV1.Integrations)72})7374t.Run("only integration snippets provided", func(t *testing.T) {75rc := RemoteConfig{76BaseConfig: BaseConfigContent(baseConfig),77Snippets: integrationSnippets,78}79c, err := rc.BuildAgentConfig()80require.NoError(t, err)81require.Empty(t, c.Metrics.Configs)82require.Empty(t, c.Logs)83require.Equal(t, 1, len(c.Integrations.configV1.Integrations))84})8586t.Run("base with already logs, metrics and integrations provided", func(t *testing.T) {87fullConfig := `88metrics:89configs:90- name: default91scrape_configs:92- job_name: default-prom93static_configs:94- targets:95- localhost:909096logs:97positions_directory: /tmp/grafana-agent-positions98configs:99- name: default100scrape_configs:101- job_name: default-loki102static_configs:103- targets:104- localhost:3100105integrations:106node_exporter:107enabled: true108`109rc := RemoteConfig{110BaseConfig: BaseConfigContent(fullConfig),111Snippets: allSnippets,112}113c, err := rc.BuildAgentConfig()114require.NoError(t, err)115require.Equal(t, len(c.Logs.Configs), 2)116require.Equal(t, len(c.Metrics.Configs), 2)117require.Equal(t, 2, len(c.Integrations.configV1.Integrations))118})119120t.Run("all snippets provided", func(t *testing.T) {121rc := RemoteConfig{122BaseConfig: BaseConfigContent(baseConfig),123Snippets: allSnippets,124}125c, err := rc.BuildAgentConfig()126require.NoError(t, err)127require.Equal(t, 1, len(c.Logs.Configs))128require.Equal(t, 1, len(c.Metrics.Configs))129require.Equal(t, 1, len(c.Integrations.configV1.Integrations))130131// check some fields to make sure the config was parsed correctly132require.Equal(t, "prometheus", c.Metrics.Configs[0].ScrapeConfigs[0].JobName)133require.Equal(t, "loki", c.Logs.Configs[0].ScrapeConfig[0].JobName)134require.Equal(t, "agent", c.Integrations.configV1.Integrations[0].Name())135136// make sure defaults for metric snippets are applied137require.Equal(t, instance.DefaultConfig.WALTruncateFrequency, c.Metrics.Configs[0].WALTruncateFrequency)138require.Equal(t, instance.DefaultConfig.HostFilter, c.Metrics.Configs[0].HostFilter)139require.Equal(t, instance.DefaultConfig.MinWALTime, c.Metrics.Configs[0].MinWALTime)140require.Equal(t, instance.DefaultConfig.MaxWALTime, c.Metrics.Configs[0].MaxWALTime)141require.Equal(t, instance.DefaultConfig.RemoteFlushDeadline, c.Metrics.Configs[0].RemoteFlushDeadline)142require.Equal(t, instance.DefaultConfig.WriteStaleOnShutdown, c.Metrics.Configs[0].WriteStaleOnShutdown)143require.Equal(t, instance.DefaultGlobalConfig, c.Metrics.Global)144145// make sure defaults for log snippets are applied146require.Equal(t, 10*time.Second, c.Logs.Configs[0].PositionsConfig.SyncPeriod)147require.Equal(t, "", c.Logs.Configs[0].PositionsConfig.PositionsFile)148require.Equal(t, false, c.Logs.Configs[0].PositionsConfig.IgnoreInvalidYaml)149require.Equal(t, false, c.Logs.Configs[0].TargetConfig.Stdin)150151// make sure defaults for integration snippets are applied152require.Equal(t, true, c.Integrations.configV1.ScrapeIntegrations)153require.Equal(t, true, c.Integrations.configV1.UseHostnameLabel)154require.Equal(t, true, c.Integrations.configV1.ReplaceInstanceLabel)155require.Equal(t, 5*time.Second, c.Integrations.configV1.IntegrationRestartBackoff)156})157}158159160