mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| 
								 | 
							
								package featuremgmt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"context"
							 | 
						||
| 
								 | 
							
									"testing"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									"github.com/stretchr/testify/require"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestFeatureManager(t *testing.T) {
							 | 
						||
| 
								 | 
							
									t.Run("check testing stubs", func(t *testing.T) {
							 | 
						||
| 
								 | 
							
										ft := WithFeatures("a", "b", "c")
							 | 
						||
| 
								 | 
							
										require.True(t, ft.IsEnabled("a"))
							 | 
						||
| 
								 | 
							
										require.True(t, ft.IsEnabled("b"))
							 | 
						||
| 
								 | 
							
										require.True(t, ft.IsEnabled("c"))
							 | 
						||
| 
								 | 
							
										require.False(t, ft.IsEnabled("d"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										require.Equal(t, map[string]bool{"a": true, "b": true, "c": true}, ft.GetEnabled(context.Background()))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Explicit values
							 | 
						||
| 
								 | 
							
										ft = WithFeatures("a", true, "b", false)
							 | 
						||
| 
								 | 
							
										require.True(t, ft.IsEnabled("a"))
							 | 
						||
| 
								 | 
							
										require.False(t, ft.IsEnabled("b"))
							 | 
						||
| 
								 | 
							
										require.Equal(t, map[string]bool{"a": true}, ft.GetEnabled(context.Background()))
							 | 
						||
| 
								 | 
							
									})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									t.Run("check license validation", func(t *testing.T) {
							 | 
						||
| 
								 | 
							
										ft := FeatureManager{
							 | 
						||
| 
								 | 
							
											flags: map[string]*FeatureFlag{},
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										ft.registerFlags(FeatureFlag{
							 | 
						||
| 
								 | 
							
											Name:            "a",
							 | 
						||
| 
								 | 
							
											RequiresLicense: true,
							 | 
						||
| 
								 | 
							
											RequiresDevMode: true,
							 | 
						||
| 
								 | 
							
											Expression:      "true",
							 | 
						||
| 
								 | 
							
										}, FeatureFlag{
							 | 
						||
| 
								 | 
							
											Name:       "b",
							 | 
						||
| 
								 | 
							
											Expression: "true",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
										require.False(t, ft.IsEnabled("a"))
							 | 
						||
| 
								 | 
							
										require.True(t, ft.IsEnabled("b"))
							 | 
						||
| 
								 | 
							
										require.False(t, ft.IsEnabled("c")) // uknown flag
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Try changing "requires license"
							 | 
						||
| 
								 | 
							
										ft.registerFlags(FeatureFlag{
							 | 
						||
| 
								 | 
							
											Name:            "a",
							 | 
						||
| 
								 | 
							
											RequiresLicense: false, // shuld still require license!
							 | 
						||
| 
								 | 
							
										}, FeatureFlag{
							 | 
						||
| 
								 | 
							
											Name:            "b",
							 | 
						||
| 
								 | 
							
											RequiresLicense: true, // expression is still "true"
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
										require.False(t, ft.IsEnabled("a"))
							 | 
						||
| 
								 | 
							
										require.False(t, ft.IsEnabled("b"))
							 | 
						||
| 
								 | 
							
										require.False(t, ft.IsEnabled("c"))
							 | 
						||
| 
								 | 
							
									})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									t.Run("check description and docs configs", func(t *testing.T) {
							 | 
						||
| 
								 | 
							
										ft := FeatureManager{
							 | 
						||
| 
								 | 
							
											flags: map[string]*FeatureFlag{},
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										ft.registerFlags(FeatureFlag{
							 | 
						||
| 
								 | 
							
											Name:        "a",
							 | 
						||
| 
								 | 
							
											Description: "first",
							 | 
						||
| 
								 | 
							
										}, FeatureFlag{
							 | 
						||
| 
								 | 
							
											Name:        "a",
							 | 
						||
| 
								 | 
							
											Description: "second",
							 | 
						||
| 
								 | 
							
										}, FeatureFlag{
							 | 
						||
| 
								 | 
							
											Name:    "a",
							 | 
						||
| 
								 | 
							
											DocsURL: "http://something",
							 | 
						||
| 
								 | 
							
										}, FeatureFlag{
							 | 
						||
| 
								 | 
							
											Name: "a",
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
										flag := ft.flags["a"]
							 | 
						||
| 
								 | 
							
										require.Equal(t, "second", flag.Description)
							 | 
						||
| 
								 | 
							
										require.Equal(t, "http://something", flag.DocsURL)
							 | 
						||
| 
								 | 
							
									})
							 | 
						||
| 
								 | 
							
								}
							 |