summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/vcsa/vcsa_test.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/vcsa/vcsa_test.go304
1 files changed, 304 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/vcsa/vcsa_test.go b/src/go/collectors/go.d.plugin/modules/vcsa/vcsa_test.go
new file mode 100644
index 000000000..ccd659665
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/vcsa/vcsa_test.go
@@ -0,0 +1,304 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package vcsa
+
+import (
+ "errors"
+ "os"
+ "testing"
+
+ "github.com/netdata/netdata/go/go.d.plugin/agent/module"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+var (
+ dataConfigJSON, _ = os.ReadFile("testdata/config.json")
+ dataConfigYAML, _ = os.ReadFile("testdata/config.yaml")
+)
+
+func Test_testDataIsValid(t *testing.T) {
+ for name, data := range map[string][]byte{
+ "dataConfigJSON": dataConfigJSON,
+ "dataConfigYAML": dataConfigYAML,
+ } {
+ require.NotNil(t, data, name)
+ }
+}
+
+func TestVCSA_ConfigurationSerialize(t *testing.T) {
+ module.TestConfigurationSerialize(t, &VCSA{}, dataConfigJSON, dataConfigYAML)
+}
+
+func TestVCSA_Init(t *testing.T) {
+ job := prepareVCSA()
+
+ assert.NoError(t, job.Init())
+ assert.NotNil(t, job.client)
+}
+
+func TestVCenter_InitErrorOnValidatingInitParameters(t *testing.T) {
+ job := New()
+
+ assert.Error(t, job.Init())
+}
+
+func TestVCenter_InitErrorOnCreatingClient(t *testing.T) {
+ job := prepareVCSA()
+ job.Client.TLSConfig.TLSCA = "testdata/tls"
+
+ assert.Error(t, job.Init())
+}
+
+func TestVCenter_Check(t *testing.T) {
+ job := prepareVCSA()
+ require.NoError(t, job.Init())
+ job.client = &mockVCenterHealthClient{}
+
+ assert.NoError(t, job.Check())
+}
+
+func TestVCenter_CheckErrorOnLogin(t *testing.T) {
+ job := prepareVCSA()
+ require.NoError(t, job.Init())
+ job.client = &mockVCenterHealthClient{
+ login: func() error { return errors.New("login mock error") },
+ }
+
+ assert.Error(t, job.Check())
+}
+
+func TestVCenter_CheckEnsureLoggedIn(t *testing.T) {
+ job := prepareVCSA()
+ require.NoError(t, job.Init())
+ mock := &mockVCenterHealthClient{}
+ job.client = mock
+
+ assert.NoError(t, job.Check())
+ assert.True(t, mock.loginCalls == 1)
+}
+
+func TestVCenter_Cleanup(t *testing.T) {
+ job := prepareVCSA()
+ require.NoError(t, job.Init())
+ mock := &mockVCenterHealthClient{}
+ job.client = mock
+ job.Cleanup()
+
+ assert.True(t, mock.logoutCalls == 1)
+}
+
+func TestVCenter_CleanupWithNilClient(t *testing.T) {
+ job := prepareVCSA()
+
+ assert.NotPanics(t, job.Cleanup)
+}
+
+func TestVCenter_Charts(t *testing.T) {
+ assert.NotNil(t, New().Charts())
+}
+
+func TestVCenter_Collect(t *testing.T) {
+ job := prepareVCSA()
+ require.NoError(t, job.Init())
+ mock := &mockVCenterHealthClient{}
+ job.client = mock
+
+ expected := map[string]int64{
+ "applmgmt_status_gray": 0,
+ "applmgmt_status_green": 1,
+ "applmgmt_status_orange": 0,
+ "applmgmt_status_red": 0,
+ "applmgmt_status_unknown": 0,
+ "applmgmt_status_yellow": 0,
+ "database_storage_status_gray": 0,
+ "database_storage_status_green": 1,
+ "database_storage_status_orange": 0,
+ "database_storage_status_red": 0,
+ "database_storage_status_unknown": 0,
+ "database_storage_status_yellow": 0,
+ "load_status_gray": 0,
+ "load_status_green": 1,
+ "load_status_orange": 0,
+ "load_status_red": 0,
+ "load_status_unknown": 0,
+ "load_status_yellow": 0,
+ "mem_status_gray": 0,
+ "mem_status_green": 1,
+ "mem_status_orange": 0,
+ "mem_status_red": 0,
+ "mem_status_unknown": 0,
+ "mem_status_yellow": 0,
+ "software_packages_status_gray": 0,
+ "software_packages_status_green": 1,
+ "software_packages_status_orange": 0,
+ "software_packages_status_red": 0,
+ "software_packages_status_unknown": 0,
+ "storage_status_gray": 0,
+ "storage_status_green": 1,
+ "storage_status_orange": 0,
+ "storage_status_red": 0,
+ "storage_status_unknown": 0,
+ "storage_status_yellow": 0,
+ "swap_status_gray": 0,
+ "swap_status_green": 1,
+ "swap_status_orange": 0,
+ "swap_status_red": 0,
+ "swap_status_unknown": 0,
+ "swap_status_yellow": 0,
+ "system_status_gray": 0,
+ "system_status_green": 1,
+ "system_status_orange": 0,
+ "system_status_red": 0,
+ "system_status_unknown": 0,
+ "system_status_yellow": 0,
+ }
+
+ assert.Equal(t, expected, job.Collect())
+}
+
+func TestVCenter_CollectEnsurePingIsCalled(t *testing.T) {
+ job := prepareVCSA()
+ require.NoError(t, job.Init())
+ mock := &mockVCenterHealthClient{}
+ job.client = mock
+ job.Collect()
+
+ assert.True(t, mock.pingCalls == 1)
+}
+
+func TestVCenter_CollectErrorOnPing(t *testing.T) {
+ job := prepareVCSA()
+ require.NoError(t, job.Init())
+ mock := &mockVCenterHealthClient{
+ ping: func() error { return errors.New("ping mock error") },
+ }
+ job.client = mock
+
+ assert.Zero(t, job.Collect())
+}
+
+func TestVCenter_CollectErrorOnHealthCalls(t *testing.T) {
+ job := prepareVCSA()
+ require.NoError(t, job.Init())
+ mock := &mockVCenterHealthClient{
+ applMgmt: func() (string, error) { return "", errors.New("applMgmt mock error") },
+ databaseStorage: func() (string, error) { return "", errors.New("databaseStorage mock error") },
+ load: func() (string, error) { return "", errors.New("load mock error") },
+ mem: func() (string, error) { return "", errors.New("mem mock error") },
+ softwarePackages: func() (string, error) { return "", errors.New("softwarePackages mock error") },
+ storage: func() (string, error) { return "", errors.New("storage mock error") },
+ swap: func() (string, error) { return "", errors.New("swap mock error") },
+ system: func() (string, error) { return "", errors.New("system mock error") },
+ }
+ job.client = mock
+
+ assert.Zero(t, job.Collect())
+}
+
+func prepareVCSA() *VCSA {
+ vc := New()
+ vc.URL = "https://127.0.0.1:38001"
+ vc.Username = "user"
+ vc.Password = "pass"
+
+ return vc
+}
+
+type mockVCenterHealthClient struct {
+ login func() error
+ logout func() error
+ ping func() error
+ applMgmt func() (string, error)
+ databaseStorage func() (string, error)
+ load func() (string, error)
+ mem func() (string, error)
+ softwarePackages func() (string, error)
+ storage func() (string, error)
+ swap func() (string, error)
+ system func() (string, error)
+ loginCalls int
+ logoutCalls int
+ pingCalls int
+}
+
+func (m *mockVCenterHealthClient) Login() error {
+ m.loginCalls += 1
+ if m.login == nil {
+ return nil
+ }
+ return m.login()
+}
+
+func (m *mockVCenterHealthClient) Logout() error {
+ m.logoutCalls += 1
+ if m.logout == nil {
+ return nil
+ }
+ return m.logout()
+}
+
+func (m *mockVCenterHealthClient) Ping() error {
+ m.pingCalls += 1
+ if m.ping == nil {
+ return nil
+ }
+ return m.ping()
+}
+
+func (m *mockVCenterHealthClient) ApplMgmt() (string, error) {
+ if m.applMgmt == nil {
+ return "green", nil
+ }
+ return m.applMgmt()
+}
+
+func (m *mockVCenterHealthClient) DatabaseStorage() (string, error) {
+ if m.databaseStorage == nil {
+ return "green", nil
+ }
+ return m.databaseStorage()
+}
+
+func (m *mockVCenterHealthClient) Load() (string, error) {
+ if m.load == nil {
+ return "green", nil
+ }
+ return m.load()
+}
+
+func (m *mockVCenterHealthClient) Mem() (string, error) {
+ if m.mem == nil {
+ return "green", nil
+ }
+ return m.mem()
+}
+
+func (m *mockVCenterHealthClient) SoftwarePackages() (string, error) {
+ if m.softwarePackages == nil {
+ return "green", nil
+ }
+ return m.softwarePackages()
+}
+
+func (m *mockVCenterHealthClient) Storage() (string, error) {
+ if m.storage == nil {
+ return "green", nil
+ }
+ return m.storage()
+}
+
+func (m *mockVCenterHealthClient) Swap() (string, error) {
+ if m.swap == nil {
+ return "green", nil
+ }
+ return m.swap()
+}
+
+func (m *mockVCenterHealthClient) System() (string, error) {
+ if m.system == nil {
+ return "green", nil
+ }
+ return m.system()
+}