195 lines
5.3 KiB
Go
195 lines
5.3 KiB
Go
|
package influx
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
var exptime = time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
|
||
|
|
||
|
const (
|
||
|
validInflux = "cpu_load_short,cpu=cpu0 value=10 1257894000000000000"
|
||
|
validInfluxNewline = "\ncpu_load_short,cpu=cpu0 value=10 1257894000000000000\n"
|
||
|
invalidInflux = "I don't think this is line protocol"
|
||
|
invalidInflux2 = "{\"a\": 5, \"b\": {\"c\": 6}}"
|
||
|
)
|
||
|
|
||
|
const influxMulti = `
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
`
|
||
|
|
||
|
const influxMultiSomeInvalid = `
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
cpu,cpu=cpu3, host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
cpu,cpu=cpu4 , usage_idle=99,usage_busy=1
|
||
|
cpu,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
|
||
|
`
|
||
|
|
||
|
func TestParseValidInflux(t *testing.T) {
|
||
|
parser := InfluxParser{}
|
||
|
|
||
|
metrics, err := parser.Parse([]byte(validInflux))
|
||
|
assert.NoError(t, err)
|
||
|
assert.Len(t, metrics, 1)
|
||
|
assert.Equal(t, "cpu_load_short", metrics[0].Name())
|
||
|
assert.Equal(t, map[string]interface{}{
|
||
|
"value": float64(10),
|
||
|
}, metrics[0].Fields())
|
||
|
assert.Equal(t, map[string]string{
|
||
|
"cpu": "cpu0",
|
||
|
}, metrics[0].Tags())
|
||
|
assert.Equal(t, exptime, metrics[0].Time())
|
||
|
|
||
|
metrics, err = parser.Parse([]byte(validInfluxNewline))
|
||
|
assert.NoError(t, err)
|
||
|
assert.Len(t, metrics, 1)
|
||
|
assert.Equal(t, "cpu_load_short", metrics[0].Name())
|
||
|
assert.Equal(t, map[string]interface{}{
|
||
|
"value": float64(10),
|
||
|
}, metrics[0].Fields())
|
||
|
assert.Equal(t, map[string]string{
|
||
|
"cpu": "cpu0",
|
||
|
}, metrics[0].Tags())
|
||
|
assert.Equal(t, exptime, metrics[0].Time())
|
||
|
}
|
||
|
|
||
|
func TestParseLineValidInflux(t *testing.T) {
|
||
|
parser := InfluxParser{}
|
||
|
|
||
|
metric, err := parser.ParseLine(validInflux)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, "cpu_load_short", metric.Name())
|
||
|
assert.Equal(t, map[string]interface{}{
|
||
|
"value": float64(10),
|
||
|
}, metric.Fields())
|
||
|
assert.Equal(t, map[string]string{
|
||
|
"cpu": "cpu0",
|
||
|
}, metric.Tags())
|
||
|
assert.Equal(t, exptime, metric.Time())
|
||
|
|
||
|
metric, err = parser.ParseLine(validInfluxNewline)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, "cpu_load_short", metric.Name())
|
||
|
assert.Equal(t, map[string]interface{}{
|
||
|
"value": float64(10),
|
||
|
}, metric.Fields())
|
||
|
assert.Equal(t, map[string]string{
|
||
|
"cpu": "cpu0",
|
||
|
}, metric.Tags())
|
||
|
assert.Equal(t, exptime, metric.Time())
|
||
|
}
|
||
|
|
||
|
func TestParseMultipleValid(t *testing.T) {
|
||
|
parser := InfluxParser{}
|
||
|
|
||
|
metrics, err := parser.Parse([]byte(influxMulti))
|
||
|
assert.NoError(t, err)
|
||
|
assert.Len(t, metrics, 7)
|
||
|
|
||
|
for _, metric := range metrics {
|
||
|
assert.Equal(t, "cpu", metric.Name())
|
||
|
assert.Equal(t, map[string]string{
|
||
|
"datacenter": "us-east",
|
||
|
"host": "foo",
|
||
|
}, metrics[0].Tags())
|
||
|
assert.Equal(t, map[string]interface{}{
|
||
|
"usage_idle": float64(99),
|
||
|
"usage_busy": float64(1),
|
||
|
}, metrics[0].Fields())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestParseSomeValid(t *testing.T) {
|
||
|
parser := InfluxParser{}
|
||
|
|
||
|
metrics, err := parser.Parse([]byte(influxMultiSomeInvalid))
|
||
|
assert.Error(t, err)
|
||
|
assert.Len(t, metrics, 4)
|
||
|
|
||
|
for _, metric := range metrics {
|
||
|
assert.Equal(t, "cpu", metric.Name())
|
||
|
assert.Equal(t, map[string]string{
|
||
|
"datacenter": "us-east",
|
||
|
"host": "foo",
|
||
|
}, metrics[0].Tags())
|
||
|
assert.Equal(t, map[string]interface{}{
|
||
|
"usage_idle": float64(99),
|
||
|
"usage_busy": float64(1),
|
||
|
}, metrics[0].Fields())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Test that default tags are applied.
|
||
|
func TestParseDefaultTags(t *testing.T) {
|
||
|
parser := InfluxParser{
|
||
|
DefaultTags: map[string]string{
|
||
|
"tag": "default",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
metrics, err := parser.Parse([]byte(influxMultiSomeInvalid))
|
||
|
assert.Error(t, err)
|
||
|
assert.Len(t, metrics, 4)
|
||
|
|
||
|
for _, metric := range metrics {
|
||
|
assert.Equal(t, "cpu", metric.Name())
|
||
|
assert.Equal(t, map[string]string{
|
||
|
"datacenter": "us-east",
|
||
|
"host": "foo",
|
||
|
"tag": "default",
|
||
|
}, metrics[0].Tags())
|
||
|
assert.Equal(t, map[string]interface{}{
|
||
|
"usage_idle": float64(99),
|
||
|
"usage_busy": float64(1),
|
||
|
}, metrics[0].Fields())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Verify that metric tags will override default tags
|
||
|
func TestParseDefaultTagsOverride(t *testing.T) {
|
||
|
parser := InfluxParser{
|
||
|
DefaultTags: map[string]string{
|
||
|
"host": "default",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
metrics, err := parser.Parse([]byte(influxMultiSomeInvalid))
|
||
|
assert.Error(t, err)
|
||
|
assert.Len(t, metrics, 4)
|
||
|
|
||
|
for _, metric := range metrics {
|
||
|
assert.Equal(t, "cpu", metric.Name())
|
||
|
assert.Equal(t, map[string]string{
|
||
|
"datacenter": "us-east",
|
||
|
"host": "foo",
|
||
|
}, metrics[0].Tags())
|
||
|
assert.Equal(t, map[string]interface{}{
|
||
|
"usage_idle": float64(99),
|
||
|
"usage_busy": float64(1),
|
||
|
}, metrics[0].Fields())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestParseInvalidInflux(t *testing.T) {
|
||
|
parser := InfluxParser{}
|
||
|
|
||
|
_, err := parser.Parse([]byte(invalidInflux))
|
||
|
assert.Error(t, err)
|
||
|
_, err = parser.Parse([]byte(invalidInflux2))
|
||
|
assert.Error(t, err)
|
||
|
_, err = parser.ParseLine(invalidInflux)
|
||
|
assert.Error(t, err)
|
||
|
_, err = parser.ParseLine(invalidInflux2)
|
||
|
assert.Error(t, err)
|
||
|
}
|