dataproxy_test.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package api
  2. import (
  3. "net/http"
  4. "net/url"
  5. "testing"
  6. . "github.com/smartystreets/goconvey/convey"
  7. "github.com/grafana/grafana/pkg/components/simplejson"
  8. m "github.com/grafana/grafana/pkg/models"
  9. "github.com/grafana/grafana/pkg/setting"
  10. "github.com/grafana/grafana/pkg/util"
  11. )
  12. func TestDataSourceProxy(t *testing.T) {
  13. Convey("When getting graphite datasource proxy", t, func() {
  14. ds := m.DataSource{Url: "htttp://graphite:8080", Type: m.DS_GRAPHITE}
  15. targetUrl, err := url.Parse(ds.Url)
  16. proxy := NewReverseProxy(&ds, "/render", targetUrl)
  17. proxy.Transport, err = DataProxyTransport(&ds)
  18. So(err, ShouldBeNil)
  19. transport, ok := proxy.Transport.(*http.Transport)
  20. So(ok, ShouldBeTrue)
  21. So(transport.TLSClientConfig.InsecureSkipVerify, ShouldBeTrue)
  22. requestUrl, _ := url.Parse("http://grafana.com/sub")
  23. req := http.Request{URL: requestUrl}
  24. proxy.Director(&req)
  25. Convey("Can translate request url and path", func() {
  26. So(req.URL.Host, ShouldEqual, "graphite:8080")
  27. So(req.URL.Path, ShouldEqual, "/render")
  28. })
  29. })
  30. Convey("When getting influxdb datasource proxy", t, func() {
  31. ds := m.DataSource{
  32. Type: m.DS_INFLUXDB_08,
  33. Url: "http://influxdb:8083",
  34. Database: "site",
  35. User: "user",
  36. Password: "password",
  37. }
  38. targetUrl, _ := url.Parse(ds.Url)
  39. proxy := NewReverseProxy(&ds, "", targetUrl)
  40. requestUrl, _ := url.Parse("http://grafana.com/sub")
  41. req := http.Request{URL: requestUrl}
  42. proxy.Director(&req)
  43. Convey("Should add db to url", func() {
  44. So(req.URL.Path, ShouldEqual, "/db/site/")
  45. })
  46. Convey("Should add username and password", func() {
  47. queryVals := req.URL.Query()
  48. So(queryVals["u"][0], ShouldEqual, "user")
  49. So(queryVals["p"][0], ShouldEqual, "password")
  50. })
  51. })
  52. Convey("When getting kubernetes datasource proxy", t, func() {
  53. setting.SecretKey = "password"
  54. json := simplejson.New()
  55. json.Set("tlsAuth", true)
  56. ds := m.DataSource{
  57. Url: "htttp://k8s:8001",
  58. Type: "Kubernetes",
  59. JsonData: json,
  60. SecureJsonData: map[string][]byte{
  61. "tlsClientCert": util.Encrypt([]byte(clientCert), "password"),
  62. "tlsClientKey": util.Encrypt([]byte(clientKey), "password"),
  63. },
  64. }
  65. targetUrl, err := url.Parse(ds.Url)
  66. proxy := NewReverseProxy(&ds, "", targetUrl)
  67. proxy.Transport, err = DataProxyTransport(&ds)
  68. So(err, ShouldBeNil)
  69. transport, ok := proxy.Transport.(*http.Transport)
  70. Convey("Should add cert", func() {
  71. So(ok, ShouldBeTrue)
  72. So(transport.TLSClientConfig.InsecureSkipVerify, ShouldEqual, false)
  73. So(len(transport.TLSClientConfig.Certificates), ShouldEqual, 1)
  74. })
  75. })
  76. }
  77. const clientCert string = `-----BEGIN CERTIFICATE-----
  78. MIICsjCCAZoCCQCcd8sOfstQLzANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxj
  79. YS1rOHMtc3RobG0wHhcNMTYxMTAyMDkyNTE1WhcNMTcxMTAyMDkyNTE1WjAfMR0w
  80. GwYDVQQDDBRhZG0tZGFuaWVsLWs4cy1zdGhsbTCCASIwDQYJKoZIhvcNAQEBBQAD
  81. ggEPADCCAQoCggEBAOMliaWyNEUJKM37vWCl5bGub3lMicyRAqGQyY/qxD9yKKM2
  82. FbucVcmWmg5vvTqQVl5rlQ+c7GI8OD6ptmFl8a26coEki7bFr8bkpSyBSEc5p27b
  83. Z0ORFSqBHWHQbr9PkxPLYW6T3gZYUtRYv3OQgGxLXlvUh85n/mQfuR3N1FgmShHo
  84. GtAFi/ht6leXa0Ms+jNSDLCmXpJm1GIEqgyKX7K3+g3vzo9coYqXq4XTa8Efs2v8
  85. SCwqWfBC3rHfgs/5DLB8WT4Kul8QzxkytzcaBQfRfzhSV6bkgm7oTzt2/1eRRsf4
  86. YnXzLE9YkCC9sAn+Owzqf+TYC1KRluWDfqqBTJUCAwEAATANBgkqhkiG9w0BAQsF
  87. AAOCAQEAdMsZg6edWGC+xngizn0uamrUg1ViaDqUsz0vpzY5NWLA4MsBc4EtxWRP
  88. ueQvjUimZ3U3+AX0YWNLIrH1FCVos2jdij/xkTUmHcwzr8rQy+B17cFi+a8jtpgw
  89. AU6WWoaAIEhhbWQfth/Diz3mivl1ARB+YqiWca2mjRPLTPcKJEURDVddQ423el0Q
  90. 4JNxS5icu7T2zYTYHAo/cT9zVdLZl0xuLxYm3asK1IONJ/evxyVZima3il6MPvhe
  91. 58Hwz+m+HdqHxi24b/1J/VKYbISG4huOQCdLzeNXgvwFlGPUmHSnnKo1/KbQDAR5
  92. llG/Sw5+FquFuChaA6l5KWy7F3bQyA==
  93. -----END CERTIFICATE-----`
  94. const clientKey string = `-----BEGIN RSA PRIVATE KEY-----
  95. MIIEpQIBAAKCAQEA4yWJpbI0RQkozfu9YKXlsa5veUyJzJECoZDJj+rEP3IoozYV
  96. u5xVyZaaDm+9OpBWXmuVD5zsYjw4Pqm2YWXxrbpygSSLtsWvxuSlLIFIRzmnbttn
  97. Q5EVKoEdYdBuv0+TE8thbpPeBlhS1Fi/c5CAbEteW9SHzmf+ZB+5Hc3UWCZKEega
  98. 0AWL+G3qV5drQyz6M1IMsKZekmbUYgSqDIpfsrf6De/Oj1yhiperhdNrwR+za/xI
  99. LCpZ8ELesd+Cz/kMsHxZPgq6XxDPGTK3NxoFB9F/OFJXpuSCbuhPO3b/V5FGx/hi
  100. dfMsT1iQIL2wCf47DOp/5NgLUpGW5YN+qoFMlQIDAQABAoIBAQCzy4u312XeW1Cs
  101. Mx6EuOwmh59/ESFmBkZh4rxZKYgrfE5EWlQ7i5SwG4BX+wR6rbNfy6JSmHDXlTkk
  102. CKvvToVNcW6fYHEivDnVojhIERFIJ4+rhQmpBtcNLOQ3/4cZ8X/GxE6b+3lb5l+x
  103. 64mnjPLKRaIr5/+TVuebEy0xNTJmjnJ7yiB2HRz7uXEQaVSk/P7KAkkyl/9J3/LM
  104. 8N9AX1w6qDaNQZ4/P0++1H4SQenosM/b/GqGTomarEk/GE0NcB9rzmR9VCXa7FRh
  105. WV5jyt9vUrwIEiK/6nUnOkGO8Ei3kB7Y+e+2m6WdaNoU5RAfqXmXa0Q/a0lLRruf
  106. vTMo2WrBAoGBAPRaK4cx76Q+3SJ/wfznaPsMM06OSR8A3ctKdV+ip/lyKtb1W8Pz
  107. k8MYQDH7GwPtSu5QD8doL00pPjugZL/ba7X9nAsI+pinyEErfnB9y7ORNEjIYYzs
  108. DiqDKup7ANgw1gZvznWvb9Ge0WUSXvWS0pFkgootQAf+RmnnbWGH6l6RAoGBAO35
  109. aGUrLro5u9RD24uSXNU3NmojINIQFK5dHAT3yl0BBYstL43AEsye9lX95uMPTvOQ
  110. Cqcn42Hjp/bSe3n0ObyOZeXVrWcDFAfE0wwB1BkvL1lpgnFO9+VQORlH4w3Ppnpo
  111. jcPkR2TFeDaAYtvckhxe/Bk3OnuFmnsQ3VzM75fFAoGBAI6PvS2XeNU+yA3EtA01
  112. hg5SQ+zlHswz2TMuMeSmJZJnhY78f5mHlwIQOAPxGQXlf/4iP9J7en1uPpzTK3S0
  113. M9duK4hUqMA/w5oiIhbHjf0qDnMYVbG+V1V+SZ+cPBXmCDihKreGr5qBKnHpkfV8
  114. v9WL6o1rcRw4wiQvnaV1gsvBAoGBALtzVTczr6gDKCAIn5wuWy+cQSGTsBunjRLX
  115. xuVm5iEiV+KMYkPvAx/pKzMLP96lRVR3ptyKgAKwl7LFk3u50+zh4gQLr35QH2wL
  116. Lw7rNc3srAhrItPsFzqrWX6/cGuFoKYVS239l/sZzRppQPXcpb7xVvTp2whHcir0
  117. Wtnpl+TdAoGAGqKqo2KU3JoY3IuTDUk1dsNAm8jd9EWDh+s1x4aG4N79mwcss5GD
  118. FF8MbFPneK7xQd8L6HisKUDAUi2NOyynM81LAftPkvN6ZuUVeFDfCL4vCA0HUXLD
  119. +VrOhtUZkNNJlLMiVRJuQKUOGlg8PpObqYbstQAf/0/yFJMRHG82Tcg=
  120. -----END RSA PRIVATE KEY-----`