1
0
Fork 0
telegraf/plugins/inputs/mdstat/mdstat_test.go
Daniel Baumann 4978089aab
Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-24 07:26:29 +02:00

190 lines
5 KiB
Go

//go:build linux
package mdstat
import (
"os"
"testing"
"github.com/stretchr/testify/require"
"github.com/influxdata/telegraf/testutil"
)
func TestFullMdstatProcFile(t *testing.T) {
filename := makeFakeMDStatFile([]byte(mdStatFileFull))
defer os.Remove(filename)
k := Mdstat{
FileName: filename,
}
acc := testutil.Accumulator{}
err := k.Gather(&acc)
require.NoError(t, err)
fields := map[string]interface{}{
"BlocksSynced": int64(10620027200),
"BlocksSyncedFinishTime": float64(101.6),
"BlocksSyncedPct": float64(94.3),
"BlocksSyncedSpeed": float64(103517),
"BlocksTotal": int64(11251451904),
"DisksActive": int64(12),
"DisksFailed": int64(0),
"DisksSpare": int64(0),
"DisksTotal": int64(12),
"DisksDown": int64(0),
}
acc.AssertContainsFields(t, "mdstat", fields)
}
func TestMdstatSyncStart(t *testing.T) {
filename := makeFakeMDStatFile([]byte(mdStatSyncStart))
defer os.Remove(filename)
k := Mdstat{
FileName: filename,
}
acc := testutil.Accumulator{}
err := k.Gather(&acc)
require.NoError(t, err)
fields := map[string]interface{}{
"BlocksSynced": int64(10620027200),
"BlocksSyncedFinishTime": float64(101.6),
"BlocksSyncedPct": float64(1.5),
"BlocksSyncedSpeed": float64(103517),
"BlocksTotal": int64(11251451904),
"DisksActive": int64(12),
"DisksFailed": int64(0),
"DisksSpare": int64(0),
"DisksTotal": int64(12),
"DisksDown": int64(0),
}
acc.AssertContainsFields(t, "mdstat", fields)
}
func TestFailedDiskMdStatProcFile1(t *testing.T) {
filename := makeFakeMDStatFile([]byte(mdStatFileFailedDisk))
defer os.Remove(filename)
k := Mdstat{
FileName: filename,
}
acc := testutil.Accumulator{}
err := k.Gather(&acc)
require.NoError(t, err)
fields := map[string]interface{}{
"BlocksSynced": int64(5860144128),
"BlocksSyncedFinishTime": float64(0),
"BlocksSyncedPct": float64(0),
"BlocksSyncedSpeed": float64(0),
"BlocksTotal": int64(5860144128),
"DisksActive": int64(3),
"DisksFailed": int64(0),
"DisksSpare": int64(0),
"DisksTotal": int64(4),
"DisksDown": int64(1),
}
acc.AssertContainsFields(t, "mdstat", fields)
}
func TestEmptyMdStatProcFile1(t *testing.T) {
filename := makeFakeMDStatFile([]byte(mdStatFileEmpty))
defer os.Remove(filename)
k := Mdstat{
FileName: filename,
}
acc := testutil.Accumulator{}
err := k.Gather(&acc)
require.NoError(t, err)
}
func TestInvalidMdStatProcFile1(t *testing.T) {
filename := makeFakeMDStatFile([]byte(mdStatFileInvalid))
defer os.Remove(filename)
k := Mdstat{
FileName: filename,
}
acc := testutil.Accumulator{}
err := k.Gather(&acc)
require.Error(t, err)
}
const mdStatFileFull = `
Personalities : [raid1] [raid10] [linear] [multipath] [raid0] [raid6] [raid5] [raid4]
md2 : active raid10 sde[2] sdl[9] sdf[3] sdk[8] sdh[5] sdd[1] sdg[4] sdn[11] sdm[10] sdj[7] sdc[0] sdi[6]
11251451904 blocks super 1.2 512K chunks 2 near-copies [12/12] [UUUUUUUUUUUU]
[==================>..] check = 94.3% (10620027200/11251451904) finish=101.6min speed=103517K/sec
bitmap: 35/84 pages [140KB], 65536KB chunk
md1 : active raid1 sdb2[2] sda2[0]
5909504 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdb1[2] sda1[0]
244005888 blocks super 1.2 [2/2] [UU]
bitmap: 1/2 pages [4KB], 65536KB chunk
unused devices: <none>
`
const mdStatSyncStart = `
Personalities : [raid1] [raid10] [linear] [multipath] [raid0] [raid6] [raid5] [raid4]
md2 : active raid10 sde[2] sdl[9] sdf[3] sdk[8] sdh[5] sdd[1] sdg[4] sdn[11] sdm[10] sdj[7] sdc[0] sdi[6]
11251451904 blocks super 1.2 512K chunks 2 near-copies [12/12] [UUUUUUUUUUUU]
[>....................] check = 1.5% (10620027200/11251451904) finish=101.6min speed=103517K/sec
bitmap: 35/84 pages [140KB], 65536KB chunk
md1 : active raid1 sdb2[2] sda2[0]
5909504 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdb1[2] sda1[0]
244005888 blocks super 1.2 [2/2] [UU]
bitmap: 1/2 pages [4KB], 65536KB chunk
unused devices: <none>
`
const mdStatFileFailedDisk = `
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdd1[3] sdb1[1] sda1[0]
5860144128 blocks super 1.2 level 5, 64k chunk, algorithm 2 [4/3] [UUU_]
bitmap: 8/15 pages [32KB], 65536KB chunk
unused devices: <none>
`
const mdStatFileEmpty = `
Personalities :
unused devices: <none>
`
const mdStatFileInvalid = `
Personalities :
mdf1: testman actve
md0 : active raid1 sdb1[2] sda1[0]
244005888 blocks super 1.2 [2/2] [UU]
bitmap: 1/2 pages [4KB], 65536KB chunk
unused devices: <none>
`
func makeFakeMDStatFile(content []byte) (filename string) {
fileobj, err := os.CreateTemp("", "mdstat")
if err != nil {
panic(err)
}
if _, err = fileobj.Write(content); err != nil {
panic(err)
}
if err := fileobj.Close(); err != nil {
panic(err)
}
return fileobj.Name()
}