174 lines
5.0 KiB
Go
174 lines
5.0 KiB
Go
package leofs
|
|
|
|
import (
|
|
"github.com/influxdb/telegraf/testutil"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
"testing"
|
|
)
|
|
|
|
var fakeSNMP4Manager = `
|
|
package main
|
|
|
|
import "fmt"
|
|
|
|
const output = ` + "`" + `iso.3.6.1.4.1.35450.15.1.0 = STRING: "manager_888@127.0.0.1"
|
|
iso.3.6.1.4.1.35450.15.2.0 = Gauge32: 186
|
|
iso.3.6.1.4.1.35450.15.3.0 = Gauge32: 46235519
|
|
iso.3.6.1.4.1.35450.15.4.0 = Gauge32: 32168525
|
|
iso.3.6.1.4.1.35450.15.5.0 = Gauge32: 14066068
|
|
iso.3.6.1.4.1.35450.15.6.0 = Gauge32: 5512968
|
|
iso.3.6.1.4.1.35450.15.7.0 = Gauge32: 186
|
|
iso.3.6.1.4.1.35450.15.8.0 = Gauge32: 46269006
|
|
iso.3.6.1.4.1.35450.15.9.0 = Gauge32: 32202867
|
|
iso.3.6.1.4.1.35450.15.10.0 = Gauge32: 14064995
|
|
iso.3.6.1.4.1.35450.15.11.0 = Gauge32: 5492634
|
|
iso.3.6.1.4.1.35450.15.12.0 = Gauge32: 60
|
|
iso.3.6.1.4.1.35450.15.13.0 = Gauge32: 43515904
|
|
iso.3.6.1.4.1.35450.15.14.0 = Gauge32: 60
|
|
iso.3.6.1.4.1.35450.15.15.0 = Gauge32: 43533983` + "`" +
|
|
`
|
|
func main() {
|
|
fmt.Println(output)
|
|
}
|
|
`
|
|
|
|
var fakeSNMP4Storage = `
|
|
package main
|
|
|
|
import "fmt"
|
|
|
|
const output = ` + "`" + `iso.3.6.1.4.1.35450.34.1.0 = STRING: "storage_0@127.0.0.1"
|
|
iso.3.6.1.4.1.35450.34.2.0 = Gauge32: 512
|
|
iso.3.6.1.4.1.35450.34.3.0 = Gauge32: 38126307
|
|
iso.3.6.1.4.1.35450.34.4.0 = Gauge32: 22308716
|
|
iso.3.6.1.4.1.35450.34.5.0 = Gauge32: 15816448
|
|
iso.3.6.1.4.1.35450.34.6.0 = Gauge32: 5232008
|
|
iso.3.6.1.4.1.35450.34.7.0 = Gauge32: 512
|
|
iso.3.6.1.4.1.35450.34.8.0 = Gauge32: 38113176
|
|
iso.3.6.1.4.1.35450.34.9.0 = Gauge32: 22313398
|
|
iso.3.6.1.4.1.35450.34.10.0 = Gauge32: 15798779
|
|
iso.3.6.1.4.1.35450.34.11.0 = Gauge32: 5237315
|
|
iso.3.6.1.4.1.35450.34.12.0 = Gauge32: 191
|
|
iso.3.6.1.4.1.35450.34.13.0 = Gauge32: 824
|
|
iso.3.6.1.4.1.35450.34.14.0 = Gauge32: 0
|
|
iso.3.6.1.4.1.35450.34.15.0 = Gauge32: 50105
|
|
iso.3.6.1.4.1.35450.34.16.0 = Gauge32: 196654
|
|
iso.3.6.1.4.1.35450.34.17.0 = Gauge32: 0
|
|
iso.3.6.1.4.1.35450.34.18.0 = Gauge32: 2052
|
|
iso.3.6.1.4.1.35450.34.19.0 = Gauge32: 50296
|
|
iso.3.6.1.4.1.35450.34.20.0 = Gauge32: 35
|
|
iso.3.6.1.4.1.35450.34.21.0 = Gauge32: 898
|
|
iso.3.6.1.4.1.35450.34.22.0 = Gauge32: 0
|
|
iso.3.6.1.4.1.35450.34.23.0 = Gauge32: 0
|
|
iso.3.6.1.4.1.35450.34.24.0 = Gauge32: 0
|
|
iso.3.6.1.4.1.35450.34.31.0 = Gauge32: 51
|
|
iso.3.6.1.4.1.35450.34.32.0 = Gauge32: 53219328
|
|
iso.3.6.1.4.1.35450.34.33.0 = Gauge32: 51
|
|
iso.3.6.1.4.1.35450.34.34.0 = Gauge32: 53351083` + "`" +
|
|
`
|
|
func main() {
|
|
fmt.Println(output)
|
|
}
|
|
`
|
|
|
|
var fakeSNMP4Gateway = `
|
|
package main
|
|
|
|
import "fmt"
|
|
|
|
const output = ` + "`" + `iso.3.6.1.4.1.35450.34.1.0 = STRING: "gateway_0@127.0.0.1"
|
|
iso.3.6.1.4.1.35450.34.2.0 = Gauge32: 465
|
|
iso.3.6.1.4.1.35450.34.3.0 = Gauge32: 61676335
|
|
iso.3.6.1.4.1.35450.34.4.0 = Gauge32: 46890415
|
|
iso.3.6.1.4.1.35450.34.5.0 = Gauge32: 14785011
|
|
iso.3.6.1.4.1.35450.34.6.0 = Gauge32: 5578855
|
|
iso.3.6.1.4.1.35450.34.7.0 = Gauge32: 465
|
|
iso.3.6.1.4.1.35450.34.8.0 = Gauge32: 61644426
|
|
iso.3.6.1.4.1.35450.34.9.0 = Gauge32: 46880358
|
|
iso.3.6.1.4.1.35450.34.10.0 = Gauge32: 14763002
|
|
iso.3.6.1.4.1.35450.34.11.0 = Gauge32: 5582125
|
|
iso.3.6.1.4.1.35450.34.12.0 = Gauge32: 191
|
|
iso.3.6.1.4.1.35450.34.13.0 = Gauge32: 827
|
|
iso.3.6.1.4.1.35450.34.14.0 = Gauge32: 0
|
|
iso.3.6.1.4.1.35450.34.15.0 = Gauge32: 50105
|
|
iso.3.6.1.4.1.35450.34.16.0 = Gauge32: 196650
|
|
iso.3.6.1.4.1.35450.34.17.0 = Gauge32: 0
|
|
iso.3.6.1.4.1.35450.34.18.0 = Gauge32: 30256
|
|
iso.3.6.1.4.1.35450.34.19.0 = Gauge32: 532158
|
|
iso.3.6.1.4.1.35450.34.20.0 = Gauge32: 34
|
|
iso.3.6.1.4.1.35450.34.21.0 = Gauge32: 1
|
|
iso.3.6.1.4.1.35450.34.31.0 = Gauge32: 53
|
|
iso.3.6.1.4.1.35450.34.32.0 = Gauge32: 55050240
|
|
iso.3.6.1.4.1.35450.34.33.0 = Gauge32: 53
|
|
iso.3.6.1.4.1.35450.34.34.0 = Gauge32: 55186538` + "`" +
|
|
`
|
|
func main() {
|
|
fmt.Println(output)
|
|
}
|
|
`
|
|
|
|
func makeFakeSNMPSrc(code string) string {
|
|
path := os.TempDir() + "/test.go"
|
|
err := ioutil.WriteFile(path, []byte(code), 0600)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
return path
|
|
}
|
|
|
|
func buildFakeSNMPCmd(src string) {
|
|
err := exec.Command("go", "build", "-o", "snmpwalk", src).Run()
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
}
|
|
|
|
func testMain(t *testing.T, code string, endpoint string, serverType ServerType) {
|
|
|
|
// Build the fake snmpwalk for test
|
|
src := makeFakeSNMPSrc(code)
|
|
defer os.Remove(src)
|
|
buildFakeSNMPCmd(src)
|
|
defer os.Remove("./snmpwalk")
|
|
envPathOrigin := os.Getenv("PATH")
|
|
// Refer to the fake snmpwalk
|
|
os.Setenv("PATH", ".")
|
|
defer os.Setenv("PATH", envPathOrigin)
|
|
|
|
l := &LeoFS{
|
|
Servers: []string{endpoint},
|
|
}
|
|
|
|
var acc testutil.Accumulator
|
|
|
|
err := l.Gather(&acc)
|
|
require.NoError(t, err)
|
|
|
|
floatMetrics := KeyMapping[serverType]
|
|
|
|
for _, metric := range floatMetrics {
|
|
assert.True(t, acc.HasFloatValue(metric), metric)
|
|
}
|
|
}
|
|
|
|
func TestLeoFSManagerMasterMetrics(t *testing.T) {
|
|
testMain(t, fakeSNMP4Manager, "localhost:4020", ServerTypeManagerMaster)
|
|
}
|
|
|
|
func TestLeoFSManagerSlaveMetrics(t *testing.T) {
|
|
testMain(t, fakeSNMP4Manager, "localhost:4021", ServerTypeManagerSlave)
|
|
}
|
|
|
|
func TestLeoFSStorageMetrics(t *testing.T) {
|
|
testMain(t, fakeSNMP4Storage, "localhost:4010", ServerTypeStorage)
|
|
}
|
|
|
|
func TestLeoFSGatewayMetrics(t *testing.T) {
|
|
testMain(t, fakeSNMP4Gateway, "localhost:4000", ServerTypeGateway)
|
|
}
|