tsdb_test.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package tsdb
  2. import (
  3. "context"
  4. "testing"
  5. "github.com/grafana/grafana/pkg/models"
  6. . "github.com/smartystreets/goconvey/convey"
  7. )
  8. func TestMetricQuery(t *testing.T) {
  9. Convey("When executing request with one query", t, func() {
  10. req := &TsdbQuery{
  11. Queries: []*Query{
  12. {RefId: "A", DataSource: &models.DataSource{Id: 1, Type: "test"}},
  13. },
  14. }
  15. fakeExecutor := registerFakeExecutor()
  16. fakeExecutor.Return("A", TimeSeriesSlice{&TimeSeries{Name: "argh"}})
  17. res, err := HandleRequest(context.TODO(), req)
  18. So(err, ShouldBeNil)
  19. Convey("Should return query results", func() {
  20. So(res.Results["A"].Series, ShouldNotBeEmpty)
  21. So(res.Results["A"].Series[0].Name, ShouldEqual, "argh")
  22. })
  23. })
  24. Convey("When executing one request with two queries from same data source", t, func() {
  25. req := &TsdbQuery{
  26. Queries: []*Query{
  27. {RefId: "A", DataSource: &models.DataSource{Id: 1, Type: "test"}},
  28. {RefId: "B", DataSource: &models.DataSource{Id: 1, Type: "test"}},
  29. },
  30. }
  31. fakeExecutor := registerFakeExecutor()
  32. fakeExecutor.Return("A", TimeSeriesSlice{&TimeSeries{Name: "argh"}})
  33. fakeExecutor.Return("B", TimeSeriesSlice{&TimeSeries{Name: "barg"}})
  34. res, err := HandleRequest(context.TODO(), req)
  35. So(err, ShouldBeNil)
  36. Convey("Should return query results", func() {
  37. So(len(res.Results), ShouldEqual, 2)
  38. So(res.Results["B"].Series[0].Name, ShouldEqual, "barg")
  39. })
  40. Convey("Should have been batched in one request", func() {
  41. So(len(res.BatchTimings), ShouldEqual, 1)
  42. })
  43. })
  44. Convey("When query uses data source of unknown type", t, func() {
  45. req := &TsdbQuery{
  46. Queries: []*Query{
  47. {RefId: "A", DataSource: &models.DataSource{Id: 1, Type: "asdasdas"}},
  48. },
  49. }
  50. _, err := HandleRequest(context.TODO(), req)
  51. So(err, ShouldNotBeNil)
  52. })
  53. }
  54. func registerFakeExecutor() *FakeExecutor {
  55. executor, _ := NewFakeExecutor(nil)
  56. RegisterTsdbQueryEndpoint("test", func(dsInfo *models.DataSource) (TsdbQueryEndpoint, error) {
  57. return executor, nil
  58. })
  59. return executor
  60. }