mirror of
https://github.com/grafana/grafana.git
synced 2024-11-28 03:34:15 -06:00
0df1b33d71
* Migrate Elasticsearch to backend plugin SDK * Fix linting * Move away from Convey! * Rebase commit * Small logger fix * Fixes according to reviewer's comments * Fixes according to reviewer's comments * Fixes according to reviewer's comments * More cleanup * Move things around - small refactoring * Fix typo * Update calculator - add tests * Fixes according to reviewer's comments
192 lines
5.3 KiB
Go
192 lines
5.3 KiB
Go
package elasticsearch
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type datasourceInfo struct {
|
|
ESVersion interface{} `json:"esVersion"`
|
|
TimeField interface{} `json:"timeField"`
|
|
MaxConcurrentShardRequests int64 `json:"maxConcurrentShardRequests"`
|
|
Interval string `json:"interval"`
|
|
TimeInterval string `json:"timeInterval"`
|
|
}
|
|
|
|
func TestCoerceVersion(t *testing.T) {
|
|
t.Run("version is string", func(t *testing.T) {
|
|
ver := "7.0.0"
|
|
smvr, err := coerceVersion(ver)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, smvr)
|
|
require.Equal(t, "7.0.0", smvr.String())
|
|
})
|
|
|
|
t.Run("version is int", func(t *testing.T) {
|
|
testCases := []struct {
|
|
intVersion float64
|
|
stringVersion string
|
|
}{
|
|
{intVersion: 2, stringVersion: "2.0.0"},
|
|
{intVersion: 5, stringVersion: "5.0.0"},
|
|
{intVersion: 56, stringVersion: "5.6.0"},
|
|
{intVersion: 60, stringVersion: "6.0.0"},
|
|
{intVersion: 70, stringVersion: "7.0.0"},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
smvr, err := coerceVersion(tc.intVersion)
|
|
require.NoError(t, err)
|
|
require.Equal(t, tc.stringVersion, smvr.String())
|
|
}
|
|
|
|
smvr, err := coerceVersion(12345)
|
|
require.Error(t, err)
|
|
require.Nil(t, smvr)
|
|
})
|
|
}
|
|
|
|
func TestNewInstanceSettings(t *testing.T) {
|
|
t.Run("fields exist", func(t *testing.T) {
|
|
dsInfo := datasourceInfo{
|
|
ESVersion: "7.0.0",
|
|
TimeField: "@timestamp",
|
|
MaxConcurrentShardRequests: 5,
|
|
}
|
|
settingsJSON, err := json.Marshal(dsInfo)
|
|
require.NoError(t, err)
|
|
|
|
dsSettings := backend.DataSourceInstanceSettings{
|
|
JSONData: json.RawMessage(settingsJSON),
|
|
}
|
|
|
|
_, err = newInstanceSettings()(dsSettings)
|
|
require.NoError(t, err)
|
|
})
|
|
|
|
t.Run("esVersion", func(t *testing.T) {
|
|
t.Run("correct version", func(t *testing.T) {
|
|
dsInfo := datasourceInfo{
|
|
ESVersion: 5,
|
|
TimeField: "@timestamp",
|
|
MaxConcurrentShardRequests: 5,
|
|
Interval: "Daily",
|
|
TimeInterval: "TimeInterval",
|
|
}
|
|
|
|
settingsJSON, err := json.Marshal(dsInfo)
|
|
require.NoError(t, err)
|
|
|
|
dsSettings := backend.DataSourceInstanceSettings{
|
|
JSONData: json.RawMessage(settingsJSON),
|
|
}
|
|
|
|
_, err = newInstanceSettings()(dsSettings)
|
|
require.NoError(t, err)
|
|
})
|
|
|
|
t.Run("faulty version int", func(t *testing.T) {
|
|
dsInfo := datasourceInfo{
|
|
ESVersion: 1234,
|
|
TimeField: "@timestamp",
|
|
MaxConcurrentShardRequests: 5,
|
|
Interval: "Daily",
|
|
TimeInterval: "TimeInterval",
|
|
}
|
|
|
|
settingsJSON, err := json.Marshal(dsInfo)
|
|
require.NoError(t, err)
|
|
|
|
dsSettings := backend.DataSourceInstanceSettings{
|
|
JSONData: json.RawMessage(settingsJSON),
|
|
}
|
|
|
|
_, err = newInstanceSettings()(dsSettings)
|
|
require.EqualError(t, err, "elasticsearch version is required, err=elasticsearch version=1234 is not supported")
|
|
})
|
|
|
|
t.Run("faulty version string", func(t *testing.T) {
|
|
dsInfo := datasourceInfo{
|
|
ESVersion: "NOT_VALID",
|
|
TimeField: "@timestamp",
|
|
MaxConcurrentShardRequests: 5,
|
|
Interval: "Daily",
|
|
TimeInterval: "TimeInterval",
|
|
}
|
|
|
|
settingsJSON, err := json.Marshal(dsInfo)
|
|
require.NoError(t, err)
|
|
|
|
dsSettings := backend.DataSourceInstanceSettings{
|
|
JSONData: json.RawMessage(settingsJSON),
|
|
}
|
|
|
|
_, err = newInstanceSettings()(dsSettings)
|
|
require.EqualError(t, err, "elasticsearch version is required, err=Invalid Semantic Version")
|
|
})
|
|
|
|
t.Run("no version", func(t *testing.T) {
|
|
dsInfo := datasourceInfo{
|
|
TimeField: "@timestamp",
|
|
MaxConcurrentShardRequests: 5,
|
|
Interval: "Daily",
|
|
TimeInterval: "TimeInterval",
|
|
}
|
|
|
|
settingsJSON, err := json.Marshal(dsInfo)
|
|
require.NoError(t, err)
|
|
|
|
dsSettings := backend.DataSourceInstanceSettings{
|
|
JSONData: json.RawMessage(settingsJSON),
|
|
}
|
|
|
|
_, err = newInstanceSettings()(dsSettings)
|
|
require.EqualError(t, err, "elasticsearch version is required, err=elasticsearch version <nil>, cannot be cast to int")
|
|
})
|
|
})
|
|
|
|
t.Run("timeField", func(t *testing.T) {
|
|
t.Run("is nil", func(t *testing.T) {
|
|
dsInfo := datasourceInfo{
|
|
ESVersion: 2,
|
|
MaxConcurrentShardRequests: 5,
|
|
Interval: "Daily",
|
|
TimeInterval: "TimeInterval",
|
|
}
|
|
|
|
settingsJSON, err := json.Marshal(dsInfo)
|
|
require.NoError(t, err)
|
|
|
|
dsSettings := backend.DataSourceInstanceSettings{
|
|
JSONData: json.RawMessage(settingsJSON),
|
|
}
|
|
|
|
_, err = newInstanceSettings()(dsSettings)
|
|
require.EqualError(t, err, "timeField cannot be cast to string")
|
|
})
|
|
|
|
t.Run("is empty", func(t *testing.T) {
|
|
dsInfo := datasourceInfo{
|
|
ESVersion: 2,
|
|
MaxConcurrentShardRequests: 5,
|
|
Interval: "Daily",
|
|
TimeField: "",
|
|
TimeInterval: "TimeInterval",
|
|
}
|
|
|
|
settingsJSON, err := json.Marshal(dsInfo)
|
|
require.NoError(t, err)
|
|
|
|
dsSettings := backend.DataSourceInstanceSettings{
|
|
JSONData: json.RawMessage(settingsJSON),
|
|
}
|
|
|
|
_, err = newInstanceSettings()(dsSettings)
|
|
require.EqualError(t, err, "elasticsearch time field name is required")
|
|
})
|
|
})
|
|
}
|