datasources_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package datasources
  2. import (
  3. "testing"
  4. "github.com/grafana/grafana/pkg/log"
  5. "github.com/grafana/grafana/pkg/models"
  6. . "github.com/smartystreets/goconvey/convey"
  7. )
  8. var (
  9. logger log.Logger = log.New("fake.logger")
  10. oneDatasourcesConfig string = ""
  11. twoDatasourcesConfig string = "./test-configs/two-datasources.yaml"
  12. twoDatasourcesConfigPurgeOthers string = "./test-configs/two-datasources-purge-others.yaml"
  13. doubleDatasourcesConfig string = "./test-configs/double-default-datasources.yaml"
  14. )
  15. func TestDatasourceAsConfig(t *testing.T) {
  16. Convey("Testing datasource as configuration", t, func() {
  17. fakeRepo := &fakeRepository{}
  18. Convey("One configured datasource", func() {
  19. Convey("no datasource in database", func() {
  20. dc := newDatasourceConfiguration(logger, fakeRepo)
  21. err := dc.applyChanges(twoDatasourcesConfig)
  22. if err != nil {
  23. t.Fatalf("applyChanges return an error %v", err)
  24. }
  25. So(len(fakeRepo.deleted), ShouldEqual, 0)
  26. So(len(fakeRepo.inserted), ShouldEqual, 2)
  27. So(len(fakeRepo.updated), ShouldEqual, 0)
  28. })
  29. Convey("One datasource in database with same name", func() {
  30. fakeRepo.loadAll = []*models.DataSource{
  31. {Name: "Graphite", OrgId: 1, Id: 1},
  32. }
  33. Convey("should update one datasource", func() {
  34. dc := newDatasourceConfiguration(logger, fakeRepo)
  35. err := dc.applyChanges(twoDatasourcesConfig)
  36. if err != nil {
  37. t.Fatalf("applyChanges return an error %v", err)
  38. }
  39. So(len(fakeRepo.deleted), ShouldEqual, 0)
  40. So(len(fakeRepo.inserted), ShouldEqual, 1)
  41. So(len(fakeRepo.updated), ShouldEqual, 1)
  42. })
  43. })
  44. Convey("Two datasources with is_default", func() {
  45. dc := newDatasourceConfiguration(logger, fakeRepo)
  46. err := dc.applyChanges(doubleDatasourcesConfig)
  47. Convey("should raise error", func() {
  48. So(err, ShouldEqual, ErrInvalidConfigToManyDefault)
  49. })
  50. })
  51. })
  52. Convey("Two configured datasource and purge others ", func() {
  53. Convey("two other datasources in database", func() {
  54. fakeRepo.loadAll = []*models.DataSource{
  55. {Name: "old-graphite", OrgId: 1, Id: 1},
  56. {Name: "old-graphite2", OrgId: 1, Id: 2},
  57. }
  58. Convey("should have two new datasources", func() {
  59. dc := newDatasourceConfiguration(logger, fakeRepo)
  60. err := dc.applyChanges(twoDatasourcesConfigPurgeOthers)
  61. if err != nil {
  62. t.Fatalf("applyChanges return an error %v", err)
  63. }
  64. So(len(fakeRepo.deleted), ShouldEqual, 2)
  65. So(len(fakeRepo.inserted), ShouldEqual, 2)
  66. So(len(fakeRepo.updated), ShouldEqual, 0)
  67. })
  68. })
  69. })
  70. Convey("Two configured datasource and purge others = false", func() {
  71. Convey("two other datasources in database", func() {
  72. fakeRepo.loadAll = []*models.DataSource{
  73. {Name: "Graphite", OrgId: 1, Id: 1},
  74. {Name: "old-graphite2", OrgId: 1, Id: 2},
  75. }
  76. Convey("should have two new datasources", func() {
  77. dc := newDatasourceConfiguration(logger, fakeRepo)
  78. err := dc.applyChanges(twoDatasourcesConfig)
  79. if err != nil {
  80. t.Fatalf("applyChanges return an error %v", err)
  81. }
  82. So(len(fakeRepo.deleted), ShouldEqual, 0)
  83. So(len(fakeRepo.inserted), ShouldEqual, 1)
  84. So(len(fakeRepo.updated), ShouldEqual, 1)
  85. })
  86. })
  87. })
  88. })
  89. }
  90. type fakeRepository struct {
  91. inserted []*models.AddDataSourceCommand
  92. deleted []*models.DeleteDataSourceByIdCommand
  93. updated []*models.UpdateDataSourceCommand
  94. loadAll []*models.DataSource
  95. }
  96. func (fc *fakeRepository) delete(cmd *models.DeleteDataSourceByIdCommand) error {
  97. fc.deleted = append(fc.deleted, cmd)
  98. return nil
  99. }
  100. func (fc *fakeRepository) update(cmd *models.UpdateDataSourceCommand) error {
  101. fc.updated = append(fc.updated, cmd)
  102. return nil
  103. }
  104. func (fc *fakeRepository) insert(cmd *models.AddDataSourceCommand) error {
  105. fc.inserted = append(fc.inserted, cmd)
  106. return nil
  107. }
  108. func (fc *fakeRepository) loadAllDatasources() ([]*models.DataSource, error) {
  109. return fc.loadAll, nil
  110. }
  111. func (fc *fakeRepository) get(cmd *models.GetDataSourceByNameQuery) error {
  112. for _, v := range fc.loadAll {
  113. if cmd.Name == v.Name && cmd.OrgId == v.OrgId {
  114. cmd.Result = v
  115. return nil
  116. }
  117. }
  118. return models.ErrDataSourceNotFound
  119. }