| 
									
										
										
										
											2021-12-20 22:33:11 +08:00
										 |  |  | package setting | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"strconv" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							|  |  |  | 	"gopkg.in/ini.v1" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestFeatureToggles(t *testing.T) { | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							|  |  |  | 		name            string | 
					
						
							|  |  |  | 		conf            map[string]string | 
					
						
							|  |  |  | 		err             error | 
					
						
							|  |  |  | 		expectedToggles map[string]bool | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			name: "can parse feature toggles passed in the `enable` array", | 
					
						
							|  |  |  | 			conf: map[string]string{ | 
					
						
							|  |  |  | 				"enable": "feature1,feature2", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedToggles: map[string]bool{ | 
					
						
							|  |  |  | 				"feature1": true, | 
					
						
							|  |  |  | 				"feature2": true, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			name: "can parse feature toggles listed under [feature_toggles]", | 
					
						
							|  |  |  | 			conf: map[string]string{ | 
					
						
							|  |  |  | 				"enable":   "feature1,feature2", | 
					
						
							|  |  |  | 				"feature3": "true", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedToggles: map[string]bool{ | 
					
						
							|  |  |  | 				"feature1": true, | 
					
						
							|  |  |  | 				"feature2": true, | 
					
						
							|  |  |  | 				"feature3": true, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			name: "toggles under [feature_toggles] overrides those in the array", | 
					
						
							|  |  |  | 			conf: map[string]string{ | 
					
						
							|  |  |  | 				"enable":   "feature1,feature2", | 
					
						
							|  |  |  | 				"feature2": "false", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedToggles: map[string]bool{ | 
					
						
							|  |  |  | 				"feature1": true, | 
					
						
							|  |  |  | 				"feature2": false, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			name: "invalid boolean value should return syntax error", | 
					
						
							|  |  |  | 			conf: map[string]string{ | 
					
						
							|  |  |  | 				"enable":   "feature1,feature2", | 
					
						
							|  |  |  | 				"feature2": "invalid", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedToggles: map[string]bool{}, | 
					
						
							|  |  |  | 			err:             strconv.ErrSyntax, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for _, tc := range testCases { | 
					
						
							|  |  |  | 		f := ini.Empty() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		toggles, _ := f.NewSection("feature_toggles") | 
					
						
							|  |  |  | 		for k, v := range tc.conf { | 
					
						
							|  |  |  | 			_, err := toggles.NewKey(k, v) | 
					
						
							|  |  |  | 			require.ErrorIs(t, err, nil) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | 		featureToggles, err := ReadFeatureTogglesFromInitFile(toggles) | 
					
						
							| 
									
										
										
										
											2021-12-20 22:33:11 +08:00
										 |  |  | 		require.ErrorIs(t, err, tc.err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if err == nil { | 
					
						
							|  |  |  | 			for k, v := range featureToggles { | 
					
						
							|  |  |  | 				require.Equal(t, tc.expectedToggles[k], v, tc.name) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |