github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/scrapeconfig/scrapeconfig_test.go (about)

     1  package scrapeconfig
     2  
     3  import (
     4  	"testing"
     5  
     6  	promConfig "github.com/prometheus/common/config"
     7  	"github.com/prometheus/common/model"
     8  	"github.com/prometheus/prometheus/discovery/kubernetes"
     9  	"github.com/prometheus/prometheus/discovery/targetgroup"
    10  	"github.com/stretchr/testify/require"
    11  	"gopkg.in/yaml.v2"
    12  )
    13  
    14  // todo add full example.
    15  var smallYaml = `
    16  job_name: kubernetes-pods-name
    17  static_configs:
    18  - targets:
    19      - localhost
    20    labels:
    21      job: varlogs
    22      __path__: /var/log/*log
    23  kubernetes_sd_configs:
    24  - role: pod
    25  `
    26  
    27  // todo add full example.
    28  var testYaml = `
    29  pipeline_stages:
    30    - regex:
    31        expr: "./*"
    32    - json:
    33        timestamp:
    34          source: time
    35          format: RFC3339
    36        labels:
    37          stream:
    38            source: json_key_name.json_sub_key_name
    39        output:
    40          source: log
    41  job_name: kubernetes-pods-name
    42  kubernetes_sd_configs:
    43  - role: pod
    44  relabel_configs:
    45  - source_labels:
    46    - __meta_kubernetes_pod_label_name
    47    target_label: __service__
    48  - source_labels:
    49    - __meta_kubernetes_pod_node_name
    50    target_label: __host__
    51  - action: drop
    52    regex: ^$
    53    source_labels:
    54    - __service__
    55  - action: replace
    56    replacement: $1
    57    separator: /
    58    source_labels:
    59    - __meta_kubernetes_namespace
    60    - __service__
    61    target_label: job
    62  - action: replace
    63    source_labels:
    64    - __meta_kubernetes_namespace
    65    target_label: namespace
    66  - action: replace
    67    source_labels:
    68    - __meta_kubernetes_pod_name
    69    target_label: instance
    70  - action: replace
    71    source_labels:
    72    - __meta_kubernetes_pod_container_name
    73    target_label: container_name
    74  - action: labelmap
    75    regex: __meta_kubernetes_pod_label_(.+)
    76  - replacement: /var/log/pods/$1/*.log
    77    separator: /
    78    source_labels:
    79    - __meta_kubernetes_pod_uid
    80    - __meta_kubernetes_pod_container_name
    81    target_label: __path__
    82  `
    83  
    84  var noPipelineStagesYaml = `
    85  job_name: kubernetes-pods-name
    86  static_configs:
    87  - targets:
    88      - localhost
    89    labels:
    90      job: varlogs
    91      __path__: /var/log/*log
    92  kubernetes_sd_configs:
    93  - role: pod
    94  `
    95  
    96  func TestLoadSmallConfig(t *testing.T) {
    97  	var config Config
    98  	err := yaml.Unmarshal([]byte(smallYaml), &config)
    99  	require.Nil(t, err)
   100  
   101  	expected := Config{
   102  		JobName:        "kubernetes-pods-name",
   103  		PipelineStages: DefaultScrapeConfig.PipelineStages,
   104  		ServiceDiscoveryConfig: ServiceDiscoveryConfig{
   105  			KubernetesSDConfigs: []*kubernetes.SDConfig{
   106  				{
   107  					Role:             "pod",
   108  					HTTPClientConfig: promConfig.DefaultHTTPClientConfig,
   109  				},
   110  			},
   111  			StaticConfigs: []*targetgroup.Group{
   112  				{
   113  					Targets: []model.LabelSet{{"__address__": "localhost"}},
   114  					Labels: map[model.LabelName]model.LabelValue{
   115  						"job":      "varlogs",
   116  						"__path__": "/var/log/*log",
   117  					},
   118  					Source: "",
   119  				},
   120  			},
   121  		},
   122  	}
   123  	require.Equal(t, expected, config)
   124  }
   125  
   126  // bugfix: https://github.com/grafana/loki/issues/3403
   127  func TestEmptyPipelineStagesConfig(t *testing.T) {
   128  	var config Config
   129  	err := yaml.Unmarshal([]byte(noPipelineStagesYaml), &config)
   130  	require.Nil(t, err)
   131  
   132  	require.Zero(t, len(config.PipelineStages))
   133  }
   134  
   135  func TestLoadConfig(t *testing.T) {
   136  	var config Config
   137  	err := yaml.Unmarshal([]byte(testYaml), &config)
   138  	if err != nil {
   139  		panic(err)
   140  	}
   141  }