Renderer: Fix regression on callback URL in plugin mode (#103787)
* Renderer: Fix regression on callback URL in plugin mode * cleanup * refactor to not mutate cfg object * apply review feedback
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
)
|
||||
|
||||
@@ -25,21 +26,21 @@ func TestGetUrl(t *testing.T) {
|
||||
}
|
||||
|
||||
t.Run("When renderer and callback url configured should return callback url plus path", func(t *testing.T) {
|
||||
rs.Cfg.RendererUrl = "http://localhost:8081/render"
|
||||
rs.Cfg.RendererCallbackUrl = "http://public-grafana.com/"
|
||||
rs.Cfg.RendererServerUrl = "http://localhost:8081/render"
|
||||
rs.rendererCallbackURL = "http://public-grafana.com/"
|
||||
url := rs.getGrafanaCallbackURL(path)
|
||||
require.Equal(t, rs.Cfg.RendererCallbackUrl+path+"&render=1", url)
|
||||
require.Equal(t, rs.rendererCallbackURL+path+"&render=1", url)
|
||||
})
|
||||
|
||||
t.Run("When callback url is configured and https should return domain of callback url plus path", func(t *testing.T) {
|
||||
rs.Cfg.RendererCallbackUrl = "https://public-grafana.com/"
|
||||
rs.rendererCallbackURL = "https://public-grafana.com/"
|
||||
url := rs.getGrafanaCallbackURL(path)
|
||||
require.Equal(t, rs.Cfg.RendererCallbackUrl+path+"&render=1", url)
|
||||
require.Equal(t, rs.rendererCallbackURL+path+"&render=1", url)
|
||||
})
|
||||
|
||||
t.Run("When renderer url not configured", func(t *testing.T) {
|
||||
rs.Cfg.RendererUrl = ""
|
||||
rs.Cfg.RendererCallbackUrl = ""
|
||||
rs.Cfg.RendererServerUrl = ""
|
||||
rs.rendererCallbackURL = ""
|
||||
rs.domain = "localhost"
|
||||
rs.Cfg.HTTPPort = "3000"
|
||||
|
||||
@@ -128,8 +129,8 @@ func TestRenderLimitImage(t *testing.T) {
|
||||
|
||||
rs := RenderingService{
|
||||
Cfg: &setting.Cfg{
|
||||
HomePath: path,
|
||||
RendererUrl: "http://localhost:8081/render",
|
||||
HomePath: path,
|
||||
RendererServerUrl: "http://localhost:8081/render",
|
||||
},
|
||||
inProgressCount: 2,
|
||||
log: log.New("test"),
|
||||
@@ -170,7 +171,7 @@ func TestRenderLimitImage(t *testing.T) {
|
||||
func TestRenderLimitImageError(t *testing.T) {
|
||||
rs := RenderingService{
|
||||
Cfg: &setting.Cfg{
|
||||
RendererUrl: "http://localhost:8081/render",
|
||||
RendererServerUrl: "http://localhost:8081/render",
|
||||
},
|
||||
inProgressCount: 2,
|
||||
log: log.New("test"),
|
||||
@@ -201,7 +202,7 @@ func TestRenderingServiceGetRemotePluginVersion(t *testing.T) {
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
rs.Cfg.RendererUrl = server.URL + "/render"
|
||||
rs.Cfg.RendererServerUrl = server.URL + "/render"
|
||||
version, err := rs.getRemotePluginVersion()
|
||||
|
||||
require.NoError(t, err)
|
||||
@@ -214,7 +215,7 @@ func TestRenderingServiceGetRemotePluginVersion(t *testing.T) {
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
rs.Cfg.RendererUrl = server.URL + "/render"
|
||||
rs.Cfg.RendererServerUrl = server.URL + "/render"
|
||||
version, err := rs.getRemotePluginVersion()
|
||||
|
||||
require.NoError(t, err)
|
||||
@@ -239,7 +240,7 @@ func TestRenderingServiceGetRemotePluginVersion(t *testing.T) {
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
rs.Cfg.RendererUrl = server.URL + "/render"
|
||||
rs.Cfg.RendererServerUrl = server.URL + "/render"
|
||||
remoteVersionFetchInterval = time.Millisecond
|
||||
remoteVersionFetchRetries = 5
|
||||
go func() {
|
||||
@@ -249,3 +250,76 @@ func TestRenderingServiceGetRemotePluginVersion(t *testing.T) {
|
||||
require.Eventually(t, func() bool { return rs.Version() == "3.1.4159" }, time.Second, time.Millisecond)
|
||||
})
|
||||
}
|
||||
|
||||
func TestProvideService(t *testing.T) {
|
||||
cfg := setting.NewCfg()
|
||||
cfg.AppURL = "http://app-url"
|
||||
cfg.ImagesDir = filepath.Join(t.TempDir(), "images")
|
||||
cfg.CSVsDir = filepath.Join(t.TempDir(), "csvs")
|
||||
cfg.PDFsDir = filepath.Join(t.TempDir(), "pdfs")
|
||||
|
||||
t.Run("Default configuration values", func(t *testing.T) {
|
||||
rs, err := ProvideService(cfg, featuremgmt.WithFeatures(), nil, &dummyPluginManager{})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, "", rs.Cfg.RendererServerUrl)
|
||||
require.Equal(t, "", rs.rendererCallbackURL)
|
||||
require.Equal(t, "", rs.domain)
|
||||
})
|
||||
|
||||
t.Run("RendererURL is set but not RendererCallbackUrl", func(t *testing.T) {
|
||||
cfg.RendererServerUrl = "http://custom-renderer:8081"
|
||||
cfg.RendererCallbackUrl = ""
|
||||
|
||||
rs, err := ProvideService(cfg, featuremgmt.WithFeatures(), nil, &dummyPluginManager{})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, "http://custom-renderer:8081", rs.Cfg.RendererServerUrl)
|
||||
require.Equal(t, "http://app-url/", rs.rendererCallbackURL)
|
||||
require.Equal(t, "app-url", rs.domain)
|
||||
})
|
||||
|
||||
t.Run("RendererURL and RendererCallbackUrl are set", func(t *testing.T) {
|
||||
cfg.RendererServerUrl = "http://custom-renderer:8081"
|
||||
cfg.RendererCallbackUrl = "http://public-grafana.com/"
|
||||
|
||||
rs, err := ProvideService(cfg, featuremgmt.WithFeatures(), nil, &dummyPluginManager{})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, "http://custom-renderer:8081", rs.Cfg.RendererServerUrl)
|
||||
require.Equal(t, "http://public-grafana.com/", rs.rendererCallbackURL)
|
||||
require.Equal(t, "public-grafana.com", rs.domain)
|
||||
})
|
||||
|
||||
t.Run("RendererURL is not set but RendererCallbackUrl is set", func(t *testing.T) {
|
||||
cfg.RendererServerUrl = ""
|
||||
cfg.RendererCallbackUrl = "https://public-grafana.com/"
|
||||
|
||||
rs, err := ProvideService(cfg, featuremgmt.WithFeatures(), nil, &dummyPluginManager{})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, "", rs.Cfg.RendererServerUrl)
|
||||
require.Equal(t, "https://public-grafana.com/", rs.rendererCallbackURL)
|
||||
require.Equal(t, "public-grafana.com", rs.domain)
|
||||
})
|
||||
|
||||
t.Run("RendererCallbackURL is missing trailing slash", func(t *testing.T) {
|
||||
cfg.RendererServerUrl = ""
|
||||
cfg.RendererCallbackUrl = "https://public-grafana.com"
|
||||
|
||||
rs, err := ProvideService(cfg, featuremgmt.WithFeatures(), nil, &dummyPluginManager{})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, "", rs.Cfg.RendererServerUrl)
|
||||
require.Equal(t, "https://public-grafana.com/", rs.rendererCallbackURL)
|
||||
require.Equal(t, "public-grafana.com", rs.domain)
|
||||
})
|
||||
|
||||
t.Run("RendererCallbackURL is invalid", func(t *testing.T) {
|
||||
cfg.RendererServerUrl = ""
|
||||
cfg.RendererCallbackUrl = "http://public{grafana"
|
||||
|
||||
_, err := ProvideService(cfg, featuremgmt.WithFeatures(), nil, &dummyPluginManager{})
|
||||
require.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user