github.com/netdata/go.d.plugin@v0.58.1/agent/discovery/sd/pipeline/compose_test.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package pipeline
     4  
     5  import (
     6  	"testing"
     7  
     8  	"github.com/netdata/go.d.plugin/agent/confgroup"
     9  	"github.com/netdata/go.d.plugin/agent/discovery/sd/model"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  	"gopkg.in/yaml.v2"
    14  )
    15  
    16  func TestConfigComposer_compose(t *testing.T) {
    17  	config := `
    18  - selector: "rule1"
    19    config:
    20      - selector: "bar1"
    21        template: |
    22          name: {{ .Name }}-1
    23      - selector: "bar2"
    24        template: |
    25          name: {{ .Name }}-2
    26  - selector: "rule2"
    27    config:
    28      - selector: "bar3"
    29        template: |
    30          name: {{ .Name }}-3
    31      - selector: "bar4"
    32        template: |
    33          name: {{ .Name }}-4
    34  - selector: "rule3"
    35    config:
    36      - selector: "bar5"
    37        template: |
    38          name: {{ .Name }}-5
    39      - selector: "bar6"
    40        template: |
    41          name: {{ .Name }}-6
    42  `
    43  	tests := map[string]struct {
    44  		target      model.Target
    45  		wantConfigs []confgroup.Config
    46  	}{
    47  		"no rules matches": {
    48  			target:      newMockTarget("mock"),
    49  			wantConfigs: nil,
    50  		},
    51  		"one rule one config": {
    52  			target: newMockTarget("mock", "rule1 bar1"),
    53  			wantConfigs: []confgroup.Config{
    54  				{"name": "mock-1"},
    55  			},
    56  		},
    57  		"one rule two config": {
    58  			target: newMockTarget("mock", "rule2 bar3 bar4"),
    59  			wantConfigs: []confgroup.Config{
    60  				{"name": "mock-3"},
    61  				{"name": "mock-4"},
    62  			},
    63  		},
    64  		"all rules all configs": {
    65  			target: newMockTarget("mock", "rule1 bar1 bar2 rule2 bar3 bar4 rule3 bar5 bar6"),
    66  			wantConfigs: []confgroup.Config{
    67  				{"name": "mock-1"},
    68  				{"name": "mock-2"},
    69  				{"name": "mock-3"},
    70  				{"name": "mock-4"},
    71  				{"name": "mock-5"},
    72  				{"name": "mock-6"},
    73  			},
    74  		},
    75  	}
    76  
    77  	for name, test := range tests {
    78  		t.Run(name, func(t *testing.T) {
    79  			var cfg []ComposeRuleConfig
    80  
    81  			err := yaml.Unmarshal([]byte(config), &cfg)
    82  			require.NoErrorf(t, err, "yaml unmarshalling of config")
    83  
    84  			cmr, err := newConfigComposer(cfg)
    85  			require.NoErrorf(t, err, "configComposer creation")
    86  
    87  			assert.Equal(t, test.wantConfigs, cmr.compose(test.target))
    88  		})
    89  	}
    90  }