master
go 93 lines 3.44 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2 package vsphere
3
4 import (
5 "testing"
6
7 "github.com/stretchr/testify/require"
8 "github.com/vmware/govmomi/vim25/types"
9
10 rs "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/vsphere/resources"
11 )
12
13 func TestWriteDatastoreMetrics(t *testing.T) {
14 yes := true
15
16 tests := map[string]struct {
17 ds rs.Datastore
18 want map[string]int64
19 }{
20 "accessible datastore": {
21 ds: rs.Datastore{
22 ID: "datastore-1",
23 OverallStatus: "red",
24 Capacity: 1000,
25 FreeSpace: 400,
26 Uncommitted: 250,
27 Accessible: true,
28 MaintenanceMode: string(types.DatastoreSummaryMaintenanceModeStateNormal),
29 MultipleHostAccess: &yes,
30 },
31 want: map[string]int64{
32 "datastore_space_usage_capacity": 1000,
33 "datastore_space_usage_free": 400,
34 "datastore_space_usage_used": 600,
35 "datastore_space_utilization_used": 6000,
36 "datastore_space_usage_uncommitted": 250,
37 "datastore_overall_status_green": 0,
38 "datastore_overall_status_red": 1,
39 "datastore_overall_status_yellow": 0,
40 "datastore_overall_status_gray": 0,
41 "datastore_accessibility_status_accessible": 1,
42 "datastore_accessibility_status_inaccessible": 0,
43 "datastore_maintenance_status_normal": 1,
44 "datastore_maintenance_status_entering_maintenance": 0,
45 "datastore_maintenance_status_in_maintenance": 0,
46 "datastore_maintenance_status_unknown": 0,
47 "datastore_multiple_host_access_enabled": 1,
48 "datastore_multiple_host_access_disabled": 0,
49 "datastore_multiple_host_access_unknown": 0,
50 },
51 },
52 "inaccessible datastore": {
53 ds: rs.Datastore{
54 ID: "datastore-2",
55 OverallStatus: "gray",
56 Capacity: 1000,
57 FreeSpace: 400,
58 Uncommitted: 250,
59 },
60 want: map[string]int64{
61 "datastore_space_usage_capacity": 0,
62 "datastore_space_usage_free": 0,
63 "datastore_space_usage_used": 0,
64 "datastore_space_utilization_used": 0,
65 "datastore_space_usage_uncommitted": 0,
66 "datastore_overall_status_green": 0,
67 "datastore_overall_status_red": 0,
68 "datastore_overall_status_yellow": 0,
69 "datastore_overall_status_gray": 1,
70 "datastore_accessibility_status_accessible": 0,
71 "datastore_accessibility_status_inaccessible": 1,
72 "datastore_maintenance_status_normal": 0,
73 "datastore_maintenance_status_entering_maintenance": 0,
74 "datastore_maintenance_status_in_maintenance": 0,
75 "datastore_maintenance_status_unknown": 1,
76 "datastore_multiple_host_access_enabled": 0,
77 "datastore_multiple_host_access_disabled": 0,
78 "datastore_multiple_host_access_unknown": 1,
79 },
80 },
81 }
82
83 for name, tc := range tests {
84 t.Run(name, func(t *testing.T) {
85 collr := New()
86 series := runMetricWriteForTest(t, collr, func() { collr.writeDatastoreMetrics(&tc.ds) })
87 require.Len(t, series, len(tc.want))
88 for metric, want := range tc.want {
89 requireScalarSeriesValue(t, series, metric, tc.ds.ID, want)
90 }
91 })
92 }
93 }