mirror of
https://github.com/grafana/grafana.git
synced 2024-11-25 10:20:29 -06:00
89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
package cloudwatch
|
|
|
|
import (
|
|
"sort"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
"github.com/grafana/grafana-plugin-sdk-go/data"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestFrameSort(t *testing.T) {
|
|
t.Run("sort simple frame", func(t *testing.T) {
|
|
timeA, _ := time.Parse("2006-01-02 15:04:05.000", "2020-03-02 17:04:05.000")
|
|
timeB, _ := time.Parse("2006-01-02 15:04:05.000", "2020-03-02 16:04:05.000")
|
|
timeC, _ := time.Parse("2006-01-02 15:04:05.000", "2020-03-02 15:04:05.000")
|
|
timeVals := []*time.Time{
|
|
&timeA, &timeB, &timeC,
|
|
}
|
|
timeField := data.NewField("@timestamp", nil, timeVals)
|
|
|
|
stringField := data.NewField("line", nil, []*string{
|
|
aws.String("test message 1"),
|
|
aws.String("test message 2"),
|
|
aws.String("test message 3"),
|
|
})
|
|
|
|
numberField := data.NewField("nums", nil, []*float64{
|
|
aws.Float64(20.0),
|
|
aws.Float64(50.0),
|
|
aws.Float64(17.0),
|
|
})
|
|
|
|
expectedDataframe := &data.Frame{
|
|
Name: "CloudWatchLogsResponse",
|
|
Fields: []*data.Field{
|
|
timeField,
|
|
stringField,
|
|
numberField,
|
|
},
|
|
}
|
|
|
|
sort.Sort(ByTime(*expectedDataframe))
|
|
|
|
for i := 1; i < timeField.Len(); i++ {
|
|
assert.True(t, timeField.At(i).(*time.Time).After(*(timeField.At(i - 1).(*time.Time))))
|
|
}
|
|
|
|
assert.Equal(t, *stringField.At(0).(*string), "test message 3")
|
|
assert.Equal(t, *stringField.At(1).(*string), "test message 2")
|
|
assert.Equal(t, *stringField.At(2).(*string), "test message 1")
|
|
|
|
assert.Equal(t, *numberField.At(0).(*float64), 17.0)
|
|
assert.Equal(t, *numberField.At(1).(*float64), 50.0)
|
|
assert.Equal(t, *numberField.At(2).(*float64), 20.0)
|
|
})
|
|
|
|
t.Run("sort with nil", func(t *testing.T) {
|
|
timeA, _ := time.Parse("2006-01-02 15:04:05.000", "2020-03-02 17:04:05.000")
|
|
timeB, _ := time.Parse("2006-01-02 15:04:05.000", "2020-03-02 16:04:05.000")
|
|
timeVals := []*time.Time{
|
|
&timeA, &timeB, nil,
|
|
}
|
|
timeField := data.NewField("@timestamp", nil, timeVals)
|
|
|
|
stringField := data.NewField("line", nil, []*string{
|
|
aws.String("test message 1"),
|
|
aws.String("test message 2"),
|
|
aws.String("test message 3"),
|
|
})
|
|
|
|
frame := &data.Frame{
|
|
Name: "CloudWatchLogsResponse",
|
|
Fields: []*data.Field{
|
|
timeField,
|
|
stringField,
|
|
},
|
|
}
|
|
|
|
sort.Sort(ByTime(*frame))
|
|
|
|
assert.Equal(t, *stringField.At(0).(*string), "test message 2")
|
|
assert.Equal(t, *stringField.At(1).(*string), "test message 1")
|
|
assert.Equal(t, *stringField.At(2).(*string), "test message 3")
|
|
})
|
|
}
|