pluginproxy_test.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package pluginproxy
  2. import (
  3. "net/http"
  4. "testing"
  5. "github.com/grafana/grafana/pkg/bus"
  6. m "github.com/grafana/grafana/pkg/models"
  7. "github.com/grafana/grafana/pkg/plugins"
  8. "github.com/grafana/grafana/pkg/setting"
  9. "github.com/grafana/grafana/pkg/util"
  10. . "github.com/smartystreets/goconvey/convey"
  11. )
  12. func TestPluginProxy(t *testing.T) {
  13. Convey("When getting proxy headers", t, func() {
  14. route := &plugins.AppPluginRoute{
  15. Headers: []plugins.AppPluginRouteHeader{
  16. {Name: "x-header", Content: "my secret {{.SecureJsonData.key}}"},
  17. },
  18. }
  19. setting.SecretKey = "password"
  20. bus.AddHandler("test", func(query *m.GetPluginSettingByIdQuery) error {
  21. key, err := util.Encrypt([]byte("123"), "password")
  22. if err != nil {
  23. return err
  24. }
  25. query.Result = &m.PluginSetting{
  26. SecureJsonData: map[string][]byte{
  27. "key": key,
  28. },
  29. }
  30. return nil
  31. })
  32. header, err := getHeaders(route, 1, "my-app")
  33. So(err, ShouldBeNil)
  34. Convey("Should render header template", func() {
  35. So(header.Get("x-header"), ShouldEqual, "my secret 123")
  36. })
  37. })
  38. Convey("When SendUserHeader config is enabled", t, func() {
  39. req := getPluginProxiedRequest(
  40. &m.ReqContext{
  41. SignedInUser: &m.SignedInUser{
  42. Login: "test_user",
  43. },
  44. },
  45. &setting.Cfg{SendUserHeader: true},
  46. )
  47. Convey("Should add header with username", func() {
  48. // Get will return empty string even if header is not set
  49. So(req.Header.Get("X-Grafana-User"), ShouldEqual, "test_user")
  50. })
  51. })
  52. Convey("When SendUserHeader config is disabled", t, func() {
  53. req := getPluginProxiedRequest(
  54. &m.ReqContext{
  55. SignedInUser: &m.SignedInUser{
  56. Login: "test_user",
  57. },
  58. },
  59. &setting.Cfg{SendUserHeader: false},
  60. )
  61. Convey("Should not add header with username", func() {
  62. // Get will return empty string even if header is not set
  63. So(req.Header.Get("X-Grafana-User"), ShouldEqual, "")
  64. })
  65. })
  66. }
  67. // getPluginProxiedRequest is a helper for easier setup of tests based on global config and ReqContext.
  68. func getPluginProxiedRequest(ctx *m.ReqContext, cfg *setting.Cfg) *http.Request {
  69. route := &plugins.AppPluginRoute{}
  70. proxy := NewApiPluginProxy(ctx, "", route, "", cfg)
  71. req, err := http.NewRequest(http.MethodGet, "http://grafana.com/sub", nil)
  72. So(err, ShouldBeNil)
  73. proxy.Director(req)
  74. return req
  75. }