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