258 lines
8.6 KiB
Go
258 lines
8.6 KiB
Go
|
package proxmox
|
||
|
|
||
|
import (
|
||
|
"net/url"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
|
||
|
"github.com/influxdata/telegraf"
|
||
|
"github.com/influxdata/telegraf/metric"
|
||
|
"github.com/influxdata/telegraf/testutil"
|
||
|
)
|
||
|
|
||
|
var nodeSearchDomainTestData = `{"data":{"search":"test.example.com","dns1":"1.0.0.1"}}`
|
||
|
var qemuTestData = `{"data":[{"name":"qemu1","status":"running","maxdisk":10737418240,"cpu":0.029336643550795,"vmid":"113","uptime":2159739,` +
|
||
|
`"disk":0,"maxmem":2147483648,"mem":1722451796}]}`
|
||
|
var qemuConfigTestData = `{"data":{"hostname":"qemu1","searchdomain":"test.example.com"}}`
|
||
|
var lxcTestData = `{"data":[{"vmid":"111","type":"lxc","uptime":2078164,"swap":9412608,"disk":"744189952","maxmem":536870912,"mem":98500608,` +
|
||
|
`"maxswap":536870912,"cpu":0.00371567669193613,"status":"running","maxdisk":"5217320960","name":"container1"},{"vmid":112,"type":"lxc",` +
|
||
|
`"uptime":2078164,"swap":9412608,"disk":"744189952","maxmem":536870912,"mem":98500608,"maxswap":536870912,"cpu":0.00371567669193613,` +
|
||
|
`"status":"running","maxdisk":"5217320960","name":"container2"}]}`
|
||
|
var lxcConfigTestData = `{"data":{"hostname":"container1","searchdomain":"test.example.com"}}`
|
||
|
var lxcCurrentStatusTestData = `{"data":{"vmid":"111","type":"lxc","uptime":2078164,"swap":9412608,"disk":"744189952","maxmem":536870912,` +
|
||
|
`"mem":98500608,"maxswap":536870912,"cpu":0.00371567669193613,"status":"running","maxdisk":"5217320960","name":"container1"}}`
|
||
|
var qemuCurrentStatusTestData = `{"data":{"name":"qemu1","status":"running","maxdisk":10737418240,"cpu":0.029336643550795,"vmid":"113",` +
|
||
|
`"uptime":2159739,"disk":0,"maxmem":2147483648,"mem":1722451796}}`
|
||
|
|
||
|
func performTestRequest(apiURL, _ string, _ url.Values) ([]byte, error) {
|
||
|
var bytedata = []byte("")
|
||
|
|
||
|
if strings.HasSuffix(apiURL, "dns") {
|
||
|
bytedata = []byte(nodeSearchDomainTestData)
|
||
|
} else if strings.HasSuffix(apiURL, "qemu") {
|
||
|
bytedata = []byte(qemuTestData)
|
||
|
} else if strings.HasSuffix(apiURL, "113/config") {
|
||
|
bytedata = []byte(qemuConfigTestData)
|
||
|
} else if strings.HasSuffix(apiURL, "lxc") {
|
||
|
bytedata = []byte(lxcTestData)
|
||
|
} else if strings.HasSuffix(apiURL, "111/config") {
|
||
|
bytedata = []byte(lxcConfigTestData)
|
||
|
} else if strings.HasSuffix(apiURL, "111/status/current") {
|
||
|
bytedata = []byte(lxcCurrentStatusTestData)
|
||
|
} else if strings.HasSuffix(apiURL, "113/status/current") {
|
||
|
bytedata = []byte(qemuCurrentStatusTestData)
|
||
|
}
|
||
|
|
||
|
return bytedata, nil
|
||
|
}
|
||
|
|
||
|
func TestGetNodeSearchDomain(t *testing.T) {
|
||
|
px := &Proxmox{
|
||
|
NodeName: "testnode",
|
||
|
Log: testutil.Logger{},
|
||
|
}
|
||
|
require.NoError(t, px.Init())
|
||
|
px.requestFunction = performTestRequest
|
||
|
|
||
|
require.NoError(t, px.getNodeSearchDomain())
|
||
|
require.Equal(t, "test.example.com", px.nodeSearchDomain)
|
||
|
}
|
||
|
|
||
|
func TestGatherLxcData(t *testing.T) {
|
||
|
px := &Proxmox{
|
||
|
NodeName: "testnode",
|
||
|
Log: testutil.Logger{},
|
||
|
nodeSearchDomain: "test.example.com",
|
||
|
}
|
||
|
require.NoError(t, px.Init())
|
||
|
px.requestFunction = performTestRequest
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
px.gatherVMData(&acc, lxc)
|
||
|
|
||
|
expected := []telegraf.Metric{
|
||
|
metric.New(
|
||
|
"proxmox",
|
||
|
map[string]string{
|
||
|
"node_fqdn": "testnode.test.example.com",
|
||
|
"vm_name": "container1",
|
||
|
"vm_fqdn": "container1.test.example.com",
|
||
|
"vm_type": "lxc",
|
||
|
},
|
||
|
map[string]interface{}{
|
||
|
"status": "running",
|
||
|
"uptime": int64(2078164),
|
||
|
"cpuload": float64(0.00371567669193613),
|
||
|
"mem_used": int64(98500608),
|
||
|
"mem_total": int64(536870912),
|
||
|
"mem_free": int64(438370304),
|
||
|
"mem_used_percentage": float64(18.34716796875),
|
||
|
"swap_used": int64(9412608),
|
||
|
"swap_total": int64(536870912),
|
||
|
"swap_free": int64(527458304),
|
||
|
"swap_used_percentage": float64(1.75323486328125),
|
||
|
"disk_used": int64(744189952),
|
||
|
"disk_total": int64(5217320960),
|
||
|
"disk_free": int64(4473131008),
|
||
|
"disk_used_percentage": float64(14.26383306117322),
|
||
|
},
|
||
|
time.Unix(0, 0),
|
||
|
),
|
||
|
}
|
||
|
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
|
||
|
}
|
||
|
|
||
|
func TestGatherQemuData(t *testing.T) {
|
||
|
px := &Proxmox{
|
||
|
NodeName: "testnode",
|
||
|
Log: testutil.Logger{},
|
||
|
nodeSearchDomain: "test.example.com",
|
||
|
}
|
||
|
require.NoError(t, px.Init())
|
||
|
px.requestFunction = performTestRequest
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
px.gatherVMData(&acc, qemu)
|
||
|
|
||
|
expected := []telegraf.Metric{
|
||
|
metric.New(
|
||
|
"proxmox",
|
||
|
map[string]string{
|
||
|
"node_fqdn": "testnode.test.example.com",
|
||
|
"vm_name": "qemu1",
|
||
|
"vm_fqdn": "qemu1.test.example.com",
|
||
|
"vm_type": "qemu",
|
||
|
},
|
||
|
map[string]interface{}{
|
||
|
"status": "running",
|
||
|
"uptime": int64(2159739),
|
||
|
"cpuload": float64(0.029336643550795),
|
||
|
"mem_used": int64(1722451796),
|
||
|
"mem_total": int64(2147483648),
|
||
|
"mem_free": int64(425031852),
|
||
|
"mem_used_percentage": float64(80.20791206508875),
|
||
|
"swap_used": int64(0),
|
||
|
"swap_total": int64(0),
|
||
|
"swap_free": int64(0),
|
||
|
"swap_used_percentage": float64(0),
|
||
|
"disk_used": int64(0),
|
||
|
"disk_total": int64(10737418240),
|
||
|
"disk_free": int64(10737418240),
|
||
|
"disk_used_percentage": float64(0),
|
||
|
},
|
||
|
time.Unix(0, 0),
|
||
|
),
|
||
|
}
|
||
|
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
|
||
|
}
|
||
|
|
||
|
func TestGatherLxcDataWithID(t *testing.T) {
|
||
|
px := &Proxmox{
|
||
|
NodeName: "testnode",
|
||
|
AdditionalVmstatsTags: []string{"vmid"},
|
||
|
Log: testutil.Logger{},
|
||
|
nodeSearchDomain: "test.example.com",
|
||
|
}
|
||
|
require.NoError(t, px.Init())
|
||
|
px.requestFunction = performTestRequest
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
px.gatherVMData(&acc, lxc)
|
||
|
|
||
|
expected := []telegraf.Metric{
|
||
|
metric.New(
|
||
|
"proxmox",
|
||
|
map[string]string{
|
||
|
"node_fqdn": "testnode.test.example.com",
|
||
|
"vm_name": "container1",
|
||
|
"vm_fqdn": "container1.test.example.com",
|
||
|
"vm_type": "lxc",
|
||
|
"vm_id": "111",
|
||
|
},
|
||
|
map[string]interface{}{
|
||
|
"status": "running",
|
||
|
"uptime": int64(2078164),
|
||
|
"cpuload": float64(0.00371567669193613),
|
||
|
"mem_used": int64(98500608),
|
||
|
"mem_total": int64(536870912),
|
||
|
"mem_free": int64(438370304),
|
||
|
"mem_used_percentage": float64(18.34716796875),
|
||
|
"swap_used": int64(9412608),
|
||
|
"swap_total": int64(536870912),
|
||
|
"swap_free": int64(527458304),
|
||
|
"swap_used_percentage": float64(1.75323486328125),
|
||
|
"disk_used": int64(744189952),
|
||
|
"disk_total": int64(5217320960),
|
||
|
"disk_free": int64(4473131008),
|
||
|
"disk_used_percentage": float64(14.26383306117322),
|
||
|
},
|
||
|
time.Unix(0, 0),
|
||
|
),
|
||
|
}
|
||
|
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
|
||
|
}
|
||
|
|
||
|
func TestGatherQemuDataWithID(t *testing.T) {
|
||
|
px := &Proxmox{
|
||
|
NodeName: "testnode",
|
||
|
AdditionalVmstatsTags: []string{"vmid"},
|
||
|
Log: testutil.Logger{},
|
||
|
nodeSearchDomain: "test.example.com",
|
||
|
}
|
||
|
require.NoError(t, px.Init())
|
||
|
px.requestFunction = performTestRequest
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
px.gatherVMData(&acc, qemu)
|
||
|
|
||
|
expected := []telegraf.Metric{
|
||
|
metric.New(
|
||
|
"proxmox",
|
||
|
map[string]string{
|
||
|
"node_fqdn": "testnode.test.example.com",
|
||
|
"vm_name": "qemu1",
|
||
|
"vm_fqdn": "qemu1.test.example.com",
|
||
|
"vm_type": "qemu",
|
||
|
"vm_id": "113",
|
||
|
},
|
||
|
map[string]interface{}{
|
||
|
"status": "running",
|
||
|
"uptime": int64(2159739),
|
||
|
"cpuload": float64(0.029336643550795),
|
||
|
"mem_used": int64(1722451796),
|
||
|
"mem_total": int64(2147483648),
|
||
|
"mem_free": int64(425031852),
|
||
|
"mem_used_percentage": float64(80.20791206508875),
|
||
|
"swap_used": int64(0),
|
||
|
"swap_total": int64(0),
|
||
|
"swap_free": int64(0),
|
||
|
"swap_used_percentage": float64(0),
|
||
|
"disk_used": int64(0),
|
||
|
"disk_total": int64(10737418240),
|
||
|
"disk_free": int64(10737418240),
|
||
|
"disk_used_percentage": float64(0),
|
||
|
},
|
||
|
time.Unix(0, 0),
|
||
|
),
|
||
|
}
|
||
|
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
|
||
|
}
|
||
|
|
||
|
func TestGather(t *testing.T) {
|
||
|
px := &Proxmox{
|
||
|
NodeName: "testnode",
|
||
|
Log: testutil.Logger{},
|
||
|
}
|
||
|
require.NoError(t, px.Init())
|
||
|
px.requestFunction = performTestRequest
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
require.NoError(t, px.Gather(&acc))
|
||
|
|
||
|
// Results from both tests above
|
||
|
require.Equal(t, 30, acc.NFields())
|
||
|
}
|