github.com/netdata/go.d.plugin@v0.58.1/agent/setup_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package agent 4 5 import ( 6 "testing" 7 8 "github.com/netdata/go.d.plugin/agent/module" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 "gopkg.in/yaml.v2" 13 ) 14 15 func TestConfig_UnmarshalYAML(t *testing.T) { 16 tests := map[string]struct { 17 input string 18 wantCfg config 19 }{ 20 "valid configuration": { 21 input: "enabled: yes\ndefault_run: yes\nmodules:\n module1: yes\n module2: yes", 22 wantCfg: config{ 23 Enabled: true, 24 DefaultRun: true, 25 Modules: map[string]bool{ 26 "module1": true, 27 "module2": true, 28 }, 29 }, 30 }, 31 "valid configuration with broken modules section": { 32 input: "enabled: yes\ndefault_run: yes\nmodules:\nmodule1: yes\nmodule2: yes", 33 wantCfg: config{ 34 Enabled: true, 35 DefaultRun: true, 36 Modules: map[string]bool{ 37 "module1": true, 38 "module2": true, 39 }, 40 }, 41 }, 42 } 43 44 for name, test := range tests { 45 t.Run(name, func(t *testing.T) { 46 var cfg config 47 err := yaml.Unmarshal([]byte(test.input), &cfg) 48 require.NoError(t, err) 49 assert.Equal(t, test.wantCfg, cfg) 50 }) 51 } 52 } 53 54 func TestAgent_loadConfig(t *testing.T) { 55 tests := map[string]struct { 56 agent Agent 57 wantCfg config 58 }{ 59 "valid config file": { 60 agent: Agent{ 61 Name: "agent-valid", 62 ConfDir: []string{"testdata"}, 63 }, 64 wantCfg: config{ 65 Enabled: true, 66 DefaultRun: true, 67 MaxProcs: 1, 68 Modules: map[string]bool{ 69 "module1": true, 70 "module2": true, 71 }, 72 }, 73 }, 74 "no config path provided": { 75 agent: Agent{}, 76 wantCfg: defaultConfig(), 77 }, 78 "config file not found": { 79 agent: Agent{ 80 Name: "agent", 81 ConfDir: []string{"testdata/not-exist"}, 82 }, 83 wantCfg: defaultConfig(), 84 }, 85 "empty config file": { 86 agent: Agent{ 87 Name: "agent-empty", 88 ConfDir: []string{"testdata"}, 89 }, 90 wantCfg: defaultConfig(), 91 }, 92 "invalid syntax config file": { 93 agent: Agent{ 94 Name: "agent-invalid-syntax", 95 ConfDir: []string{"testdata"}, 96 }, 97 wantCfg: defaultConfig(), 98 }, 99 } 100 101 for name, test := range tests { 102 t.Run(name, func(t *testing.T) { 103 assert.Equal(t, test.wantCfg, test.agent.loadPluginConfig()) 104 }) 105 } 106 } 107 108 func TestAgent_loadEnabledModules(t *testing.T) { 109 tests := map[string]struct { 110 agent Agent 111 cfg config 112 wantModules module.Registry 113 }{ 114 "load all, module disabled by default but explicitly enabled": { 115 agent: Agent{ 116 ModuleRegistry: module.Registry{ 117 "module1": module.Creator{Defaults: module.Defaults{Disabled: true}}, 118 }, 119 }, 120 cfg: config{ 121 Modules: map[string]bool{"module1": true}, 122 }, 123 wantModules: module.Registry{ 124 "module1": module.Creator{Defaults: module.Defaults{Disabled: true}}, 125 }, 126 }, 127 "load all, module disabled by default and not explicitly enabled": { 128 agent: Agent{ 129 ModuleRegistry: module.Registry{ 130 "module1": module.Creator{Defaults: module.Defaults{Disabled: true}}, 131 }, 132 }, 133 wantModules: module.Registry{}, 134 }, 135 "load all, module in config modules (default_run=true)": { 136 agent: Agent{ 137 ModuleRegistry: module.Registry{ 138 "module1": module.Creator{}, 139 }, 140 }, 141 cfg: config{ 142 Modules: map[string]bool{"module1": true}, 143 DefaultRun: true, 144 }, 145 wantModules: module.Registry{ 146 "module1": module.Creator{}, 147 }, 148 }, 149 "load all, module not in config modules (default_run=true)": { 150 agent: Agent{ 151 ModuleRegistry: module.Registry{"module1": module.Creator{}}, 152 }, 153 cfg: config{ 154 DefaultRun: true, 155 }, 156 wantModules: module.Registry{"module1": module.Creator{}}, 157 }, 158 "load all, module in config modules (default_run=false)": { 159 agent: Agent{ 160 ModuleRegistry: module.Registry{ 161 "module1": module.Creator{}, 162 }, 163 }, 164 cfg: config{ 165 Modules: map[string]bool{"module1": true}, 166 }, 167 wantModules: module.Registry{ 168 "module1": module.Creator{}, 169 }, 170 }, 171 "load all, module not in config modules (default_run=false)": { 172 agent: Agent{ 173 ModuleRegistry: module.Registry{ 174 "module1": module.Creator{}, 175 }, 176 }, 177 wantModules: module.Registry{}, 178 }, 179 "load specific, module exist in registry": { 180 agent: Agent{ 181 RunModule: "module1", 182 ModuleRegistry: module.Registry{ 183 "module1": module.Creator{}, 184 }, 185 }, 186 wantModules: module.Registry{ 187 "module1": module.Creator{}, 188 }, 189 }, 190 "load specific, module doesnt exist in registry": { 191 agent: Agent{ 192 RunModule: "module3", 193 ModuleRegistry: module.Registry{}, 194 }, 195 wantModules: module.Registry{}, 196 }, 197 } 198 199 for name, test := range tests { 200 t.Run(name, func(t *testing.T) { 201 assert.Equal(t, test.wantModules, test.agent.loadEnabledModules(test.cfg)) 202 }) 203 } 204 } 205 206 // TODO: tech debt 207 func TestAgent_buildDiscoveryConf(t *testing.T) { 208 209 }