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

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package sd
     4  
     5  import (
     6  	"testing"
     7  
     8  	"github.com/netdata/go.d.plugin/agent/discovery/sd/pipeline"
     9  
    10  	"gopkg.in/yaml.v2"
    11  )
    12  
    13  func TestServiceDiscovery_Run(t *testing.T) {
    14  	tests := map[string]discoverySim{
    15  		"add pipeline": {
    16  			configs: []ConfigFile{
    17  				prepareConfigFile("source", "name"),
    18  			},
    19  			wantPipelines: []*mockPipeline{
    20  				{name: "name", started: true, stopped: false},
    21  			},
    22  		},
    23  		"remove pipeline": {
    24  			configs: []ConfigFile{
    25  				prepareConfigFile("source", "name"),
    26  				prepareEmptyConfigFile("source"),
    27  			},
    28  			wantPipelines: []*mockPipeline{
    29  				{name: "name", started: true, stopped: true},
    30  			},
    31  		},
    32  		"re-add pipeline multiple times": {
    33  			configs: []ConfigFile{
    34  				prepareConfigFile("source", "name"),
    35  				prepareConfigFile("source", "name"),
    36  				prepareConfigFile("source", "name"),
    37  			},
    38  			wantPipelines: []*mockPipeline{
    39  				{name: "name", started: true, stopped: false},
    40  			},
    41  		},
    42  		"restart pipeline": {
    43  			configs: []ConfigFile{
    44  				prepareConfigFile("source", "name1"),
    45  				prepareConfigFile("source", "name2"),
    46  			},
    47  			wantPipelines: []*mockPipeline{
    48  				{name: "name1", started: true, stopped: true},
    49  				{name: "name2", started: true, stopped: false},
    50  			},
    51  		},
    52  		"invalid pipeline config": {
    53  			configs: []ConfigFile{
    54  				prepareConfigFile("source", "invalid"),
    55  			},
    56  			wantPipelines: nil,
    57  		},
    58  		"invalid config for running pipeline": {
    59  			configs: []ConfigFile{
    60  				prepareConfigFile("source", "name"),
    61  				prepareConfigFile("source", "invalid"),
    62  			},
    63  			wantPipelines: []*mockPipeline{
    64  				{name: "name", started: true, stopped: false},
    65  			},
    66  		},
    67  	}
    68  
    69  	for name, sim := range tests {
    70  		t.Run(name, func(t *testing.T) {
    71  			sim.run(t)
    72  		})
    73  	}
    74  }
    75  
    76  func prepareConfigFile(source, name string) ConfigFile {
    77  	bs, _ := yaml.Marshal(pipeline.Config{Name: name})
    78  
    79  	return ConfigFile{
    80  		Source: source,
    81  		Data:   bs,
    82  	}
    83  }
    84  
    85  func prepareEmptyConfigFile(source string) ConfigFile {
    86  	return ConfigFile{
    87  		Source: source,
    88  	}
    89  }