@ -7,15 +7,24 @@ import (
. "github.com/smartystreets/goconvey/convey"
"github.com/grafana/grafana/pkg/components/simplejson"
m "github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/util"
)
func TestDataSourceProxy ( t * testing . T ) {
Convey ( "When getting graphite datasource proxy" , t , func ( ) {
ds := m . DataSource { Url : "htttp://graphite:8080" , Type : m . DS_GRAPHITE }
targetUrl , _ := url . Parse ( ds . Url )
targetUrl , err := url . Parse ( ds . Url )
proxy := NewReverseProxy ( & ds , "/render" , targetUrl )
proxy . Transport , err = DataProxyTransport ( & ds )
So ( err , ShouldBeNil )
transport , ok := proxy . Transport . ( * http . Transport )
So ( ok , ShouldBeTrue )
So ( transport . TLSClientConfig . InsecureSkipVerify , ShouldBeTrue )
requestUrl , _ := url . Parse ( "http://grafana.com/sub" )
req := http . Request { URL : requestUrl }
@ -54,7 +63,80 @@ func TestDataSourceProxy(t *testing.T) {
So ( queryVals [ "u" ] [ 0 ] , ShouldEqual , "user" )
So ( queryVals [ "p" ] [ 0 ] , ShouldEqual , "password" )
} )
} )
Convey ( "When getting kubernetes datasource proxy" , t , func ( ) {
setting . SecretKey = "password"
json := simplejson . New ( )
json . Set ( "tlsAuth" , true )
ds := m . DataSource {
Url : "htttp://k8s:8001" ,
Type : "Kubernetes" ,
JsonData : json ,
SecureJsonData : map [ string ] [ ] byte {
"tlsClientCert" : util . Encrypt ( [ ] byte ( clientCert ) , "password" ) ,
"tlsClientKey" : util . Encrypt ( [ ] byte ( clientKey ) , "password" ) ,
} ,
}
targetUrl , err := url . Parse ( ds . Url )
proxy := NewReverseProxy ( & ds , "" , targetUrl )
proxy . Transport , err = DataProxyTransport ( & ds )
So ( err , ShouldBeNil )
transport , ok := proxy . Transport . ( * http . Transport )
Convey ( "Should add cert" , func ( ) {
So ( ok , ShouldBeTrue )
So ( transport . TLSClientConfig . InsecureSkipVerify , ShouldEqual , false )
So ( len ( transport . TLSClientConfig . Certificates ) , ShouldEqual , 1 )
} )
} )
}
const clientCert string = ` -- -- - BEGIN CERTIFICATE -- -- -
MIICsjCCAZoCCQCcd8sOfstQLzANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxj
YS1rOHMtc3RobG0wHhcNMTYxMTAyMDkyNTE1WhcNMTcxMTAyMDkyNTE1WjAfMR0w
GwYDVQQDDBRhZG0tZGFuaWVsLWs4cy1zdGhsbTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAOMliaWyNEUJKM37vWCl5bGub3lMicyRAqGQyY / qxD9yKKM2
FbucVcmWmg5vvTqQVl5rlQ + c7GI8OD6ptmFl8a26coEki7bFr8bkpSyBSEc5p27b
Z0ORFSqBHWHQbr9PkxPLYW6T3gZYUtRYv3OQgGxLXlvUh85n / mQfuR3N1FgmShHo
GtAFi / ht6leXa0Ms + jNSDLCmXpJm1GIEqgyKX7K3 + g3vzo9coYqXq4XTa8Efs2v8
SCwqWfBC3rHfgs / 5 DLB8WT4Kul8QzxkytzcaBQfRfzhSV6bkgm7oTzt2 / 1 eRRsf4
YnXzLE9YkCC9sAn + Owzqf + TYC1KRluWDfqqBTJUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAdMsZg6edWGC + xngizn0uamrUg1ViaDqUsz0vpzY5NWLA4MsBc4EtxWRP
ueQvjUimZ3U3 + AX0YWNLIrH1FCVos2jdij / xkTUmHcwzr8rQy + B17cFi + a8jtpgw
AU6WWoaAIEhhbWQfth / Diz3mivl1ARB + YqiWca2mjRPLTPcKJEURDVddQ423el0Q
4 JNxS5icu7T2zYTYHAo / cT9zVdLZl0xuLxYm3asK1IONJ / evxyVZima3il6MPvhe
58 Hwz + m + HdqHxi24b / 1 J / VKYbISG4huOQCdLzeNXgvwFlGPUmHSnnKo1 / KbQDAR5
llG / Sw5 + FquFuChaA6l5KWy7F3bQyA ==
-- -- - END CERTIFICATE -- -- - `
const clientKey string = ` -- -- - BEGIN RSA PRIVATE KEY -- -- -
MIIEpQIBAAKCAQEA4yWJpbI0RQkozfu9YKXlsa5veUyJzJECoZDJj + rEP3IoozYV
u5xVyZaaDm + 9 OpBWXmuVD5zsYjw4Pqm2YWXxrbpygSSLtsWvxuSlLIFIRzmnbttn
Q5EVKoEdYdBuv0 + TE8thbpPeBlhS1Fi / c5CAbEteW9SHzmf + ZB + 5 Hc3UWCZKEega
0 AWL + G3qV5drQyz6M1IMsKZekmbUYgSqDIpfsrf6De / Oj1yhiperhdNrwR + za / xI
LCpZ8ELesd + Cz / kMsHxZPgq6XxDPGTK3NxoFB9F / OFJXpuSCbuhPO3b / V5FGx / hi
dfMsT1iQIL2wCf47DOp / 5 NgLUpGW5YN + qoFMlQIDAQABAoIBAQCzy4u312XeW1Cs
Mx6EuOwmh59 / ESFmBkZh4rxZKYgrfE5EWlQ7i5SwG4BX + wR6rbNfy6JSmHDXlTkk
CKvvToVNcW6fYHEivDnVojhIERFIJ4 + rhQmpBtcNLOQ3 / 4 cZ8X / GxE6b + 3 lb5l + x
64 mnjPLKRaIr5 / + TVuebEy0xNTJmjnJ7yiB2HRz7uXEQaVSk / P7KAkkyl / 9 J3 / LM
8 N9AX1w6qDaNQZ4 / P0 ++ 1 H4SQenosM / b / GqGTomarEk / GE0NcB9rzmR9VCXa7FRh
WV5jyt9vUrwIEiK / 6 nUnOkGO8Ei3kB7Y + e + 2 m6WdaNoU5RAfqXmXa0Q / a0lLRruf
vTMo2WrBAoGBAPRaK4cx76Q + 3 SJ / wfznaPsMM06OSR8A3ctKdV + ip / lyKtb1W8Pz
k8MYQDH7GwPtSu5QD8doL00pPjugZL / ba7X9nAsI + pinyEErfnB9y7ORNEjIYYzs
DiqDKup7ANgw1gZvznWvb9Ge0WUSXvWS0pFkgootQAf + RmnnbWGH6l6RAoGBAO35
aGUrLro5u9RD24uSXNU3NmojINIQFK5dHAT3yl0BBYstL43AEsye9lX95uMPTvOQ
Cqcn42Hjp / bSe3n0ObyOZeXVrWcDFAfE0wwB1BkvL1lpgnFO9 + VQORlH4w3Ppnpo
jcPkR2TFeDaAYtvckhxe / Bk3OnuFmnsQ3VzM75fFAoGBAI6PvS2XeNU + yA3EtA01
hg5SQ + zlHswz2TMuMeSmJZJnhY78f5mHlwIQOAPxGQXlf / 4i P9J7en1uPpzTK3S0
M9duK4hUqMA / w5oiIhbHjf0qDnMYVbG + V1V + SZ + cPBXmCDihKreGr5qBKnHpkfV8
v9WL6o1rcRw4wiQvnaV1gsvBAoGBALtzVTczr6gDKCAIn5wuWy + cQSGTsBunjRLX
xuVm5iEiV + KMYkPvAx / pKzMLP96lRVR3ptyKgAKwl7LFk3u50 + zh4gQLr35QH2wL
Lw7rNc3srAhrItPsFzqrWX6 / cGuFoKYVS239l / sZzRppQPXcpb7xVvTp2whHcir0
Wtnpl + TdAoGAGqKqo2KU3JoY3IuTDUk1dsNAm8jd9EWDh + s1x4aG4N79mwcss5GD
FF8MbFPneK7xQd8L6HisKUDAUi2NOyynM81LAftPkvN6ZuUVeFDfCL4vCA0HUXLD
+ VrOhtUZkNNJlLMiVRJuQKUOGlg8PpObqYbstQAf / 0 / yFJMRHG82Tcg =
-- -- - END RSA PRIVATE KEY -- -- - `