response_parser_test.go 4.4 KB

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