github.com/crspeller/mattermost-server@v0.0.0-20190328001957-a200beb3d111/config/common_test.go (about) 1 package config_test 2 3 import ( 4 "testing" 5 6 "github.com/crspeller/mattermost-server/config" 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 10 "github.com/crspeller/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 }