mirror of
				https://github.com/grafana/grafana.git
				synced 2025-02-25 18:55:37 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package dashboards
 | 
						|
 | 
						|
import (
 | 
						|
	"os"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/grafana/grafana/pkg/infra/log"
 | 
						|
	. "github.com/smartystreets/goconvey/convey"
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	simpleDashboardConfig = "./testdata/test-configs/dashboards-from-disk"
 | 
						|
	oldVersion            = "./testdata/test-configs/version-0"
 | 
						|
	brokenConfigs         = "./testdata/test-configs/broken-configs"
 | 
						|
)
 | 
						|
 | 
						|
func TestDashboardsAsConfig(t *testing.T) {
 | 
						|
	Convey("Dashboards as configuration", t, func() {
 | 
						|
		logger := log.New("test-logger")
 | 
						|
 | 
						|
		Convey("Can read config file version 1 format", func() {
 | 
						|
			_ = os.Setenv("TEST_VAR", "general")
 | 
						|
			cfgProvider := configReader{path: simpleDashboardConfig, log: logger}
 | 
						|
			cfg, err := cfgProvider.readConfig()
 | 
						|
			_ = os.Unsetenv("TEST_VAR")
 | 
						|
			So(err, ShouldBeNil)
 | 
						|
 | 
						|
			validateDashboardAsConfig(t, cfg)
 | 
						|
		})
 | 
						|
 | 
						|
		Convey("Can read config file in version 0 format", func() {
 | 
						|
			cfgProvider := configReader{path: oldVersion, log: logger}
 | 
						|
			cfg, err := cfgProvider.readConfig()
 | 
						|
			So(err, ShouldBeNil)
 | 
						|
 | 
						|
			validateDashboardAsConfig(t, cfg)
 | 
						|
		})
 | 
						|
 | 
						|
		Convey("Should skip invalid path", func() {
 | 
						|
 | 
						|
			cfgProvider := configReader{path: "/invalid-directory", log: logger}
 | 
						|
			cfg, err := cfgProvider.readConfig()
 | 
						|
			if err != nil {
 | 
						|
				t.Fatalf("readConfig return an error %v", err)
 | 
						|
			}
 | 
						|
 | 
						|
			So(len(cfg), ShouldEqual, 0)
 | 
						|
		})
 | 
						|
 | 
						|
		Convey("Should skip broken config files", func() {
 | 
						|
 | 
						|
			cfgProvider := configReader{path: brokenConfigs, log: logger}
 | 
						|
			cfg, err := cfgProvider.readConfig()
 | 
						|
			if err != nil {
 | 
						|
				t.Fatalf("readConfig return an error %v", err)
 | 
						|
			}
 | 
						|
 | 
						|
			So(len(cfg), ShouldEqual, 0)
 | 
						|
		})
 | 
						|
	})
 | 
						|
}
 | 
						|
func validateDashboardAsConfig(t *testing.T, cfg []*DashboardsAsConfig) {
 | 
						|
	t.Helper()
 | 
						|
 | 
						|
	So(len(cfg), ShouldEqual, 2)
 | 
						|
 | 
						|
	ds := cfg[0]
 | 
						|
	So(ds.Name, ShouldEqual, "general dashboards")
 | 
						|
	So(ds.Type, ShouldEqual, "file")
 | 
						|
	So(ds.OrgId, ShouldEqual, 2)
 | 
						|
	So(ds.Folder, ShouldEqual, "developers")
 | 
						|
	So(ds.FolderUid, ShouldEqual, "xyz")
 | 
						|
	So(ds.Editable, ShouldBeTrue)
 | 
						|
	So(len(ds.Options), ShouldEqual, 1)
 | 
						|
	So(ds.Options["path"], ShouldEqual, "/var/lib/grafana/dashboards")
 | 
						|
	So(ds.DisableDeletion, ShouldBeTrue)
 | 
						|
	So(ds.UpdateIntervalSeconds, ShouldEqual, 15)
 | 
						|
 | 
						|
	ds2 := cfg[1]
 | 
						|
	So(ds2.Name, ShouldEqual, "default")
 | 
						|
	So(ds2.Type, ShouldEqual, "file")
 | 
						|
	So(ds2.OrgId, ShouldEqual, 1)
 | 
						|
	So(ds2.Folder, ShouldEqual, "")
 | 
						|
	So(ds2.FolderUid, ShouldEqual, "")
 | 
						|
	So(ds2.Editable, ShouldBeFalse)
 | 
						|
	So(len(ds2.Options), ShouldEqual, 1)
 | 
						|
	So(ds2.Options["path"], ShouldEqual, "/var/lib/grafana/dashboards")
 | 
						|
	So(ds2.DisableDeletion, ShouldBeFalse)
 | 
						|
	So(ds2.UpdateIntervalSeconds, ShouldEqual, 10)
 | 
						|
}
 |