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  }