github.com/adacta-ru/mattermost-server/v6@v6.0.0/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/adacta-ru/mattermost-server/v6/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  }