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  }