github.com/demisto/mattermost-server@v4.9.0-rc3+incompatible/model/config_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package model 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestConfigDefaultFileSettingsDirectory(t *testing.T) { 13 c1 := Config{} 14 c1.SetDefaults() 15 16 if c1.FileSettings.Directory != "./data/" { 17 t.Fatal("FileSettings.Directory should default to './data/'") 18 } 19 } 20 21 func TestConfigDefaultEmailNotificationContentsType(t *testing.T) { 22 c1 := Config{} 23 c1.SetDefaults() 24 25 if *c1.EmailSettings.EmailNotificationContentsType != EMAIL_NOTIFICATION_CONTENTS_FULL { 26 t.Fatal("EmailSettings.EmailNotificationContentsType should default to 'full'") 27 } 28 } 29 30 func TestConfigDefaultFileSettingsS3SSE(t *testing.T) { 31 c1 := Config{} 32 c1.SetDefaults() 33 34 if *c1.FileSettings.AmazonS3SSE { 35 t.Fatal("FileSettings.AmazonS3SSE should default to false") 36 } 37 } 38 39 func TestConfigDefaultServiceSettingsExperimentalGroupUnreadChannels(t *testing.T) { 40 c1 := Config{} 41 c1.SetDefaults() 42 43 if *c1.ServiceSettings.ExperimentalGroupUnreadChannels != GROUP_UNREAD_CHANNELS_DISABLED { 44 t.Fatal("ServiceSettings.ExperimentalGroupUnreadChannels should default to 'disabled'") 45 } 46 47 // This setting was briefly a boolean, so ensure that those values still work as expected 48 c1 = Config{ 49 ServiceSettings: ServiceSettings{ 50 ExperimentalGroupUnreadChannels: NewString("1"), 51 }, 52 } 53 c1.SetDefaults() 54 55 if *c1.ServiceSettings.ExperimentalGroupUnreadChannels != GROUP_UNREAD_CHANNELS_DEFAULT_ON { 56 t.Fatal("ServiceSettings.ExperimentalGroupUnreadChannels should set true to 'default on'") 57 } 58 59 c1 = Config{ 60 ServiceSettings: ServiceSettings{ 61 ExperimentalGroupUnreadChannels: NewString("0"), 62 }, 63 } 64 c1.SetDefaults() 65 66 if *c1.ServiceSettings.ExperimentalGroupUnreadChannels != GROUP_UNREAD_CHANNELS_DISABLED { 67 t.Fatal("ServiceSettings.ExperimentalGroupUnreadChannels should set false to 'disabled'") 68 } 69 } 70 71 func TestMessageExportSettingsIsValidEnableExportNotSet(t *testing.T) { 72 fs := &FileSettings{} 73 mes := &MessageExportSettings{} 74 75 // should fail fast because mes.EnableExport is not set 76 require.Error(t, mes.isValid(*fs)) 77 } 78 79 func TestMessageExportSettingsIsValidEnableExportFalse(t *testing.T) { 80 fs := &FileSettings{} 81 mes := &MessageExportSettings{ 82 EnableExport: NewBool(false), 83 } 84 85 // should fail fast because message export isn't enabled 86 require.Nil(t, mes.isValid(*fs)) 87 } 88 89 func TestMessageExportSettingsIsValidExportFromTimestampInvalid(t *testing.T) { 90 fs := &FileSettings{} 91 mes := &MessageExportSettings{ 92 EnableExport: NewBool(true), 93 } 94 95 // should fail fast because export from timestamp isn't set 96 require.Error(t, mes.isValid(*fs)) 97 98 mes.ExportFromTimestamp = NewInt64(-1) 99 100 // should fail fast because export from timestamp isn't valid 101 require.Error(t, mes.isValid(*fs)) 102 103 mes.ExportFromTimestamp = NewInt64(GetMillis() + 10000) 104 105 // should fail fast because export from timestamp is greater than current time 106 require.Error(t, mes.isValid(*fs)) 107 } 108 109 func TestMessageExportSettingsIsValidDailyRunTimeInvalid(t *testing.T) { 110 fs := &FileSettings{} 111 mes := &MessageExportSettings{ 112 EnableExport: NewBool(true), 113 ExportFromTimestamp: NewInt64(0), 114 } 115 116 // should fail fast because daily runtime isn't set 117 require.Error(t, mes.isValid(*fs)) 118 119 mes.DailyRunTime = NewString("33:33:33") 120 121 // should fail fast because daily runtime is invalid format 122 require.Error(t, mes.isValid(*fs)) 123 } 124 125 func TestMessageExportSettingsIsValidBatchSizeInvalid(t *testing.T) { 126 fs := &FileSettings{ 127 DriverName: NewString("foo"), // bypass file location check 128 } 129 mes := &MessageExportSettings{ 130 EnableExport: NewBool(true), 131 ExportFromTimestamp: NewInt64(0), 132 DailyRunTime: NewString("15:04"), 133 } 134 135 // should fail fast because batch size isn't set 136 require.Error(t, mes.isValid(*fs)) 137 } 138 139 func TestMessageExportSettingsIsValidExportFormatInvalid(t *testing.T) { 140 fs := &FileSettings{ 141 DriverName: NewString("foo"), // bypass file location check 142 } 143 mes := &MessageExportSettings{ 144 EnableExport: NewBool(true), 145 ExportFromTimestamp: NewInt64(0), 146 DailyRunTime: NewString("15:04"), 147 BatchSize: NewInt(100), 148 } 149 150 // should fail fast because export format isn't set 151 require.Error(t, mes.isValid(*fs)) 152 } 153 154 func TestMessageExportSettingsIsValidGlobalRelayEmailAddressInvalid(t *testing.T) { 155 fs := &FileSettings{ 156 DriverName: NewString("foo"), // bypass file location check 157 } 158 mes := &MessageExportSettings{ 159 EnableExport: NewBool(true), 160 ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), 161 ExportFromTimestamp: NewInt64(0), 162 DailyRunTime: NewString("15:04"), 163 BatchSize: NewInt(100), 164 } 165 166 // should fail fast because global relay email address isn't set 167 require.Error(t, mes.isValid(*fs)) 168 } 169 170 func TestMessageExportSettingsIsValidActiance(t *testing.T) { 171 fs := &FileSettings{ 172 DriverName: NewString("foo"), // bypass file location check 173 } 174 mes := &MessageExportSettings{ 175 EnableExport: NewBool(true), 176 ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_ACTIANCE), 177 ExportFromTimestamp: NewInt64(0), 178 DailyRunTime: NewString("15:04"), 179 BatchSize: NewInt(100), 180 } 181 182 // should pass because everything is valid 183 require.Nil(t, mes.isValid(*fs)) 184 } 185 186 func TestMessageExportSettingsIsValidGlobalRelaySettingsMissing(t *testing.T) { 187 fs := &FileSettings{ 188 DriverName: NewString("foo"), // bypass file location check 189 } 190 mes := &MessageExportSettings{ 191 EnableExport: NewBool(true), 192 ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), 193 ExportFromTimestamp: NewInt64(0), 194 DailyRunTime: NewString("15:04"), 195 BatchSize: NewInt(100), 196 } 197 198 // should fail because globalrelay settings are missing 199 require.Error(t, mes.isValid(*fs)) 200 } 201 202 func TestMessageExportSettingsIsValidGlobalRelaySettingsInvalidCustomerType(t *testing.T) { 203 fs := &FileSettings{ 204 DriverName: NewString("foo"), // bypass file location check 205 } 206 mes := &MessageExportSettings{ 207 EnableExport: NewBool(true), 208 ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), 209 ExportFromTimestamp: NewInt64(0), 210 DailyRunTime: NewString("15:04"), 211 BatchSize: NewInt(100), 212 GlobalRelaySettings: &GlobalRelayMessageExportSettings{ 213 CustomerType: NewString("Invalid"), 214 EmailAddress: NewString("valid@mattermost.com"), 215 SmtpUsername: NewString("SomeUsername"), 216 SmtpPassword: NewString("SomePassword"), 217 }, 218 } 219 220 // should fail because customer type is invalid 221 require.Error(t, mes.isValid(*fs)) 222 } 223 224 // func TestMessageExportSettingsIsValidGlobalRelaySettingsInvalidEmailAddress(t *testing.T) { 225 func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) { 226 fs := &FileSettings{ 227 DriverName: NewString("foo"), // bypass file location check 228 } 229 tests := []struct { 230 name string 231 value *GlobalRelayMessageExportSettings 232 success bool 233 }{ 234 { 235 "Invalid email address", 236 &GlobalRelayMessageExportSettings{ 237 CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A9), 238 EmailAddress: NewString("invalidEmailAddress"), 239 SmtpUsername: NewString("SomeUsername"), 240 SmtpPassword: NewString("SomePassword"), 241 }, 242 false, 243 }, 244 { 245 "Missing smtp username", 246 &GlobalRelayMessageExportSettings{ 247 CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A10), 248 EmailAddress: NewString("valid@mattermost.com"), 249 SmtpPassword: NewString("SomePassword"), 250 }, 251 false, 252 }, 253 { 254 "Invalid smtp username", 255 &GlobalRelayMessageExportSettings{ 256 CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A10), 257 EmailAddress: NewString("valid@mattermost.com"), 258 SmtpUsername: NewString(""), 259 SmtpPassword: NewString("SomePassword"), 260 }, 261 false, 262 }, 263 { 264 "Invalid smtp password", 265 &GlobalRelayMessageExportSettings{ 266 CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A10), 267 EmailAddress: NewString("valid@mattermost.com"), 268 SmtpUsername: NewString("SomeUsername"), 269 SmtpPassword: NewString(""), 270 }, 271 false, 272 }, 273 { 274 "Valid data", 275 &GlobalRelayMessageExportSettings{ 276 CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A9), 277 EmailAddress: NewString("valid@mattermost.com"), 278 SmtpUsername: NewString("SomeUsername"), 279 SmtpPassword: NewString("SomePassword"), 280 }, 281 true, 282 }, 283 } 284 285 for _, tt := range tests { 286 t.Run(tt.name, func(t *testing.T) { 287 mes := &MessageExportSettings{ 288 EnableExport: NewBool(true), 289 ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), 290 ExportFromTimestamp: NewInt64(0), 291 DailyRunTime: NewString("15:04"), 292 BatchSize: NewInt(100), 293 GlobalRelaySettings: tt.value, 294 } 295 296 if tt.success { 297 require.Nil(t, mes.isValid(*fs)) 298 } else { 299 require.Error(t, mes.isValid(*fs)) 300 } 301 }) 302 } 303 } 304 305 func TestMessageExportSetDefaults(t *testing.T) { 306 mes := &MessageExportSettings{} 307 mes.SetDefaults() 308 309 require.False(t, *mes.EnableExport) 310 require.Equal(t, "01:00", *mes.DailyRunTime) 311 require.Equal(t, int64(0), *mes.ExportFromTimestamp) 312 require.Equal(t, 10000, *mes.BatchSize) 313 require.Equal(t, COMPLIANCE_EXPORT_TYPE_ACTIANCE, *mes.ExportFormat) 314 } 315 316 func TestMessageExportSetDefaultsExportEnabledExportFromTimestampNil(t *testing.T) { 317 mes := &MessageExportSettings{ 318 EnableExport: NewBool(true), 319 } 320 mes.SetDefaults() 321 322 require.True(t, *mes.EnableExport) 323 require.Equal(t, "01:00", *mes.DailyRunTime) 324 require.NotEqual(t, int64(0), *mes.ExportFromTimestamp) 325 require.True(t, *mes.ExportFromTimestamp <= GetMillis()) 326 require.Equal(t, 10000, *mes.BatchSize) 327 } 328 329 func TestMessageExportSetDefaultsExportEnabledExportFromTimestampZero(t *testing.T) { 330 mes := &MessageExportSettings{ 331 EnableExport: NewBool(true), 332 ExportFromTimestamp: NewInt64(0), 333 } 334 mes.SetDefaults() 335 336 require.True(t, *mes.EnableExport) 337 require.Equal(t, "01:00", *mes.DailyRunTime) 338 require.NotEqual(t, int64(0), *mes.ExportFromTimestamp) 339 require.True(t, *mes.ExportFromTimestamp <= GetMillis()) 340 require.Equal(t, 10000, *mes.BatchSize) 341 } 342 343 func TestMessageExportSetDefaultsExportEnabledExportFromTimestampNonZero(t *testing.T) { 344 mes := &MessageExportSettings{ 345 EnableExport: NewBool(true), 346 ExportFromTimestamp: NewInt64(12345), 347 } 348 mes.SetDefaults() 349 350 require.True(t, *mes.EnableExport) 351 require.Equal(t, "01:00", *mes.DailyRunTime) 352 require.Equal(t, int64(12345), *mes.ExportFromTimestamp) 353 require.Equal(t, 10000, *mes.BatchSize) 354 } 355 356 func TestMessageExportSetDefaultsExportDisabledExportFromTimestampNil(t *testing.T) { 357 mes := &MessageExportSettings{ 358 EnableExport: NewBool(false), 359 } 360 mes.SetDefaults() 361 362 require.False(t, *mes.EnableExport) 363 require.Equal(t, "01:00", *mes.DailyRunTime) 364 require.Equal(t, int64(0), *mes.ExportFromTimestamp) 365 require.Equal(t, 10000, *mes.BatchSize) 366 } 367 368 func TestMessageExportSetDefaultsExportDisabledExportFromTimestampZero(t *testing.T) { 369 mes := &MessageExportSettings{ 370 EnableExport: NewBool(false), 371 ExportFromTimestamp: NewInt64(0), 372 } 373 mes.SetDefaults() 374 375 require.False(t, *mes.EnableExport) 376 require.Equal(t, "01:00", *mes.DailyRunTime) 377 require.Equal(t, int64(0), *mes.ExportFromTimestamp) 378 require.Equal(t, 10000, *mes.BatchSize) 379 } 380 381 func TestMessageExportSetDefaultsExportDisabledExportFromTimestampNonZero(t *testing.T) { 382 mes := &MessageExportSettings{ 383 EnableExport: NewBool(false), 384 ExportFromTimestamp: NewInt64(12345), 385 } 386 mes.SetDefaults() 387 388 require.False(t, *mes.EnableExport) 389 require.Equal(t, "01:00", *mes.DailyRunTime) 390 require.Equal(t, int64(0), *mes.ExportFromTimestamp) 391 require.Equal(t, 10000, *mes.BatchSize) 392 }