74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
package plugin
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
)
|
|
|
|
// mockCallResourceResponseSender implements backend.CallResourceResponseSender
|
|
// for use in tests.
|
|
type mockCallResourceResponseSender struct {
|
|
response *backend.CallResourceResponse
|
|
}
|
|
|
|
// Send sets the received *backend.CallResourceResponse to s.response
|
|
func (s *mockCallResourceResponseSender) Send(response *backend.CallResourceResponse) error {
|
|
s.response = response
|
|
return nil
|
|
}
|
|
|
|
// TestCallResource tests CallResource calls, using backend.CallResourceRequest and backend.CallResourceResponse.
|
|
// This ensures the httpadapter for CallResource works correctly.
|
|
func TestCallResource(t *testing.T) {
|
|
// Initialize app
|
|
inst, err := NewInstance(context.Background(), backend.AppInstanceSettings{})
|
|
if err != nil {
|
|
t.Fatalf("new app: %s", err)
|
|
}
|
|
if inst == nil {
|
|
t.Fatal("inst must not be nil")
|
|
}
|
|
app, ok := inst.(*App)
|
|
if !ok {
|
|
t.Fatal("inst must be of type *App")
|
|
}
|
|
|
|
// Set up and run test cases
|
|
for _, tc := range []struct {
|
|
name string
|
|
|
|
method string
|
|
path string
|
|
body []byte
|
|
|
|
expStatus int
|
|
expBody []byte
|
|
}{} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
// Request by calling CallResource. This tests the httpadapter.
|
|
var r mockCallResourceResponseSender
|
|
err = app.CallResource(context.Background(), &backend.CallResourceRequest{
|
|
Method: tc.method,
|
|
Path: tc.path,
|
|
Body: tc.body,
|
|
}, &r)
|
|
if err != nil {
|
|
t.Fatalf("CallResource error: %s", err)
|
|
}
|
|
if r.response == nil {
|
|
t.Fatal("no response received from CallResource")
|
|
}
|
|
if tc.expStatus > 0 && tc.expStatus != r.response.Status {
|
|
t.Errorf("response status should be %d, got %d", tc.expStatus, r.response.Status)
|
|
}
|
|
if len(tc.expBody) > 0 {
|
|
if tb := bytes.TrimSpace(r.response.Body); !bytes.Equal(tb, tc.expBody) {
|
|
t.Errorf("response body should be %s, got %s", tc.expBody, tb)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|