mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			103 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
| 
								 | 
							
								package middleware
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"encoding/json"
							 | 
						||
| 
								 | 
							
									"net/http"
							 | 
						||
| 
								 | 
							
									"net/http/httptest"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									. "github.com/smartystreets/goconvey/convey"
							 | 
						||
| 
								 | 
							
									"gopkg.in/macaron.v1"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									"github.com/grafana/grafana/pkg/infra/remotecache"
							 | 
						||
| 
								 | 
							
									"github.com/grafana/grafana/pkg/models"
							 | 
						||
| 
								 | 
							
									"github.com/grafana/grafana/pkg/services/auth"
							 | 
						||
| 
								 | 
							
									"github.com/grafana/grafana/pkg/setting"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type scenarioContext struct {
							 | 
						||
| 
								 | 
							
									m                    *macaron.Macaron
							 | 
						||
| 
								 | 
							
									context              *models.ReqContext
							 | 
						||
| 
								 | 
							
									resp                 *httptest.ResponseRecorder
							 | 
						||
| 
								 | 
							
									apiKey               string
							 | 
						||
| 
								 | 
							
									authHeader           string
							 | 
						||
| 
								 | 
							
									tokenSessionCookie   string
							 | 
						||
| 
								 | 
							
									respJson             map[string]interface{}
							 | 
						||
| 
								 | 
							
									handlerFunc          handlerFunc
							 | 
						||
| 
								 | 
							
									defaultHandler       macaron.Handler
							 | 
						||
| 
								 | 
							
									url                  string
							 | 
						||
| 
								 | 
							
									userAuthTokenService *auth.FakeUserAuthTokenService
							 | 
						||
| 
								 | 
							
									remoteCacheService   *remotecache.RemoteCache
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									req *http.Request
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (sc *scenarioContext) withValidApiKey() *scenarioContext {
							 | 
						||
| 
								 | 
							
									sc.apiKey = "eyJrIjoidjVuQXdwTWFmRlA2em5hUzR1cmhkV0RMUzU1MTFNNDIiLCJuIjoiYXNkIiwiaWQiOjF9"
							 | 
						||
| 
								 | 
							
									return sc
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (sc *scenarioContext) withTokenSessionCookie(unhashedToken string) *scenarioContext {
							 | 
						||
| 
								 | 
							
									sc.tokenSessionCookie = unhashedToken
							 | 
						||
| 
								 | 
							
									return sc
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (sc *scenarioContext) withAuthorizationHeader(authHeader string) *scenarioContext {
							 | 
						||
| 
								 | 
							
									sc.authHeader = authHeader
							 | 
						||
| 
								 | 
							
									return sc
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (sc *scenarioContext) fakeReq(method, url string) *scenarioContext {
							 | 
						||
| 
								 | 
							
									sc.resp = httptest.NewRecorder()
							 | 
						||
| 
								 | 
							
									req, err := http.NewRequest(method, url, nil)
							 | 
						||
| 
								 | 
							
									So(err, ShouldBeNil)
							 | 
						||
| 
								 | 
							
									sc.req = req
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return sc
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (sc *scenarioContext) fakeReqWithParams(method, url string, queryParams map[string]string) *scenarioContext {
							 | 
						||
| 
								 | 
							
									sc.resp = httptest.NewRecorder()
							 | 
						||
| 
								 | 
							
									req, err := http.NewRequest(method, url, nil)
							 | 
						||
| 
								 | 
							
									q := req.URL.Query()
							 | 
						||
| 
								 | 
							
									for k, v := range queryParams {
							 | 
						||
| 
								 | 
							
										q.Add(k, v)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									req.URL.RawQuery = q.Encode()
							 | 
						||
| 
								 | 
							
									So(err, ShouldBeNil)
							 | 
						||
| 
								 | 
							
									sc.req = req
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return sc
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (sc *scenarioContext) handler(fn handlerFunc) *scenarioContext {
							 | 
						||
| 
								 | 
							
									sc.handlerFunc = fn
							 | 
						||
| 
								 | 
							
									return sc
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (sc *scenarioContext) exec() {
							 | 
						||
| 
								 | 
							
									if sc.apiKey != "" {
							 | 
						||
| 
								 | 
							
										sc.req.Header.Add("Authorization", "Bearer "+sc.apiKey)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if sc.authHeader != "" {
							 | 
						||
| 
								 | 
							
										sc.req.Header.Add("Authorization", sc.authHeader)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if sc.tokenSessionCookie != "" {
							 | 
						||
| 
								 | 
							
										sc.req.AddCookie(&http.Cookie{
							 | 
						||
| 
								 | 
							
											Name:  setting.LoginCookieName,
							 | 
						||
| 
								 | 
							
											Value: sc.tokenSessionCookie,
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									sc.m.ServeHTTP(sc.resp, sc.req)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if sc.resp.Header().Get("Content-Type") == "application/json; charset=UTF-8" {
							 | 
						||
| 
								 | 
							
										err := json.NewDecoder(sc.resp.Body).Decode(&sc.respJson)
							 | 
						||
| 
								 | 
							
										So(err, ShouldBeNil)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type scenarioFunc func(c *scenarioContext)
							 | 
						||
| 
								 | 
							
								type handlerFunc func(c *models.ReqContext)
							 |