mirror of https://github.com/grafana/grafana
Prometheus: Fix body not being included in resource calls if they are POST (#50833)
* Pass on request body * Fix GETs and add tests * Fix err handling * Add comments * Close response body * Fix lint maybe * Fix testpull/50889/head
parent
4c4aa95d38
commit
07be95a001
@ -0,0 +1,83 @@ |
|||||||
|
package client |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
"io/ioutil" |
||||||
|
"net/http" |
||||||
|
"testing" |
||||||
|
|
||||||
|
"github.com/grafana/grafana-plugin-sdk-go/backend" |
||||||
|
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger" |
||||||
|
"github.com/stretchr/testify/require" |
||||||
|
) |
||||||
|
|
||||||
|
type MockDoer struct { |
||||||
|
Req *http.Request |
||||||
|
} |
||||||
|
|
||||||
|
func (doer *MockDoer) Do(req *http.Request) (*http.Response, error) { |
||||||
|
doer.Req = req |
||||||
|
return &http.Response{ |
||||||
|
StatusCode: http.StatusOK, |
||||||
|
Status: "200 OK", |
||||||
|
}, nil |
||||||
|
} |
||||||
|
|
||||||
|
func TestClient(t *testing.T) { |
||||||
|
t.Run("QueryResource", func(t *testing.T) { |
||||||
|
doer := &MockDoer{} |
||||||
|
// The method here does not really matter for resource calls
|
||||||
|
client := NewClient(doer, http.MethodGet, "http://localhost:9090") |
||||||
|
|
||||||
|
t.Run("sends correct POST request", func(t *testing.T) { |
||||||
|
req := &backend.CallResourceRequest{ |
||||||
|
PluginContext: backend.PluginContext{}, |
||||||
|
Path: "/api/v1/series", |
||||||
|
Method: http.MethodPost, |
||||||
|
URL: "/api/v1/series", |
||||||
|
Headers: nil, |
||||||
|
Body: []byte("match%5B%5D: ALERTS\nstart: 1655271408\nend: 1655293008"), |
||||||
|
} |
||||||
|
res, err := client.QueryResource(context.Background(), req) |
||||||
|
defer func() { |
||||||
|
if res != nil && res.Body != nil { |
||||||
|
if err := res.Body.Close(); err != nil { |
||||||
|
logger.Warn("Error", "err", err) |
||||||
|
} |
||||||
|
} |
||||||
|
}() |
||||||
|
require.NoError(t, err) |
||||||
|
require.NotNil(t, doer.Req) |
||||||
|
require.Equal(t, http.MethodPost, doer.Req.Method) |
||||||
|
body, err := ioutil.ReadAll(doer.Req.Body) |
||||||
|
require.NoError(t, err) |
||||||
|
require.Equal(t, []byte("match%5B%5D: ALERTS\nstart: 1655271408\nend: 1655293008"), body) |
||||||
|
require.Equal(t, "http://localhost:9090/api/v1/series", doer.Req.URL.String()) |
||||||
|
}) |
||||||
|
|
||||||
|
t.Run("sends correct GET request", func(t *testing.T) { |
||||||
|
req := &backend.CallResourceRequest{ |
||||||
|
PluginContext: backend.PluginContext{}, |
||||||
|
Path: "/api/v1/series", |
||||||
|
Method: http.MethodGet, |
||||||
|
URL: "api/v1/series?match%5B%5D=ALERTS&start=1655272558&end=1655294158", |
||||||
|
Headers: nil, |
||||||
|
} |
||||||
|
res, err := client.QueryResource(context.Background(), req) |
||||||
|
defer func() { |
||||||
|
if res != nil && res.Body != nil { |
||||||
|
if err := res.Body.Close(); err != nil { |
||||||
|
logger.Warn("Error", "err", err) |
||||||
|
} |
||||||
|
} |
||||||
|
}() |
||||||
|
require.NoError(t, err) |
||||||
|
require.NotNil(t, doer.Req) |
||||||
|
require.Equal(t, http.MethodGet, doer.Req.Method) |
||||||
|
body, err := ioutil.ReadAll(doer.Req.Body) |
||||||
|
require.NoError(t, err) |
||||||
|
require.Equal(t, []byte{}, body) |
||||||
|
require.Equal(t, "http://localhost:9090/api/v1/series?match%5B%5D=ALERTS&start=1655272558&end=1655294158", doer.Req.URL.String()) |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
Loading…
Reference in new issue