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 }