| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"encoding/json" | 
					
						
							|  |  |  | 	"net/http" | 
					
						
							|  |  |  | 	"net/http/httptest" | 
					
						
							| 
									
										
										
										
											2020-10-19 23:35:31 +08:00
										 |  |  | 	"path/filepath" | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 21:54:26 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/bus" | 
					
						
							|  |  |  | 	accesscontrolmock "github.com/grafana/grafana/pkg/services/accesscontrol/mock" | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/featuremgmt" | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/licensing" | 
					
						
							| 
									
										
										
										
											2021-10-05 21:54:26 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/rendering" | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/sqlstore" | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/updatechecker" | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							| 
									
										
										
										
											2021-10-11 20:30:59 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/web" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | func setupTestEnvironment(t *testing.T, cfg *setting.Cfg, features *featuremgmt.FeatureManager) (*web.Mux, *HTTPServer) { | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	t.Helper() | 
					
						
							|  |  |  | 	sqlstore.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | 	cfg.IsFeatureToggleEnabled = features.IsEnabled | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		oldVersion := setting.BuildVersion | 
					
						
							|  |  |  | 		oldCommit := setting.BuildCommit | 
					
						
							|  |  |  | 		oldEnv := setting.Env | 
					
						
							|  |  |  | 		t.Cleanup(func() { | 
					
						
							|  |  |  | 			setting.BuildVersion = oldVersion | 
					
						
							|  |  |  | 			setting.BuildCommit = oldCommit | 
					
						
							|  |  |  | 			setting.Env = oldEnv | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	sqlStore := sqlstore.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	hs := &HTTPServer{ | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | 		Cfg:      cfg, | 
					
						
							|  |  |  | 		Features: features, | 
					
						
							|  |  |  | 		Bus:      bus.GetBus(), | 
					
						
							|  |  |  | 		License:  &licensing.OSSLicensingService{Cfg: cfg}, | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 		RenderService: &rendering.RenderingService{ | 
					
						
							|  |  |  | 			Cfg:                   cfg, | 
					
						
							|  |  |  | 			RendererPluginManager: &fakeRendererManager{}, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2022-01-31 23:06:16 +08:00
										 |  |  | 		SQLStore:             sqlStore, | 
					
						
							|  |  |  | 		SettingsProvider:     setting.ProvideProvider(cfg), | 
					
						
							|  |  |  | 		pluginStore:          &fakePluginStore{}, | 
					
						
							|  |  |  | 		grafanaUpdateChecker: &updatechecker.GrafanaService{}, | 
					
						
							|  |  |  | 		AccessControl:        accesscontrolmock.New().WithDisabled(), | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-11 20:30:59 +08:00
										 |  |  | 	m := web.New() | 
					
						
							| 
									
										
										
										
											2020-12-16 02:09:04 +08:00
										 |  |  | 	m.Use(getContextHandler(t, cfg).Middleware) | 
					
						
							| 
									
										
										
										
											2021-10-11 20:30:59 +08:00
										 |  |  | 	m.UseMiddleware(web.Renderer(filepath.Join(setting.StaticRootPath, "views"), "[[", "]]")) | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	m.Get("/api/frontend/settings/", hs.GetFrontendSettings) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return m, hs | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | func TestHTTPServer_GetFrontendSettings_hideVersionAnonymous(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	type buildInfo struct { | 
					
						
							|  |  |  | 		Version string `json:"version"` | 
					
						
							|  |  |  | 		Commit  string `json:"commit"` | 
					
						
							|  |  |  | 		Env     string `json:"env"` | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	type settings struct { | 
					
						
							|  |  |  | 		BuildInfo buildInfo `json:"buildInfo"` | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cfg := setting.NewCfg() | 
					
						
							| 
									
										
										
										
											2021-02-10 20:31:47 +08:00
										 |  |  | 	cfg.Env = "testing" | 
					
						
							|  |  |  | 	cfg.BuildVersion = "7.8.9" | 
					
						
							|  |  |  | 	cfg.BuildCommit = "01234567" | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	m, hs := setupTestEnvironment(t, cfg, featuremgmt.WithFeatures()) | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	req := httptest.NewRequest(http.MethodGet, "/api/frontend/settings", nil) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-10 20:31:47 +08:00
										 |  |  | 	// TODO: Remove
 | 
					
						
							|  |  |  | 	setting.BuildVersion = cfg.BuildVersion | 
					
						
							|  |  |  | 	setting.BuildCommit = cfg.BuildCommit | 
					
						
							|  |  |  | 	setting.Env = cfg.Env | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	tests := []struct { | 
					
						
							| 
									
										
										
										
											2020-12-11 18:44:44 +08:00
										 |  |  | 		desc        string | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 		hideVersion bool | 
					
						
							|  |  |  | 		expected    settings | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2020-12-11 18:44:44 +08:00
										 |  |  | 			desc:        "Not hiding version", | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 			hideVersion: false, | 
					
						
							|  |  |  | 			expected: settings{ | 
					
						
							|  |  |  | 				BuildInfo: buildInfo{ | 
					
						
							|  |  |  | 					Version: setting.BuildVersion, | 
					
						
							|  |  |  | 					Commit:  setting.BuildCommit, | 
					
						
							|  |  |  | 					Env:     setting.Env, | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2020-12-11 18:44:44 +08:00
										 |  |  | 			desc:        "Hiding version", | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 			hideVersion: true, | 
					
						
							|  |  |  | 			expected: settings{ | 
					
						
							|  |  |  | 				BuildInfo: buildInfo{ | 
					
						
							|  |  |  | 					Version: "", | 
					
						
							|  |  |  | 					Commit:  "", | 
					
						
							|  |  |  | 					Env:     setting.Env, | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for _, test := range tests { | 
					
						
							| 
									
										
										
										
											2020-12-11 18:44:44 +08:00
										 |  |  | 		t.Run(test.desc, func(t *testing.T) { | 
					
						
							|  |  |  | 			hs.Cfg.AnonymousHideVersion = test.hideVersion | 
					
						
							|  |  |  | 			expected := test.expected | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			recorder := httptest.NewRecorder() | 
					
						
							|  |  |  | 			m.ServeHTTP(recorder, req) | 
					
						
							|  |  |  | 			got := settings{} | 
					
						
							|  |  |  | 			err := json.Unmarshal(recorder.Body.Bytes(), &got) | 
					
						
							|  |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 			require.GreaterOrEqual(t, 400, recorder.Code, "status codes higher than 400 indicate a failure") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			assert.EqualValues(t, expected, got) | 
					
						
							|  |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |