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