summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/vsphere/discover/discover_test.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/vsphere/discover/discover_test.go179
1 files changed, 179 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/vsphere/discover/discover_test.go b/src/go/collectors/go.d.plugin/modules/vsphere/discover/discover_test.go
new file mode 100644
index 000000000..01f83fd38
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/vsphere/discover/discover_test.go
@@ -0,0 +1,179 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package discover
+
+import (
+ "crypto/tls"
+ "net/url"
+ "testing"
+ "time"
+
+ "github.com/netdata/netdata/go/go.d.plugin/modules/vsphere/client"
+ rs "github.com/netdata/netdata/go/go.d.plugin/modules/vsphere/resources"
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/tlscfg"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "github.com/vmware/govmomi/simulator"
+)
+
+func TestDiscoverer_Discover(t *testing.T) {
+ d, _, teardown := prepareDiscovererSim(t)
+ defer teardown()
+
+ res, err := d.Discover()
+
+ require.NoError(t, err)
+ assert.True(t, len(res.DataCenters) > 0)
+ assert.True(t, len(res.Folders) > 0)
+ assert.True(t, len(res.Clusters) > 0)
+ assert.True(t, len(res.Hosts) > 0)
+ assert.True(t, len(res.VMs) > 0)
+ assert.True(t, isHierarchySet(res))
+ assert.True(t, isMetricListsCollected(res))
+}
+
+func TestDiscoverer_discover(t *testing.T) {
+ d, model, teardown := prepareDiscovererSim(t)
+ defer teardown()
+
+ raw, err := d.discover()
+
+ require.NoError(t, err)
+ count := model.Count()
+ assert.Lenf(t, raw.dcs, count.Datacenter, "datacenters")
+ assert.Lenf(t, raw.folders, count.Folder-1, "folders") // minus root folder
+ dummyClusters := model.Host * count.Datacenter
+ assert.Lenf(t, raw.clusters, count.Cluster+dummyClusters, "clusters")
+ assert.Lenf(t, raw.hosts, count.Host, "hosts")
+ assert.Lenf(t, raw.vms, count.Machine, "hosts")
+}
+
+func TestDiscoverer_build(t *testing.T) {
+ d, _, teardown := prepareDiscovererSim(t)
+ defer teardown()
+
+ raw, err := d.discover()
+ require.NoError(t, err)
+
+ res := d.build(raw)
+
+ assert.Lenf(t, res.DataCenters, len(raw.dcs), "datacenters")
+ assert.Lenf(t, res.Folders, len(raw.folders), "folders")
+ assert.Lenf(t, res.Clusters, len(raw.clusters), "clusters")
+ assert.Lenf(t, res.Hosts, len(raw.hosts), "hosts")
+ assert.Lenf(t, res.VMs, len(raw.vms), "hosts")
+}
+
+func TestDiscoverer_setHierarchy(t *testing.T) {
+ d, _, teardown := prepareDiscovererSim(t)
+ defer teardown()
+
+ raw, err := d.discover()
+ require.NoError(t, err)
+ res := d.build(raw)
+
+ err = d.setHierarchy(res)
+
+ require.NoError(t, err)
+ assert.True(t, isHierarchySet(res))
+}
+
+func TestDiscoverer_removeUnmatched(t *testing.T) {
+ d, _, teardown := prepareDiscovererSim(t)
+ defer teardown()
+
+ d.HostMatcher = falseHostMatcher{}
+ d.VMMatcher = falseVMMatcher{}
+ raw, err := d.discover()
+ require.NoError(t, err)
+ res := d.build(raw)
+
+ numVMs, numHosts := len(res.VMs), len(res.Hosts)
+ assert.Equal(t, numVMs+numHosts, d.removeUnmatched(res))
+ assert.Lenf(t, res.Hosts, 0, "hosts")
+ assert.Lenf(t, res.VMs, 0, "vms")
+}
+
+func TestDiscoverer_collectMetricLists(t *testing.T) {
+ d, _, teardown := prepareDiscovererSim(t)
+ defer teardown()
+
+ raw, err := d.discover()
+ require.NoError(t, err)
+
+ res := d.build(raw)
+ err = d.collectMetricLists(res)
+
+ require.NoError(t, err)
+ assert.True(t, isMetricListsCollected(res))
+}
+
+func prepareDiscovererSim(t *testing.T) (d *Discoverer, model *simulator.Model, teardown func()) {
+ model, srv := createSim(t)
+ teardown = func() { model.Remove(); srv.Close() }
+ c := newClient(t, srv.URL)
+
+ return New(c), model, teardown
+}
+
+func newClient(t *testing.T, vCenterURL *url.URL) *client.Client {
+ c, err := client.New(client.Config{
+ URL: vCenterURL.String(),
+ User: "admin",
+ Password: "password",
+ Timeout: time.Second * 3,
+ TLSConfig: tlscfg.TLSConfig{InsecureSkipVerify: true},
+ })
+ require.NoError(t, err)
+ return c
+}
+
+func createSim(t *testing.T) (*simulator.Model, *simulator.Server) {
+ model := simulator.VPX()
+ err := model.Create()
+ require.NoError(t, err)
+ model.Service.TLS = new(tls.Config)
+ return model, model.Service.NewServer()
+}
+
+func isHierarchySet(res *rs.Resources) bool {
+ for _, c := range res.Clusters {
+ if !c.Hier.IsSet() {
+ return false
+ }
+ }
+ for _, h := range res.Hosts {
+ if !h.Hier.IsSet() {
+ return false
+ }
+ }
+ for _, v := range res.VMs {
+ if !v.Hier.IsSet() {
+ return false
+ }
+ }
+ return true
+}
+
+func isMetricListsCollected(res *rs.Resources) bool {
+ for _, h := range res.Hosts {
+ if h.MetricList == nil {
+ return false
+ }
+ }
+ for _, v := range res.VMs {
+ if v.MetricList == nil {
+ return false
+ }
+ }
+ return true
+}
+
+type falseHostMatcher struct{}
+
+func (falseHostMatcher) Match(*rs.Host) bool { return false }
+
+type falseVMMatcher struct{}
+
+func (falseVMMatcher) Match(*rs.VM) bool { return false }