datasources_test.go 4.1 KB

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