node_exporter/collector/megacli_test.go

83 lines
1.7 KiB
Go

// +build !nomegacli
package collector
import (
"flag"
"os"
"testing"
"github.com/prometheus/client_golang/prometheus"
)
const (
testMegaCliAdapter = "fixtures/megacli_adapter.txt"
testMegaCliDisks = "fixtures/megacli_disks.txt"
physicalDevicesExpected = "5"
virtualDevicesDegraded = "0"
)
func TestMegaCliAdapter(t *testing.T) {
data, err := os.Open(testMegaCliAdapter)
if err != nil {
t.Fatal(err)
}
stats, err := parseMegaCliAdapter(data)
if err != nil {
t.Fatal(err)
}
if stats["Device Present"]["Physical Devices"] != physicalDevicesExpected {
t.Fatalf("Unexpected device count: %d != %d", stats["Device Present"]["Physical Devices"], physicalDevicesExpected)
}
if stats["Device Present"]["Degraded"] != virtualDevicesDegraded {
t.Fatal()
}
}
func TestMegaCliDisks(t *testing.T) {
data, err := os.Open(testMegaCliDisks)
if err != nil {
t.Fatal(err)
}
stats, err := parseMegaCliDisks(data)
if err != nil {
t.Fatal(err)
}
if stats[32][0]["Drive Temperature"] != "37C (98.60 F)" {
t.Fatalf("Unexpected drive temperature: %s", stats[32][0]["Drive Temperature"])
}
if stats[32][1]["Drive Temperature"] != "N/A" {
t.Fatalf("Unexpected drive temperature: %s", stats[32][2]["Drive Temperature"])
}
if stats[32][3]["Predictive Failure Count"] != "23" {
t.Fatal()
}
}
func TestMegaCliCollectorDoesntCrash(t *testing.T) {
if err := flag.Set("collector.megacli.command", "./fixtures/megacli"); err != nil {
t.Fatal(err)
}
collector, err := NewMegaCliCollector()
if err != nil {
t.Fatal(err)
}
sink := make(chan prometheus.Metric)
go func() {
for {
<-sink
}
}()
err = collector.Update(sink)
if err != nil {
t.Fatal(err)
}
}