github.com/netdata/go.d.plugin@v0.58.1/modules/vsphere/client/client_test.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package client
     4  
     5  import (
     6  	"crypto/tls"
     7  	"net/url"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/netdata/go.d.plugin/pkg/tlscfg"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  	"github.com/vmware/govmomi/simulator"
    16  	"github.com/vmware/govmomi/vim25/mo"
    17  	"github.com/vmware/govmomi/vim25/types"
    18  )
    19  
    20  func TestNew(t *testing.T) {
    21  	client, teardown := prepareClient(t)
    22  	defer teardown()
    23  
    24  	v, err := client.IsSessionActive()
    25  	assert.NoError(t, err)
    26  	assert.True(t, v)
    27  }
    28  
    29  func TestClient_Version(t *testing.T) {
    30  	client, teardown := prepareClient(t)
    31  	defer teardown()
    32  
    33  	assert.NotEmpty(t, client.Version())
    34  }
    35  
    36  func TestClient_CounterInfoByName(t *testing.T) {
    37  	client, teardown := prepareClient(t)
    38  	defer teardown()
    39  
    40  	v, err := client.CounterInfoByName()
    41  	assert.NoError(t, err)
    42  	assert.IsType(t, map[string]*types.PerfCounterInfo{}, v)
    43  	assert.NotEmpty(t, v)
    44  }
    45  
    46  func TestClient_IsSessionActive(t *testing.T) {
    47  	client, teardown := prepareClient(t)
    48  	defer teardown()
    49  
    50  	v, err := client.IsSessionActive()
    51  	assert.NoError(t, err)
    52  	assert.True(t, v)
    53  }
    54  
    55  func TestClient_Login(t *testing.T) {
    56  	client, teardown := prepareClient(t)
    57  	defer teardown()
    58  
    59  	assert.NoError(t, client.Logout())
    60  
    61  	err := client.Login(url.UserPassword("admin", "password"))
    62  	assert.NoError(t, err)
    63  
    64  	ok, err := client.IsSessionActive()
    65  	assert.NoError(t, err)
    66  	assert.True(t, ok)
    67  }
    68  
    69  func TestClient_Logout(t *testing.T) {
    70  	client, teardown := prepareClient(t)
    71  	defer teardown()
    72  
    73  	assert.NoError(t, client.Logout())
    74  
    75  	v, err := client.IsSessionActive()
    76  	assert.NoError(t, err)
    77  	assert.False(t, v)
    78  }
    79  
    80  func TestClient_Datacenters(t *testing.T) {
    81  	client, teardown := prepareClient(t)
    82  	defer teardown()
    83  
    84  	dcs, err := client.Datacenters()
    85  	assert.NoError(t, err)
    86  	assert.NotEmpty(t, dcs)
    87  }
    88  
    89  func TestClient_Folders(t *testing.T) {
    90  	client, teardown := prepareClient(t)
    91  	defer teardown()
    92  
    93  	folders, err := client.Folders()
    94  	assert.NoError(t, err)
    95  	assert.NotEmpty(t, folders)
    96  }
    97  
    98  func TestClient_ComputeResources(t *testing.T) {
    99  	client, teardown := prepareClient(t)
   100  	defer teardown()
   101  
   102  	computes, err := client.ComputeResources()
   103  	assert.NoError(t, err)
   104  	assert.NotEmpty(t, computes)
   105  }
   106  
   107  func TestClient_Hosts(t *testing.T) {
   108  	client, teardown := prepareClient(t)
   109  	defer teardown()
   110  
   111  	hosts, err := client.Hosts()
   112  	assert.NoError(t, err)
   113  	assert.NotEmpty(t, hosts)
   114  }
   115  
   116  func TestClient_VirtualMachines(t *testing.T) {
   117  	client, teardown := prepareClient(t)
   118  	defer teardown()
   119  
   120  	vms, err := client.VirtualMachines()
   121  	assert.NoError(t, err)
   122  	assert.NotEmpty(t, vms)
   123  }
   124  
   125  func TestClient_PerformanceMetrics(t *testing.T) {
   126  	client, teardown := prepareClient(t)
   127  	defer teardown()
   128  
   129  	hosts, err := client.Hosts()
   130  	require.NoError(t, err)
   131  	metrics, err := client.PerformanceMetrics(hostsPerfQuerySpecs(hosts))
   132  	require.NoError(t, err)
   133  	assert.True(t, len(metrics) > 0)
   134  }
   135  
   136  func prepareClient(t *testing.T) (client *Client, teardown func()) {
   137  	model, srv := createSim(t)
   138  	teardown = func() { model.Remove(); srv.Close() }
   139  	return newClient(t, srv.URL), teardown
   140  }
   141  
   142  func newClient(t *testing.T, vCenterURL *url.URL) *Client {
   143  	client, err := New(Config{
   144  		URL:       vCenterURL.String(),
   145  		User:      "admin",
   146  		Password:  "password",
   147  		Timeout:   time.Second * 3,
   148  		TLSConfig: tlscfg.TLSConfig{InsecureSkipVerify: true},
   149  	})
   150  	require.NoError(t, err)
   151  	return client
   152  }
   153  
   154  func createSim(t *testing.T) (*simulator.Model, *simulator.Server) {
   155  	model := simulator.VPX()
   156  	err := model.Create()
   157  	require.NoError(t, err)
   158  	model.Service.TLS = new(tls.Config)
   159  	return model, model.Service.NewServer()
   160  }
   161  
   162  func hostsPerfQuerySpecs(hosts []mo.HostSystem) []types.PerfQuerySpec {
   163  	var pqs []types.PerfQuerySpec
   164  	for _, host := range hosts {
   165  		pq := types.PerfQuerySpec{
   166  			Entity:     host.Reference(),
   167  			MaxSample:  1,
   168  			MetricId:   []types.PerfMetricId{{CounterId: 32, Instance: ""}},
   169  			IntervalId: 20,
   170  			Format:     "normal",
   171  		}
   172  		pqs = append(pqs, pq)
   173  	}
   174  	return pqs
   175  }