mirror of https://github.com/grafana/grafana
Prometheus: Add test for resource call header handling (#51036)
* Add test * Remove unused testpull/51048/head
parent
c6f7e53e38
commit
677b2a43b5
@ -0,0 +1,103 @@ |
||||
package prometheus |
||||
|
||||
import ( |
||||
"context" |
||||
"net/http" |
||||
"testing" |
||||
"time" |
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend" |
||||
"github.com/grafana/grafana-plugin-sdk-go/backend/datasource" |
||||
sdkHttpClient "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient" |
||||
"github.com/grafana/grafana/pkg/infra/httpclient" |
||||
"github.com/grafana/grafana/pkg/services/featuremgmt" |
||||
"github.com/grafana/grafana/pkg/setting" |
||||
"github.com/stretchr/testify/require" |
||||
) |
||||
|
||||
type fakeSender struct{} |
||||
|
||||
func (sender *fakeSender) Send(resp *backend.CallResourceResponse) error { |
||||
return nil |
||||
} |
||||
|
||||
type fakeRoundtripper struct{} |
||||
|
||||
func (rt *fakeRoundtripper) RoundTrip(req *http.Request) (*http.Response, error) { |
||||
return &http.Response{ |
||||
Status: "200", |
||||
StatusCode: 200, |
||||
Header: nil, |
||||
Body: nil, |
||||
ContentLength: 0, |
||||
}, nil |
||||
} |
||||
|
||||
type fakeHTTPClientProvider struct { |
||||
httpclient.Provider |
||||
opts []sdkHttpClient.Options |
||||
} |
||||
|
||||
func (provider *fakeHTTPClientProvider) New(opts ...sdkHttpClient.Options) (*http.Client, error) { |
||||
client := &http.Client{} |
||||
client.Transport = &fakeRoundtripper{} |
||||
provider.opts = opts |
||||
return client, nil |
||||
} |
||||
|
||||
func TestClient(t *testing.T) { |
||||
t.Run("Service", func(t *testing.T) { |
||||
t.Run("CallResource", func(t *testing.T) { |
||||
t.Run("Adds correct headers", func(t *testing.T) { |
||||
// Not a great test as right now we put the headers form request and custom headers into a client during
|
||||
// it's creation and then relly on sdk middleware to add it to the request later on. This is hard to
|
||||
// test so for now this just checks if the correct headers are passed to the http client not whether
|
||||
// they are actually added to the request.
|
||||
|
||||
httpProvider := &fakeHTTPClientProvider{} |
||||
service := &Service{ |
||||
im: datasource.NewInstanceManager(newInstanceSettings(httpProvider, &setting.Cfg{}, &featuremgmt.FeatureManager{}, nil)), |
||||
} |
||||
|
||||
req := &backend.CallResourceRequest{ |
||||
PluginContext: backend.PluginContext{ |
||||
OrgID: 0, |
||||
PluginID: "prometheus", |
||||
User: nil, |
||||
AppInstanceSettings: nil, |
||||
DataSourceInstanceSettings: &backend.DataSourceInstanceSettings{ |
||||
ID: 0, |
||||
UID: "", |
||||
Type: "prometheus", |
||||
Name: "test-prom", |
||||
URL: "http://localhost:9090", |
||||
User: "", |
||||
Database: "", |
||||
BasicAuthEnabled: true, |
||||
BasicAuthUser: "admin", |
||||
// Custom headers from data source configuration
|
||||
JSONData: []byte("{\"httpHeaderName1\":\"x-tenant-id\"}"), |
||||
DecryptedSecureJSONData: map[string]string{ |
||||
"httpHeaderValue1": "0987", |
||||
}, |
||||
Updated: time.Time{}, |
||||
}, |
||||
}, |
||||
Path: "/api/v1/series", |
||||
Method: http.MethodPost, |
||||
URL: "/api/v1/series", |
||||
// Header in the request itself sent from the browser
|
||||
Headers: map[string][]string{ |
||||
"foo": {"bar"}, |
||||
}, |
||||
Body: []byte("match%5B%5D: ALERTS\nstart: 1655271408\nend: 1655293008"), |
||||
} |
||||
|
||||
sender := &fakeSender{} |
||||
err := service.CallResource(context.Background(), req, sender) |
||||
require.NoError(t, err) |
||||
require.Equal(t, map[string]string{"X-Tenant-Id": "0987", "foo": "bar"}, httpProvider.opts[0].Headers) |
||||
}) |
||||
}) |
||||
}) |
||||
} |
Loading…
Reference in new issue