github.com/adacta-ru/mattermost-server@v5.11.1+incompatible/config/common_test.go (about)

     1  package config_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/mattermost/mattermost-server/config"
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/mattermost/mattermost-server/model"
    11  )
    12  
    13  var emptyConfig, readOnlyConfig, minimalConfig, invalidConfig, fixesRequiredConfig, ldapConfig, testConfig *model.Config
    14  
    15  func init() {
    16  	emptyConfig = &model.Config{}
    17  	readOnlyConfig = &model.Config{
    18  		ClusterSettings: model.ClusterSettings{
    19  			Enable:         bToP(true),
    20  			ReadOnlyConfig: bToP(true),
    21  		},
    22  	}
    23  	minimalConfig = &model.Config{
    24  		ServiceSettings: model.ServiceSettings{
    25  			SiteURL: sToP("http://minimal"),
    26  		},
    27  		SqlSettings: model.SqlSettings{
    28  			AtRestEncryptKey: sToP("abcdefghijklmnopqrstuvwxyz0123456789"),
    29  		},
    30  		FileSettings: model.FileSettings{
    31  			PublicLinkSalt: sToP("abcdefghijklmnopqrstuvwxyz0123456789"),
    32  		},
    33  		LocalizationSettings: model.LocalizationSettings{
    34  			DefaultServerLocale: sToP("en"),
    35  			DefaultClientLocale: sToP("en"),
    36  		},
    37  	}
    38  	invalidConfig = &model.Config{
    39  		ServiceSettings: model.ServiceSettings{
    40  			SiteURL: sToP("invalid"),
    41  		},
    42  	}
    43  	fixesRequiredConfig = &model.Config{
    44  		ServiceSettings: model.ServiceSettings{
    45  			SiteURL: sToP("http://trailingslash/"),
    46  		},
    47  		SqlSettings: model.SqlSettings{
    48  			AtRestEncryptKey: sToP("abcdefghijklmnopqrstuvwxyz0123456789"),
    49  		},
    50  		FileSettings: model.FileSettings{
    51  			DriverName:     sToP(model.IMAGE_DRIVER_LOCAL),
    52  			Directory:      sToP("/path/to/directory"),
    53  			PublicLinkSalt: sToP("abcdefghijklmnopqrstuvwxyz0123456789"),
    54  		},
    55  		LocalizationSettings: model.LocalizationSettings{
    56  			DefaultServerLocale: sToP("garbage"),
    57  			DefaultClientLocale: sToP("garbage"),
    58  		},
    59  	}
    60  	ldapConfig = &model.Config{
    61  		LdapSettings: model.LdapSettings{
    62  			BindPassword: sToP("password"),
    63  		},
    64  	}
    65  	testConfig = &model.Config{
    66  		ServiceSettings: model.ServiceSettings{
    67  			SiteURL: sToP("http://TestStoreNew"),
    68  		},
    69  	}
    70  }
    71  
    72  func prepareExpectedConfig(t *testing.T, expectedCfg *model.Config) *model.Config {
    73  	// These fields require special initialization for our tests.
    74  	expectedCfg = expectedCfg.Clone()
    75  	expectedCfg.MessageExportSettings.GlobalRelaySettings = &model.GlobalRelayMessageExportSettings{}
    76  	expectedCfg.PluginSettings.Plugins = make(map[string]map[string]interface{})
    77  	expectedCfg.PluginSettings.PluginStates = make(map[string]*model.PluginState)
    78  
    79  	return expectedCfg
    80  }
    81  
    82  func TestMergeConfigs(t *testing.T) {
    83  	t.Run("merge two default configs with different salts/keys", func(t *testing.T) {
    84  		base, err := config.NewMemoryStore()
    85  		require.NoError(t, err)
    86  		patch, err := config.NewMemoryStore()
    87  		require.NoError(t, err)
    88  
    89  		merged, err := config.Merge(base.Get(), patch.Get(), nil)
    90  		require.NoError(t, err)
    91  
    92  		assert.Equal(t, patch.Get(), merged)
    93  	})
    94  	t.Run("merge identical configs", func(t *testing.T) {
    95  		base, err := config.NewMemoryStore()
    96  		require.NoError(t, err)
    97  		patch := base.Get().Clone()
    98  
    99  		merged, err := config.Merge(base.Get(), patch, nil)
   100  		require.NoError(t, err)
   101  
   102  		assert.Equal(t, base.Get(), merged)
   103  		assert.Equal(t, patch, merged)
   104  	})
   105  	t.Run("merge configs with a different setting", func(t *testing.T) {
   106  		base, err := config.NewMemoryStore()
   107  		require.NoError(t, err)
   108  		patch := base.Get().Clone()
   109  		patch.ServiceSettings.SiteURL = newString("http://newhost.ca")
   110  
   111  		merged, err := config.Merge(base.Get(), patch, nil)
   112  		require.NoError(t, err)
   113  
   114  		assert.NotEqual(t, base.Get(), merged)
   115  		assert.Equal(t, patch, merged)
   116  	})
   117  	t.Run("merge default config with changes from a mostly nil patch", func(t *testing.T) {
   118  		base, err := config.NewMemoryStore()
   119  		require.NoError(t, err)
   120  		patch := &model.Config{}
   121  		patch.ServiceSettings.SiteURL = newString("http://newhost.ca")
   122  		patch.GoogleSettings.Enable = newBool(true)
   123  
   124  		expected := base.Get().Clone()
   125  		expected.ServiceSettings.SiteURL = newString("http://newhost.ca")
   126  		expected.GoogleSettings.Enable = newBool(true)
   127  
   128  		merged, err := config.Merge(base.Get(), patch, nil)
   129  		require.NoError(t, err)
   130  
   131  		assert.NotEqual(t, base.Get(), merged)
   132  		assert.NotEqual(t, patch, merged)
   133  		assert.Equal(t, expected, merged)
   134  	})
   135  }
   136  
   137  func newBool(b bool) *bool       { return &b }
   138  func newString(s string) *string { return &s }