github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/config/environment_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package config 5 6 import ( 7 "testing" 8 9 "github.com/masterhung0112/hk_server/v5/model" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func modifiedDefault(modify func(*model.Config)) *model.Config { 14 def := defaultConfig() 15 modify(def) 16 return def 17 } 18 19 func defaultConfig() *model.Config { 20 def := &model.Config{} 21 def.SetDefaults() 22 return def 23 } 24 25 func TestRemoveEnvOverrides(t *testing.T) { 26 var tests = []struct { 27 name string 28 inputConfig *model.Config 29 env map[string]string 30 expectedConfig *model.Config 31 }{ 32 { 33 name: "basic override", 34 inputConfig: modifiedDefault(func(in *model.Config) { 35 *in.ServiceSettings.TLSMinVer = "1.4" 36 }), 37 env: map[string]string{ 38 "MM_SERVICESETTINGS_TLSMINVER": "1.5", 39 }, 40 expectedConfig: modifiedDefault(func(in *model.Config) { 41 *in.ServiceSettings.TLSMinVer = "1.5" 42 }), 43 }, 44 { 45 name: "feature flags", 46 inputConfig: modifiedDefault(func(in *model.Config) { 47 in.FeatureFlags.TestFeature = "somevalue" 48 }), 49 env: map[string]string{ 50 "MM_FEATUREFLAGS_TESTFEATURE": "correctvalue", 51 }, 52 expectedConfig: modifiedDefault(func(in *model.Config) { 53 in.FeatureFlags.TestFeature = "correctvalue" 54 }), 55 }, 56 { 57 name: "int setting", 58 inputConfig: modifiedDefault(func(in *model.Config) { 59 *in.ClusterSettings.GossipPort = 500 60 }), 61 env: map[string]string{ 62 "MM_CLUSTERSETTINGS_GOSSIPPORT": "600", 63 }, 64 expectedConfig: modifiedDefault(func(in *model.Config) { 65 *in.ClusterSettings.GossipPort = 600 66 }), 67 }, 68 { 69 name: "int64 setting", 70 inputConfig: modifiedDefault(func(in *model.Config) { 71 *in.ServiceSettings.TLSStrictTransportMaxAge = 500 72 }), 73 env: map[string]string{ 74 "MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE": "4294967294", 75 }, 76 expectedConfig: modifiedDefault(func(in *model.Config) { 77 *in.ServiceSettings.TLSStrictTransportMaxAge = 4294967294 78 }), 79 }, 80 { 81 name: "bool setting", 82 inputConfig: modifiedDefault(func(in *model.Config) { 83 *in.ClusterSettings.UseIpAddress = false 84 }), 85 env: map[string]string{ 86 "MM_CLUSTERSETTINGS_USEIPADDRESS": "true", 87 }, 88 expectedConfig: modifiedDefault(func(in *model.Config) { 89 *in.ClusterSettings.UseIpAddress = true 90 }), 91 }, 92 { 93 name: "[]string setting", 94 inputConfig: modifiedDefault(func(in *model.Config) { 95 in.SqlSettings.DataSourceReplicas = []string{"somthing"} 96 }), 97 env: map[string]string{ 98 "MM_SQLSETTINGS_DATASOURCEREPLICAS": "otherthing alsothis", 99 }, 100 expectedConfig: modifiedDefault(func(in *model.Config) { 101 in.SqlSettings.DataSourceReplicas = []string{"otherthing", "alsothis"} 102 }), 103 }, 104 { 105 name: "bad env", 106 inputConfig: modifiedDefault(func(in *model.Config) { 107 }), 108 env: map[string]string{ 109 "MM_SERVICESETTINGS": "huh?", 110 "NOTMM": "huh?", 111 "MM_NOTEXIST": "huh?", 112 "MM_NOTEXIST_MORE_AND_MORE": "huh?", 113 "MM_": "huh?", 114 "MM": "huh?", 115 "MM__": "huh?", 116 "_": "huh?", 117 }, 118 expectedConfig: modifiedDefault(func(in *model.Config) { 119 }), 120 }, 121 } 122 for _, testCase := range tests { 123 t.Run(testCase.name, func(t *testing.T) { 124 require.Equal(t, testCase.expectedConfig, applyEnvironmentMap(testCase.inputConfig, testCase.env)) 125 }) 126 } 127 }