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