@ -8,6 +8,7 @@ import (
macaron "gopkg.in/macaron.v1"
"github.com/grafana/grafana/pkg/components/simplejson"
"github.com/grafana/grafana/pkg/log"
m "github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/setting"
@ -212,5 +213,36 @@ func TestDSRouteRule(t *testing.T) {
So ( interpolated , ShouldEqual , "0asd+asd" )
} )
Convey ( "When proxying a data source with custom headers specified" , func ( ) {
plugin := & plugins . DataSourcePlugin { }
encryptedData , err := util . Encrypt ( [ ] byte ( ` Bearer xf5yhfkpsnmgo ` ) , setting . SecretKey )
ds := & m . DataSource {
Type : m . DS_PROMETHEUS ,
Url : "http://prometheus:9090" ,
JsonData : simplejson . NewFromAny ( map [ string ] interface { } {
"httpHeaderName1" : "Authorization" ,
} ) ,
SecureJsonData : map [ string ] [ ] byte {
"httpHeaderValue1" : encryptedData ,
} ,
}
ctx := & m . ReqContext { }
proxy := NewDataSourceProxy ( ds , plugin , ctx , "" )
requestURL , _ := url . Parse ( "http://grafana.com/sub" )
req := http . Request { URL : requestURL , Header : make ( http . Header ) }
proxy . getDirector ( ) ( & req )
if err != nil {
log . Fatal ( 4 , err . Error ( ) )
}
Convey ( "Match header value after decryption" , func ( ) {
So ( req . Header . Get ( "Authorization" ) , ShouldEqual , "Bearer xf5yhfkpsnmgo" )
} )
} )
} )
}