config_reader_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package dashboards
  2. import (
  3. "os"
  4. "testing"
  5. "github.com/grafana/grafana/pkg/infra/log"
  6. . "github.com/smartystreets/goconvey/convey"
  7. )
  8. var (
  9. simpleDashboardConfig = "./testdata/test-configs/dashboards-from-disk"
  10. oldVersion = "./testdata/test-configs/version-0"
  11. brokenConfigs = "./testdata/test-configs/broken-configs"
  12. )
  13. func TestDashboardsAsConfig(t *testing.T) {
  14. Convey("Dashboards as configuration", t, func() {
  15. logger := log.New("test-logger")
  16. Convey("Can read config file version 1 format", func() {
  17. _ = os.Setenv("TEST_VAR", "general")
  18. cfgProvider := configReader{path: simpleDashboardConfig, log: logger}
  19. cfg, err := cfgProvider.readConfig()
  20. _ = os.Unsetenv("TEST_VAR")
  21. So(err, ShouldBeNil)
  22. validateDashboardAsConfig(t, cfg)
  23. })
  24. Convey("Can read config file in version 0 format", func() {
  25. cfgProvider := configReader{path: oldVersion, log: logger}
  26. cfg, err := cfgProvider.readConfig()
  27. So(err, ShouldBeNil)
  28. validateDashboardAsConfig(t, cfg)
  29. })
  30. Convey("Should skip invalid path", func() {
  31. cfgProvider := configReader{path: "/invalid-directory", log: logger}
  32. cfg, err := cfgProvider.readConfig()
  33. if err != nil {
  34. t.Fatalf("readConfig return an error %v", err)
  35. }
  36. So(len(cfg), ShouldEqual, 0)
  37. })
  38. Convey("Should skip broken config files", func() {
  39. cfgProvider := configReader{path: brokenConfigs, log: logger}
  40. cfg, err := cfgProvider.readConfig()
  41. if err != nil {
  42. t.Fatalf("readConfig return an error %v", err)
  43. }
  44. So(len(cfg), ShouldEqual, 0)
  45. })
  46. })
  47. }
  48. func validateDashboardAsConfig(t *testing.T, cfg []*DashboardsAsConfig) {
  49. t.Helper()
  50. So(len(cfg), ShouldEqual, 2)
  51. ds := cfg[0]
  52. So(ds.Name, ShouldEqual, "general dashboards")
  53. So(ds.Type, ShouldEqual, "file")
  54. So(ds.OrgId, ShouldEqual, 2)
  55. So(ds.Folder, ShouldEqual, "developers")
  56. So(ds.FolderUid, ShouldEqual, "xyz")
  57. So(ds.Editable, ShouldBeTrue)
  58. So(len(ds.Options), ShouldEqual, 1)
  59. So(ds.Options["path"], ShouldEqual, "/var/lib/grafana/dashboards")
  60. So(ds.DisableDeletion, ShouldBeTrue)
  61. So(ds.UpdateIntervalSeconds, ShouldEqual, 15)
  62. ds2 := cfg[1]
  63. So(ds2.Name, ShouldEqual, "default")
  64. So(ds2.Type, ShouldEqual, "file")
  65. So(ds2.OrgId, ShouldEqual, 1)
  66. So(ds2.Folder, ShouldEqual, "")
  67. So(ds2.FolderUid, ShouldEqual, "")
  68. So(ds2.Editable, ShouldBeFalse)
  69. So(len(ds2.Options), ShouldEqual, 1)
  70. So(ds2.Options["path"], ShouldEqual, "/var/lib/grafana/dashboards")
  71. So(ds2.DisableDeletion, ShouldBeFalse)
  72. So(ds2.UpdateIntervalSeconds, ShouldEqual, 10)
  73. }