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 }