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  }