master
go 305 lines 8.24 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package vcsa
4
5 import (
6 "context"
7 "errors"
8 "os"
9 "testing"
10
11 "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/collecttest"
12
13 "github.com/stretchr/testify/assert"
14 "github.com/stretchr/testify/require"
15 )
16
17 var (
18 dataConfigJSON, _ = os.ReadFile("testdata/config.json")
19 dataConfigYAML, _ = os.ReadFile("testdata/config.yaml")
20 )
21
22 func Test_testDataIsValid(t *testing.T) {
23 for name, data := range map[string][]byte{
24 "dataConfigJSON": dataConfigJSON,
25 "dataConfigYAML": dataConfigYAML,
26 } {
27 require.NotNil(t, data, name)
28 }
29 }
30
31 func TestCollector_ConfigurationSerialize(t *testing.T) {
32 collecttest.TestConfigurationSerialize(t, &Collector{}, dataConfigJSON, dataConfigYAML)
33 }
34
35 func TestCollector_Init(t *testing.T) {
36 collr := prepareVCSA()
37
38 assert.NoError(t, collr.Init(context.Background()))
39 assert.NotNil(t, collr.client)
40 }
41
42 func TestCollector_InitErrorOnValidatingInitParameters(t *testing.T) {
43 collr := New()
44
45 assert.Error(t, collr.Init(context.Background()))
46 }
47
48 func TestCollector_InitErrorOnCreatingClient(t *testing.T) {
49 collr := prepareVCSA()
50 collr.ClientConfig.TLSConfig.TLSCA = "testdata/tls"
51
52 assert.Error(t, collr.Init(context.Background()))
53 }
54
55 func TestCollector_Check(t *testing.T) {
56 collr := prepareVCSA()
57 require.NoError(t, collr.Init(context.Background()))
58 collr.client = &mockVCenterHealthClient{}
59
60 assert.NoError(t, collr.Check(context.Background()))
61 }
62
63 func TestCollector_CheckErrorOnLogin(t *testing.T) {
64 collr := prepareVCSA()
65 require.NoError(t, collr.Init(context.Background()))
66 collr.client = &mockVCenterHealthClient{
67 login: func() error { return errors.New("login mock error") },
68 }
69
70 assert.Error(t, collr.Check(context.Background()))
71 }
72
73 func TestCollector_CheckEnsureLoggedIn(t *testing.T) {
74 collr := prepareVCSA()
75 require.NoError(t, collr.Init(context.Background()))
76 mock := &mockVCenterHealthClient{}
77 collr.client = mock
78
79 assert.NoError(t, collr.Check(context.Background()))
80 assert.True(t, mock.loginCalls == 1)
81 }
82
83 func TestCollector_Cleanup(t *testing.T) {
84 collr := prepareVCSA()
85 require.NoError(t, collr.Init(context.Background()))
86 mock := &mockVCenterHealthClient{}
87 collr.client = mock
88 collr.Cleanup(context.Background())
89
90 assert.True(t, mock.logoutCalls == 1)
91 }
92
93 func TestCollector_CleanupWithNilClient(t *testing.T) {
94 collr := prepareVCSA()
95
96 assert.NotPanics(t, func() { collr.Cleanup(context.Background()) })
97 }
98
99 func TestCollector_Charts(t *testing.T) {
100 assert.NotNil(t, New().Charts())
101 }
102
103 func TestCollector_Collect(t *testing.T) {
104 collr := prepareVCSA()
105 require.NoError(t, collr.Init(context.Background()))
106 mock := &mockVCenterHealthClient{}
107 collr.client = mock
108
109 expected := map[string]int64{
110 "applmgmt_status_gray": 0,
111 "applmgmt_status_green": 1,
112 "applmgmt_status_orange": 0,
113 "applmgmt_status_red": 0,
114 "applmgmt_status_unknown": 0,
115 "applmgmt_status_yellow": 0,
116 "database_storage_status_gray": 0,
117 "database_storage_status_green": 1,
118 "database_storage_status_orange": 0,
119 "database_storage_status_red": 0,
120 "database_storage_status_unknown": 0,
121 "database_storage_status_yellow": 0,
122 "load_status_gray": 0,
123 "load_status_green": 1,
124 "load_status_orange": 0,
125 "load_status_red": 0,
126 "load_status_unknown": 0,
127 "load_status_yellow": 0,
128 "mem_status_gray": 0,
129 "mem_status_green": 1,
130 "mem_status_orange": 0,
131 "mem_status_red": 0,
132 "mem_status_unknown": 0,
133 "mem_status_yellow": 0,
134 "software_packages_status_gray": 0,
135 "software_packages_status_green": 1,
136 "software_packages_status_orange": 0,
137 "software_packages_status_red": 0,
138 "software_packages_status_unknown": 0,
139 "storage_status_gray": 0,
140 "storage_status_green": 1,
141 "storage_status_orange": 0,
142 "storage_status_red": 0,
143 "storage_status_unknown": 0,
144 "storage_status_yellow": 0,
145 "swap_status_gray": 0,
146 "swap_status_green": 1,
147 "swap_status_orange": 0,
148 "swap_status_red": 0,
149 "swap_status_unknown": 0,
150 "swap_status_yellow": 0,
151 "system_status_gray": 0,
152 "system_status_green": 1,
153 "system_status_orange": 0,
154 "system_status_red": 0,
155 "system_status_unknown": 0,
156 "system_status_yellow": 0,
157 }
158
159 assert.Equal(t, expected, collr.Collect(context.Background()))
160 }
161
162 func TestCollector_CollectEnsurePingIsCalled(t *testing.T) {
163 collr := prepareVCSA()
164 require.NoError(t, collr.Init(context.Background()))
165 mock := &mockVCenterHealthClient{}
166 collr.client = mock
167 collr.Collect(context.Background())
168
169 assert.True(t, mock.pingCalls == 1)
170 }
171
172 func TestCollector_CollectErrorOnPing(t *testing.T) {
173 collr := prepareVCSA()
174 require.NoError(t, collr.Init(context.Background()))
175 mock := &mockVCenterHealthClient{
176 ping: func() error { return errors.New("ping mock error") },
177 }
178 collr.client = mock
179
180 assert.Zero(t, collr.Collect(context.Background()))
181 }
182
183 func TestCollector_CollectErrorOnHealthCalls(t *testing.T) {
184 collr := prepareVCSA()
185 require.NoError(t, collr.Init(context.Background()))
186 mock := &mockVCenterHealthClient{
187 applMgmt: func() (string, error) { return "", errors.New("applMgmt mock error") },
188 databaseStorage: func() (string, error) { return "", errors.New("databaseStorage mock error") },
189 load: func() (string, error) { return "", errors.New("load mock error") },
190 mem: func() (string, error) { return "", errors.New("mem mock error") },
191 softwarePackages: func() (string, error) { return "", errors.New("softwarePackages mock error") },
192 storage: func() (string, error) { return "", errors.New("storage mock error") },
193 swap: func() (string, error) { return "", errors.New("swap mock error") },
194 system: func() (string, error) { return "", errors.New("system mock error") },
195 }
196 collr.client = mock
197
198 assert.Zero(t, collr.Collect(context.Background()))
199 }
200
201 func prepareVCSA() *Collector {
202 vc := New()
203 vc.URL = "https://127.0.0.1:38001"
204 vc.Username = "user"
205 vc.Password = "pass"
206
207 return vc
208 }
209
210 type mockVCenterHealthClient struct {
211 login func() error
212 logout func() error
213 ping func() error
214 applMgmt func() (string, error)
215 databaseStorage func() (string, error)
216 load func() (string, error)
217 mem func() (string, error)
218 softwarePackages func() (string, error)
219 storage func() (string, error)
220 swap func() (string, error)
221 system func() (string, error)
222 loginCalls int
223 logoutCalls int
224 pingCalls int
225 }
226
227 func (m *mockVCenterHealthClient) Login() error {
228 m.loginCalls += 1
229 if m.login == nil {
230 return nil
231 }
232 return m.login()
233 }
234
235 func (m *mockVCenterHealthClient) Logout() error {
236 m.logoutCalls += 1
237 if m.logout == nil {
238 return nil
239 }
240 return m.logout()
241 }
242
243 func (m *mockVCenterHealthClient) Ping() error {
244 m.pingCalls += 1
245 if m.ping == nil {
246 return nil
247 }
248 return m.ping()
249 }
250
251 func (m *mockVCenterHealthClient) ApplMgmt() (string, error) {
252 if m.applMgmt == nil {
253 return "green", nil
254 }
255 return m.applMgmt()
256 }
257
258 func (m *mockVCenterHealthClient) DatabaseStorage() (string, error) {
259 if m.databaseStorage == nil {
260 return "green", nil
261 }
262 return m.databaseStorage()
263 }
264
265 func (m *mockVCenterHealthClient) Load() (string, error) {
266 if m.load == nil {
267 return "green", nil
268 }
269 return m.load()
270 }
271
272 func (m *mockVCenterHealthClient) Mem() (string, error) {
273 if m.mem == nil {
274 return "green", nil
275 }
276 return m.mem()
277 }
278
279 func (m *mockVCenterHealthClient) SoftwarePackages() (string, error) {
280 if m.softwarePackages == nil {
281 return "green", nil
282 }
283 return m.softwarePackages()
284 }
285
286 func (m *mockVCenterHealthClient) Storage() (string, error) {
287 if m.storage == nil {
288 return "green", nil
289 }
290 return m.storage()
291 }
292
293 func (m *mockVCenterHealthClient) Swap() (string, error) {
294 if m.swap == nil {
295 return "green", nil
296 }
297 return m.swap()
298 }
299
300 func (m *mockVCenterHealthClient) System() (string, error) {
301 if m.system == nil {
302 return "green", nil
303 }
304 return m.system()
305 }