VictoriaMetrics/lib/protoparser/newrelic/parser_test.go

230 lines
4.3 KiB
Go
Raw Normal View History

package newrelic
import (
"fmt"
"reflect"
"strings"
"testing"
)
func TestRowsUnmarshalFailure(t *testing.T) {
f := func(data string) {
t.Helper()
var r Rows
if err := r.Unmarshal([]byte(data)); err == nil {
t.Fatalf("expecting non-nil error")
}
}
// Empty JSON
f("")
// Invalid JSON
f("123")
f("[foo]")
f(`{"foo":123}`)
}
func TestRowsUnmarshalSuccess(t *testing.T) {
f := func(data string, expectedRows []Row) {
t.Helper()
var r Rows
if err := r.Unmarshal([]byte(data)); err != nil {
t.Fatalf("unexpected error: %s", err)
}
if !reflect.DeepEqual(r.Rows, expectedRows) {
t.Fatalf("unexpected rows parsed\ngot\n%s\nwant\n%s", rowsToString(r.Rows), rowsToString(expectedRows))
}
}
// empty array
f(`[]`, nil)
// zero events
f(`[
{
"EntityID":28257883748326179,
"IsAgent":true,
"Events":[],
"ReportingAgentID":28257883748326179
}]`, nil)
// A single event
f(`[{
"EntityID":28257883748326179,
"IsAgent":true,
"Events":[
{
"eventType":"SystemSample",
"timestamp":1690286061,
"entityKey":"macbook-pro.local",
"dc": "1",
"diskWritesPerSecond":-34.21,
"uptime":762376
}
],
"ReportingAgentID":28257883748326179
}]`, []Row{
{
Tags: []Tag{
{
Key: []byte("eventType"),
Value: []byte("SystemSample"),
},
{
Key: []byte("entityKey"),
Value: []byte("macbook-pro.local"),
},
{
Key: []byte("dc"),
Value: []byte("1"),
},
},
Samples: []Sample{
{
Name: []byte("diskWritesPerSecond"),
Value: -34.21,
},
{
Name: []byte("uptime"),
Value: 762376,
},
},
Timestamp: 1690286061000,
},
})
// Multiple events
f(`[
{
"EntityID":28257883748326179,
"IsAgent":true,
"Events":[
{
"eventType":"SystemSample",
"timestamp":1690286061,
"entityKey":"macbook-pro.local",
"dc": "1",
"diskWritesPerSecond":-34.21,
"uptime":762376
}
],
"ReportingAgentID":28257883748326179
},
{
"EntityID":282579,
"IsAgent":true,
"Events":[
{
"eventType":"SystemSample",
"timestamp":1690286061,
"entityKey":"macbook-pro.local",
"diskWritesPerSecond":234.34,
"timestamp":1690286061.433,
"uptime":762376
},
{
"eventType":"ProcessSample",
"timestamp":1690286061987,
"uptime":1236
}
],
"ReportingAgentID":2879
}
]`, []Row{
{
Tags: []Tag{
{
Key: []byte("eventType"),
Value: []byte("SystemSample"),
},
{
Key: []byte("entityKey"),
Value: []byte("macbook-pro.local"),
},
{
Key: []byte("dc"),
Value: []byte("1"),
},
},
Samples: []Sample{
{
Name: []byte("diskWritesPerSecond"),
Value: -34.21,
},
{
Name: []byte("uptime"),
Value: 762376,
},
},
Timestamp: 1690286061000,
},
{
Tags: []Tag{
{
Key: []byte("eventType"),
Value: []byte("SystemSample"),
},
{
Key: []byte("entityKey"),
Value: []byte("macbook-pro.local"),
},
},
Samples: []Sample{
{
Name: []byte("diskWritesPerSecond"),
Value: 234.34,
},
{
Name: []byte("uptime"),
Value: 762376,
},
},
Timestamp: 1690286061433,
},
{
Tags: []Tag{
{
Key: []byte("eventType"),
Value: []byte("ProcessSample"),
},
},
Samples: []Sample{
{
Name: []byte("uptime"),
Value: 1236,
},
},
Timestamp: 1690286061987,
},
})
}
func rowsToString(rows []Row) string {
var a []string
for _, row := range rows {
s := row.String()
a = append(a, s)
}
return strings.Join(a, "\n")
}
func (r *Row) String() string {
var a []string
for _, t := range r.Tags {
s := fmt.Sprintf("%s=%q", t.Key, t.Value)
a = append(a, s)
}
tagsString := "{" + strings.Join(a, ",") + "}"
a = a[:0]
for _, sample := range r.Samples {
s := fmt.Sprintf("[%s %f]", sample.Name, sample.Value)
a = append(a, s)
}
samplesString := strings.Join(a, ",")
return fmt.Sprintf("tags=%s, samples=%s, timestamp=%d", tagsString, samplesString, r.Timestamp)
}