response_parser_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package influxdb
  2. import (
  3. "encoding/json"
  4. "testing"
  5. "github.com/grafana/grafana/pkg/setting"
  6. . "github.com/smartystreets/goconvey/convey"
  7. )
  8. func TestInfluxdbResponseParser(t *testing.T) {
  9. Convey("Influxdb response parser", t, func() {
  10. Convey("Response parser", func() {
  11. parser := &ResponseParser{}
  12. cfg := setting.NewCfg()
  13. cfg.Load(&setting.CommandLineArgs{
  14. HomePath: "../../../",
  15. })
  16. response := &Response{
  17. Results: []Result{
  18. {
  19. Series: []Row{
  20. {
  21. Name: "cpu",
  22. Columns: []string{"time", "mean", "sum"},
  23. Tags: map[string]string{"datacenter": "America"},
  24. Values: [][]interface{}{
  25. {json.Number("111"), json.Number("222"), json.Number("333")},
  26. {json.Number("111"), json.Number("222"), json.Number("333")},
  27. {json.Number("111"), json.Number("null"), json.Number("333")},
  28. },
  29. },
  30. },
  31. },
  32. },
  33. }
  34. query := &Query{}
  35. result := parser.Parse(response, query)
  36. Convey("can parse all series", func() {
  37. So(len(result.Series), ShouldEqual, 2)
  38. })
  39. Convey("can parse all points", func() {
  40. So(len(result.Series[0].Points), ShouldEqual, 3)
  41. So(len(result.Series[1].Points), ShouldEqual, 3)
  42. })
  43. Convey("can parse multi row result", func() {
  44. So(result.Series[0].Points[1][0].Float64, ShouldEqual, float64(222))
  45. So(result.Series[1].Points[1][0].Float64, ShouldEqual, float64(333))
  46. })
  47. Convey("can parse null points", func() {
  48. So(result.Series[0].Points[2][0].Valid, ShouldBeFalse)
  49. })
  50. Convey("can format serie names", func() {
  51. So(result.Series[0].Name, ShouldEqual, "cpu.mean { datacenter: America }")
  52. So(result.Series[1].Name, ShouldEqual, "cpu.sum { datacenter: America }")
  53. })
  54. })
  55. Convey("Response parser with alias", func() {
  56. parser := &ResponseParser{}
  57. response := &Response{
  58. Results: []Result{
  59. {
  60. Series: []Row{
  61. {
  62. Name: "cpu.upc",
  63. Columns: []string{"time", "mean", "sum"},
  64. Tags: map[string]string{"datacenter": "America"},
  65. Values: [][]interface{}{
  66. {json.Number("111"), json.Number("222"), json.Number("333")},
  67. },
  68. },
  69. },
  70. },
  71. },
  72. }
  73. Convey("$ alias", func() {
  74. Convey("simple alias", func() {
  75. query := &Query{Alias: "serie alias"}
  76. result := parser.Parse(response, query)
  77. So(result.Series[0].Name, ShouldEqual, "serie alias")
  78. })
  79. Convey("measurement alias", func() {
  80. query := &Query{Alias: "alias $m $measurement", Measurement: "10m"}
  81. result := parser.Parse(response, query)
  82. So(result.Series[0].Name, ShouldEqual, "alias 10m 10m")
  83. })
  84. Convey("column alias", func() {
  85. query := &Query{Alias: "alias $col", Measurement: "10m"}
  86. result := parser.Parse(response, query)
  87. So(result.Series[0].Name, ShouldEqual, "alias mean")
  88. So(result.Series[1].Name, ShouldEqual, "alias sum")
  89. })
  90. Convey("tag alias", func() {
  91. query := &Query{Alias: "alias $tag_datacenter"}
  92. result := parser.Parse(response, query)
  93. So(result.Series[0].Name, ShouldEqual, "alias America")
  94. })
  95. Convey("segment alias", func() {
  96. query := &Query{Alias: "alias $1"}
  97. result := parser.Parse(response, query)
  98. So(result.Series[0].Name, ShouldEqual, "alias upc")
  99. })
  100. Convey("segment position out of bound", func() {
  101. query := &Query{Alias: "alias $5"}
  102. result := parser.Parse(response, query)
  103. So(result.Series[0].Name, ShouldEqual, "alias $5")
  104. })
  105. })
  106. Convey("[[]] alias", func() {
  107. Convey("simple alias", func() {
  108. query := &Query{Alias: "serie alias"}
  109. result := parser.Parse(response, query)
  110. So(result.Series[0].Name, ShouldEqual, "serie alias")
  111. })
  112. Convey("measurement alias", func() {
  113. query := &Query{Alias: "alias [[m]] [[measurement]]", Measurement: "10m"}
  114. result := parser.Parse(response, query)
  115. So(result.Series[0].Name, ShouldEqual, "alias 10m 10m")
  116. })
  117. Convey("column alias", func() {
  118. query := &Query{Alias: "alias [[col]]", Measurement: "10m"}
  119. result := parser.Parse(response, query)
  120. So(result.Series[0].Name, ShouldEqual, "alias mean")
  121. So(result.Series[1].Name, ShouldEqual, "alias sum")
  122. })
  123. Convey("tag alias", func() {
  124. query := &Query{Alias: "alias [[tag_datacenter]]"}
  125. result := parser.Parse(response, query)
  126. So(result.Series[0].Name, ShouldEqual, "alias America")
  127. })
  128. })
  129. })
  130. })
  131. }