89 lines
2.5 KiB
Go
89 lines
2.5 KiB
Go
package nagios
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
const validOutput1 = `PING OK - Packet loss = 0%, RTA = 0.30 ms|rta=0.298000ms;4000.000000;6000.000000;0.000000 pl=0%;80;90;0;100
|
|
This is a long output
|
|
with three lines
|
|
`
|
|
const validOutput2 = "TCP OK - 0.008 second response time on port 80|time=0.008457s;;;0.000000;10.000000"
|
|
const validOutput3 = "TCP OK - 0.008 second response time on port 80|time=0.008457"
|
|
const invalidOutput3 = "PING OK - Packet loss = 0%, RTA = 0.30 ms"
|
|
const invalidOutput4 = "PING OK - Packet loss = 0%, RTA = 0.30 ms| =3;;;; dgasdg =;;;; sff=;;;;"
|
|
|
|
func TestParseValidOutput(t *testing.T) {
|
|
parser := NagiosParser{
|
|
MetricName: "nagios_test",
|
|
}
|
|
|
|
// Output1
|
|
metrics, err := parser.Parse([]byte(validOutput1))
|
|
require.NoError(t, err)
|
|
assert.Len(t, metrics, 2)
|
|
// rta
|
|
assert.Equal(t, "rta", metrics[0].Name())
|
|
assert.Equal(t, map[string]interface{}{
|
|
"value": float64(0.298),
|
|
"warning": float64(4000),
|
|
"critical": float64(6000),
|
|
"min": float64(0),
|
|
}, metrics[0].Fields())
|
|
assert.Equal(t, map[string]string{"unit": "ms"}, metrics[0].Tags())
|
|
// pl
|
|
assert.Equal(t, "pl", metrics[1].Name())
|
|
assert.Equal(t, map[string]interface{}{
|
|
"value": float64(0),
|
|
"warning": float64(80),
|
|
"critical": float64(90),
|
|
"min": float64(0),
|
|
"max": float64(100),
|
|
}, metrics[1].Fields())
|
|
assert.Equal(t, map[string]string{"unit": "%"}, metrics[1].Tags())
|
|
|
|
// Output2
|
|
metrics, err = parser.Parse([]byte(validOutput2))
|
|
require.NoError(t, err)
|
|
assert.Len(t, metrics, 1)
|
|
// time
|
|
assert.Equal(t, "time", metrics[0].Name())
|
|
assert.Equal(t, map[string]interface{}{
|
|
"value": float64(0.008457),
|
|
"min": float64(0),
|
|
"max": float64(10),
|
|
}, metrics[0].Fields())
|
|
assert.Equal(t, map[string]string{"unit": "s"}, metrics[0].Tags())
|
|
|
|
// Output3
|
|
metrics, err = parser.Parse([]byte(validOutput3))
|
|
require.NoError(t, err)
|
|
assert.Len(t, metrics, 1)
|
|
// time
|
|
assert.Equal(t, "time", metrics[0].Name())
|
|
assert.Equal(t, map[string]interface{}{
|
|
"value": float64(0.008457),
|
|
}, metrics[0].Fields())
|
|
assert.Equal(t, map[string]string{"unit": ""}, metrics[0].Tags())
|
|
}
|
|
|
|
func TestParseInvalidOutput(t *testing.T) {
|
|
parser := NagiosParser{
|
|
MetricName: "nagios_test",
|
|
}
|
|
|
|
// invalidOutput3
|
|
metrics, err := parser.Parse([]byte(invalidOutput3))
|
|
require.NoError(t, err)
|
|
assert.Len(t, metrics, 0)
|
|
|
|
// invalidOutput4
|
|
metrics, err = parser.Parse([]byte(invalidOutput4))
|
|
require.NoError(t, err)
|
|
assert.Len(t, metrics, 0)
|
|
|
|
}
|