mirror of https://github.com/grafana/grafana
remove flaky cloudwatch test (#45800)
* remove flaky cloudwatch test * remove unused code that was only in flaking test * okay i guess they're both flaky * Skip flaking templating-dashboard-links-and-variables testpull/45765/head^2
parent
5715be4afa
commit
cbf96e6a8b
@ -1,197 +0,0 @@ |
||||
package metrics |
||||
|
||||
import ( |
||||
"bytes" |
||||
"context" |
||||
"encoding/json" |
||||
"fmt" |
||||
"io" |
||||
"net/http" |
||||
"testing" |
||||
"time" |
||||
|
||||
"github.com/aws/aws-sdk-go/aws" |
||||
"github.com/aws/aws-sdk-go/aws/session" |
||||
"github.com/aws/aws-sdk-go/service/cloudwatch/cloudwatchiface" |
||||
"github.com/aws/aws-sdk-go/service/cloudwatchlogs/cloudwatchlogsiface" |
||||
"github.com/grafana/grafana-plugin-sdk-go/backend" |
||||
"github.com/grafana/grafana-plugin-sdk-go/data" |
||||
"github.com/grafana/grafana/pkg/models" |
||||
"github.com/grafana/grafana/pkg/services/sqlstore" |
||||
"github.com/grafana/grafana/pkg/tests/testinfra" |
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch" |
||||
|
||||
cwapi "github.com/aws/aws-sdk-go/service/cloudwatch" |
||||
"github.com/grafana/grafana/pkg/api/dtos" |
||||
"github.com/grafana/grafana/pkg/components/simplejson" |
||||
"github.com/stretchr/testify/assert" |
||||
"github.com/stretchr/testify/require" |
||||
) |
||||
|
||||
func TestQueryCloudWatchMetrics(t *testing.T) { |
||||
grafDir, cfgPath := testinfra.CreateGrafDir(t) |
||||
|
||||
addr, sqlStore := testinfra.StartGrafana(t, grafDir, cfgPath) |
||||
setUpDatabase(t, sqlStore, "metrics") |
||||
|
||||
origNewCWClient := cloudwatch.NewCWClient |
||||
t.Cleanup(func() { |
||||
cloudwatch.NewCWClient = origNewCWClient |
||||
}) |
||||
var client cloudwatch.FakeCWClient |
||||
cloudwatch.NewCWClient = func(sess *session.Session) cloudwatchiface.CloudWatchAPI { |
||||
return client |
||||
} |
||||
|
||||
t.Run("Custom metrics", func(t *testing.T) { |
||||
client = cloudwatch.FakeCWClient{ |
||||
Metrics: []*cwapi.Metric{ |
||||
{ |
||||
MetricName: aws.String("Test_MetricName"), |
||||
Dimensions: []*cwapi.Dimension{ |
||||
{ |
||||
Name: aws.String("Test_DimensionName"), |
||||
}, |
||||
}, |
||||
}, |
||||
}, |
||||
} |
||||
result := getCWMetrics(t, 1, addr) |
||||
|
||||
type suggestData struct { |
||||
Text string |
||||
Value string |
||||
Label string |
||||
} |
||||
expect := []suggestData{ |
||||
{Text: "Test_MetricName", Value: "Test_MetricName", Label: "Test_MetricName"}, |
||||
} |
||||
actual := []suggestData{} |
||||
err := json.Unmarshal(result, &actual) |
||||
require.NoError(t, err) |
||||
assert.Equal(t, expect, actual) |
||||
}) |
||||
} |
||||
|
||||
func TestQueryCloudWatchLogs(t *testing.T) { |
||||
grafDir, cfgPath := testinfra.CreateGrafDir(t) |
||||
addr, store := testinfra.StartGrafana(t, grafDir, cfgPath) |
||||
setUpDatabase(t, store, "logs") |
||||
|
||||
origNewCWLogsClient := cloudwatch.NewCWLogsClient |
||||
t.Cleanup(func() { |
||||
cloudwatch.NewCWLogsClient = origNewCWLogsClient |
||||
}) |
||||
|
||||
var client cloudwatch.FakeCWLogsClient |
||||
cloudwatch.NewCWLogsClient = func(sess *session.Session) cloudwatchlogsiface.CloudWatchLogsAPI { |
||||
return client |
||||
} |
||||
|
||||
t.Run("Describe log groups", func(t *testing.T) { |
||||
client = cloudwatch.FakeCWLogsClient{} |
||||
|
||||
req := dtos.MetricRequest{ |
||||
Queries: []*simplejson.Json{ |
||||
simplejson.NewFromAny(map[string]interface{}{ |
||||
"type": "logAction", |
||||
"subtype": "DescribeLogGroups", |
||||
"region": "us-east-1", |
||||
"datasourceId": 1, |
||||
}), |
||||
}, |
||||
} |
||||
tr := makeCWRequest(t, req, addr) |
||||
|
||||
dataFrames := data.Frames{ |
||||
&data.Frame{ |
||||
Name: "logGroups", |
||||
RefID: "A", |
||||
Fields: []*data.Field{ |
||||
data.NewField("logGroupName", nil, []*string{}), |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
expect := backend.NewQueryDataResponse() |
||||
expect.Responses["A"] = backend.DataResponse{ |
||||
Frames: dataFrames, |
||||
} |
||||
assert.Equal(t, *expect, tr) |
||||
}) |
||||
} |
||||
|
||||
func getCWMetrics(t *testing.T, datasourceId int, addr string) []byte { |
||||
t.Helper() |
||||
|
||||
u := fmt.Sprintf("http://%s/api/datasources/%v/resources/metrics?region=us-east-1&namespace=custom", addr, datasourceId) |
||||
t.Logf("Making GET request to %s", u) |
||||
// nolint:gosec
|
||||
resp, err := http.Get(u) |
||||
require.NoError(t, err) |
||||
require.NotNil(t, resp) |
||||
t.Cleanup(func() { |
||||
err := resp.Body.Close() |
||||
assert.NoError(t, err) |
||||
}) |
||||
|
||||
buf := bytes.Buffer{} |
||||
_, err = io.Copy(&buf, resp.Body) |
||||
require.NoError(t, err) |
||||
require.Equal(t, 200, resp.StatusCode) |
||||
|
||||
return buf.Bytes() |
||||
} |
||||
|
||||
func makeCWRequest(t *testing.T, req dtos.MetricRequest, addr string) backend.QueryDataResponse { |
||||
t.Helper() |
||||
|
||||
buf := bytes.Buffer{} |
||||
enc := json.NewEncoder(&buf) |
||||
err := enc.Encode(&req) |
||||
require.NoError(t, err) |
||||
u := fmt.Sprintf("http://%s/api/ds/query", addr) |
||||
t.Logf("Making POST request to %s", u) |
||||
// nolint:gosec
|
||||
resp, err := http.Post(u, "application/json", &buf) |
||||
require.NoError(t, err) |
||||
require.NotNil(t, resp) |
||||
t.Cleanup(func() { |
||||
err := resp.Body.Close() |
||||
assert.NoError(t, err) |
||||
}) |
||||
|
||||
buf = bytes.Buffer{} |
||||
_, err = io.Copy(&buf, resp.Body) |
||||
require.NoError(t, err) |
||||
require.Equal(t, 200, resp.StatusCode) |
||||
|
||||
var tr backend.QueryDataResponse |
||||
err = json.Unmarshal(buf.Bytes(), &tr) |
||||
require.NoError(t, err) |
||||
|
||||
return tr |
||||
} |
||||
|
||||
func setUpDatabase(t *testing.T, store *sqlstore.SQLStore, uid string) { |
||||
t.Helper() |
||||
|
||||
err := store.WithDbSession(context.Background(), func(sess *sqlstore.DBSession) error { |
||||
_, err := sess.Insert(&models.DataSource{ |
||||
Id: 1, |
||||
Uid: uid, |
||||
// This will be the ID of the main org
|
||||
OrgId: 2, |
||||
Name: "Test", |
||||
Type: "cloudwatch", |
||||
Created: time.Now(), |
||||
Updated: time.Now(), |
||||
}) |
||||
return err |
||||
}) |
||||
require.NoError(t, err) |
||||
|
||||
// Make sure changes are synced with other goroutines
|
||||
err = store.Sync() |
||||
require.NoError(t, err) |
||||
} |
Loading…
Reference in new issue