| 
									
										
										
										
											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" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/rendering" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/licensing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/bus" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/sqlstore" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"gopkg.in/macaron.v1" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func setupTestEnvironment(t *testing.T, cfg *setting.Cfg) (*macaron.Macaron, *HTTPServer) { | 
					
						
							|  |  |  | 	t.Helper() | 
					
						
							|  |  |  | 	sqlstore.InitTestDB(t) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		oldVersion := setting.BuildVersion | 
					
						
							|  |  |  | 		oldCommit := setting.BuildCommit | 
					
						
							|  |  |  | 		oldEnv := setting.Env | 
					
						
							|  |  |  | 		t.Cleanup(func() { | 
					
						
							|  |  |  | 			setting.BuildVersion = oldVersion | 
					
						
							|  |  |  | 			setting.BuildCommit = oldCommit | 
					
						
							|  |  |  | 			setting.Env = oldEnv | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bus.ClearBusHandlers() | 
					
						
							|  |  |  | 	bus.AddHandler("sql", sqlstore.GetPluginSettings) | 
					
						
							|  |  |  | 	t.Cleanup(bus.ClearBusHandlers) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	r := &rendering.RenderingService{Cfg: cfg} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	hs := &HTTPServer{ | 
					
						
							|  |  |  | 		Cfg:           cfg, | 
					
						
							|  |  |  | 		Bus:           bus.GetBus(), | 
					
						
							|  |  |  | 		License:       &licensing.OSSLicensingService{}, | 
					
						
							|  |  |  | 		RenderService: r, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	m := macaron.New() | 
					
						
							| 
									
										
										
										
											2020-12-16 02:09:04 +08:00
										 |  |  | 	m.Use(getContextHandler(t, cfg).Middleware) | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	m.Use(macaron.Renderer(macaron.RenderOptions{ | 
					
						
							| 
									
										
										
										
											2020-10-19 23:35:31 +08:00
										 |  |  | 		Directory:  filepath.Join(setting.StaticRootPath, "views"), | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 		IndentJSON: true, | 
					
						
							|  |  |  | 		Delims:     macaron.Delims{Left: "[[", Right: "]]"}, | 
					
						
							|  |  |  | 	})) | 
					
						
							|  |  |  | 	m.Get("/api/frontend/settings/", hs.GetFrontendSettings) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return m, hs | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestHTTPServer_GetFrontendSettings_hideVersionAnonyomus(t *testing.T) { | 
					
						
							|  |  |  | 	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() | 
					
						
							|  |  |  | 	m, hs := setupTestEnvironment(t, cfg) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	req := httptest.NewRequest(http.MethodGet, "/api/frontend/settings", nil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	setting.BuildVersion = "7.8.9" | 
					
						
							|  |  |  | 	setting.BuildCommit = "01234567" | 
					
						
							|  |  |  | 	setting.Env = "testing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	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
										 |  |  | 	} | 
					
						
							|  |  |  | } |