diff --git a/api4/channel_test.go b/api4/channel_test.go index 2648359982..e36b6a56f4 100644 --- a/api4/channel_test.go +++ b/api4/channel_test.go @@ -2609,9 +2609,16 @@ func TestAutocompleteChannels(t *testing.T) { Type: model.CHANNEL_PRIVATE, TeamId: th.BasicTeam.Id, }) + tower, _ := th.Client.CreateChannel(&model.Channel{ + DisplayName: "Tower", + Name: "tower", + Type: model.CHANNEL_OPEN, + TeamId: th.BasicTeam.Id, + }) utils.EnableDebugLogForTest() defer func() { th.Client.DeleteChannel(ptown.Id) + th.Client.DeleteChannel(tower.Id) }() for _, tc := range []struct { @@ -2626,21 +2633,21 @@ func TestAutocompleteChannels(t *testing.T) { th.BasicTeam.Id, "town", []string{"town-square"}, - []string{"off-topic", "town"}, + []string{"off-topic", "town", "tower"}, }, { "Basic off-topic", th.BasicTeam.Id, "off-to", []string{"off-topic"}, - []string{"town-square", "town"}, + []string{"town-square", "town", "tower"}, }, { "Basic town square and off topic", th.BasicTeam.Id, - "to", - []string{"off-topic", "town-square"}, - []string{"town"}, + "tow", + []string{"town-square", "tower"}, + []string{"off-topic", "town"}, }, } { t.Run(tc.description, func(t *testing.T) { @@ -2740,11 +2747,11 @@ func TestAutocompleteChannelsForSearch(t *testing.T) { []string{"town-square", "town", "townpriv"}, }, { - "Basic town square and off topic", + "Basic town square and townpriv", th.BasicTeam.Id, - "to", - []string{"off-topic", "town-square", "townpriv"}, - []string{"town"}, + "tow", + []string{"town-square", "townpriv"}, + []string{"off-topic", "town"}, }, { "Direct and group messages", diff --git a/build/docker-compose.common.yml b/build/docker-compose.common.yml index e6acef4eb3..883f27548d 100644 --- a/build/docker-compose.common.yml +++ b/build/docker-compose.common.yml @@ -20,6 +20,9 @@ services: POSTGRES_USER: mmuser POSTGRES_PASSWORD: mostest POSTGRES_DB: mattermost_test + command: postgres -c 'config_file=/etc/postgresql/postgresql.conf' + volumes: + - "./docker/postgres.conf:/etc/postgresql/postgresql.conf" minio: image: "minio/minio:RELEASE.2019-10-11T00-38-09Z" command: "server /data" diff --git a/build/docker/postgres.conf b/build/docker/postgres.conf new file mode 100644 index 0000000000..99fe8cd7df --- /dev/null +++ b/build/docker/postgres.conf @@ -0,0 +1,3 @@ +listen_addresses = '*' +fsync = off +full_page_writes = off diff --git a/cmd/mattermost/commands/config_test.go b/cmd/mattermost/commands/config_test.go index 2ad49529ca..56b1ce7f7b 100644 --- a/cmd/mattermost/commands/config_test.go +++ b/cmd/mattermost/commands/config_test.go @@ -5,7 +5,6 @@ package commands import ( "encoding/json" - "fmt" "io/ioutil" "os" "reflect" @@ -81,6 +80,13 @@ type TestPluginSettings struct { SignaturePublicKeyFiles []string } +func getDsn(driver string, source string) string { + if driver == model.DATABASE_DRIVER_MYSQL { + return driver + "://" + source + } + return source +} + func TestConfigValidate(t *testing.T) { th := Setup() defer th.TearDown() @@ -533,7 +539,7 @@ func TestConfigMigrate(t *testing.T) { defer th.TearDown() sqlSettings := mainHelper.GetSQLSettings() - sqlDSN := fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource) + sqlDSN := getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource) fileDSN := "config.json" ds, err := config.NewStore(sqlDSN, false) diff --git a/config/database.go b/config/database.go index f3dc280254..cfb42e0319 100644 --- a/config/database.go +++ b/config/database.go @@ -273,7 +273,7 @@ func (ds *DatabaseStore) GetFile(name string) ([]byte, error) { } var data []byte - row := ds.db.QueryRowx(query, args...) + row := ds.db.QueryRowx(ds.db.Rebind(query), args...) if err = row.Scan(&data); err != nil { return nil, errors.Wrapf(err, "failed to scan data from row for %s", name) } @@ -324,8 +324,8 @@ func (ds *DatabaseStore) HasFile(name string) (bool, error) { return false, err } - var count int - row := ds.db.QueryRowx(query, args...) + var count int64 + row := ds.db.QueryRowx(ds.db.Rebind(query), args...) if err = row.Scan(&count); err != nil { return false, errors.Wrapf(err, "failed to scan count of rows for %s", name) } diff --git a/config/database_test.go b/config/database_test.go index 472efcc394..0eda063157 100644 --- a/config/database_test.go +++ b/config/database_test.go @@ -19,6 +19,13 @@ import ( "github.com/mattermost/mattermost-server/v5/model" ) +func getDsn(driver string, source string) string { + if driver == model.DATABASE_DRIVER_MYSQL { + return driver + "://" + source + } + return source +} + func setupConfigDatabase(t *testing.T, cfg *model.Config, files map[string][]byte) (string, func()) { t.Helper() os.Clearenv() @@ -60,6 +67,19 @@ func setupConfigDatabase(t *testing.T, cfg *model.Config, files map[string][]byt func getActualDatabaseConfig(t *testing.T) (string, *model.Config) { t.Helper() + if *mainHelper.GetSQLSettings().DriverName == "postgres" { + var actual struct { + ID string `db:"id"` + Value []byte `db:"value"` + } + db := sqlx.NewDb(mainHelper.GetSQLSupplier().GetMaster().Db, *mainHelper.GetSQLSettings().DriverName) + err := db.Get(&actual, "SELECT Id, Value FROM Configurations WHERE Active") + require.NoError(t, err) + + actualCfg, _, err := config.UnmarshalConfig(bytes.NewReader(actual.Value), false) + require.Nil(t, err) + return actual.ID, actualCfg + } var actual struct { ID string `db:"Id"` Value []byte `db:"Value"` @@ -70,7 +90,6 @@ func getActualDatabaseConfig(t *testing.T) (string, *model.Config) { actualCfg, _, err := config.UnmarshalConfig(bytes.NewReader(actual.Value), false) require.Nil(t, err) - return actual.ID, actualCfg } @@ -96,7 +115,7 @@ func TestDatabaseStoreNew(t *testing.T) { sqlSettings := mainHelper.GetSQLSettings() t.Run("no existing configuration - initialization required", func(t *testing.T) { - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -107,7 +126,7 @@ func TestDatabaseStoreNew(t *testing.T) { _, tearDown := setupConfigDatabase(t, testConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -119,7 +138,7 @@ func TestDatabaseStoreNew(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -148,7 +167,7 @@ func TestDatabaseStoreGet(t *testing.T) { defer tearDown() sqlSettings := mainHelper.GetSQLSettings() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -174,7 +193,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { defer tearDown() sqlSettings := mainHelper.GetSQLSettings() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -184,7 +203,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://override") defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL") - ds, err = config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err = config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -197,7 +216,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { defer tearDown() sqlSettings := mainHelper.GetSQLSettings() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -207,7 +226,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { os.Setenv("MM_PLUGINSETTINGS_ENABLEUPLOADS", "true") defer os.Unsetenv("MM_PLUGINSETTINGS_ENABLEUPLOADS") - ds, err = config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err = config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -220,7 +239,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { defer tearDown() sqlSettings := mainHelper.GetSQLSettings() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -230,7 +249,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { os.Setenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM", "3000") defer os.Unsetenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM") - ds, err = config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err = config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -243,7 +262,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { defer tearDown() sqlSettings := mainHelper.GetSQLSettings() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -253,7 +272,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { os.Setenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE", "123456") defer os.Unsetenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE") - ds, err = config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err = config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -266,7 +285,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { defer tearDown() sqlSettings := mainHelper.GetSQLSettings() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -276,7 +295,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db") defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS") - ds, err = config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err = config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -292,7 +311,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { defer tearDown() sqlSettings := mainHelper.GetSQLSettings() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -302,7 +321,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) { os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db user:pwd@db2:5433/test-db2 user:pwd@db3:5434/test-db3") defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS") - ds, err = config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err = config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -320,7 +339,7 @@ func TestDatabaseStoreSet(t *testing.T) { _, tearDown := setupConfigDatabase(t, emptyConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -334,7 +353,7 @@ func TestDatabaseStoreSet(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -353,7 +372,7 @@ func TestDatabaseStoreSet(t *testing.T) { _, tearDown := setupConfigDatabase(t, ldapConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -373,7 +392,7 @@ func TestDatabaseStoreSet(t *testing.T) { _, tearDown := setupConfigDatabase(t, emptyConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -392,7 +411,7 @@ func TestDatabaseStoreSet(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -411,7 +430,7 @@ func TestDatabaseStoreSet(t *testing.T) { _, tearDown := setupConfigDatabase(t, readOnlyConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -431,7 +450,7 @@ func TestDatabaseStoreSet(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -454,7 +473,7 @@ func TestDatabaseStoreSet(t *testing.T) { _, tearDown := setupConfigDatabase(t, emptyConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -472,10 +491,13 @@ func TestDatabaseStoreSet(t *testing.T) { }) t.Run("persist failed: too long", func(t *testing.T) { + if *mainHelper.Settings.DriverName == "postgres" { + t.Skip("No limit for postgres") + } _, tearDown := setupConfigDatabase(t, emptyConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -492,7 +514,7 @@ func TestDatabaseStoreSet(t *testing.T) { activeID, tearDown := setupConfigDatabase(t, emptyConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -524,7 +546,7 @@ func TestDatabaseStoreLoad(t *testing.T) { _, tearDown := setupConfigDatabase(t, emptyConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -539,7 +561,7 @@ func TestDatabaseStoreLoad(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -561,7 +583,7 @@ func TestDatabaseStoreLoad(t *testing.T) { os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://overridePersistEnvVariables") defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL") - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -582,7 +604,7 @@ func TestDatabaseStoreLoad(t *testing.T) { os.Setenv("MM_PLUGINSETTINGS_ENABLEUPLOADS", "true") defer os.Unsetenv("MM_PLUGINSETTINGS_ENABLEUPLOADS") - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -605,7 +627,7 @@ func TestDatabaseStoreLoad(t *testing.T) { os.Setenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM", "3000") defer os.Unsetenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM") - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -628,7 +650,7 @@ func TestDatabaseStoreLoad(t *testing.T) { os.Setenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE", "123456") defer os.Unsetenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE") - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -651,7 +673,7 @@ func TestDatabaseStoreLoad(t *testing.T) { os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db") defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS") - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -676,7 +698,7 @@ func TestDatabaseStoreLoad(t *testing.T) { os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db") defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS") - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -696,7 +718,7 @@ func TestDatabaseStoreLoad(t *testing.T) { _, tearDown := setupConfigDatabase(t, emptyConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -723,7 +745,7 @@ func TestDatabaseStoreLoad(t *testing.T) { _, tearDown := setupConfigDatabase(t, fixesRequiredConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -737,7 +759,7 @@ func TestDatabaseStoreLoad(t *testing.T) { _, tearDown := setupConfigDatabase(t, emptyConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -761,7 +783,7 @@ func TestDatabaseGetFile(t *testing.T) { }) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -792,7 +814,7 @@ func TestDatabaseSetFile(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -818,14 +840,20 @@ func TestDatabaseSetFile(t *testing.T) { }) t.Run("max length", func(t *testing.T) { - longFile := bytes.Repeat([]byte{0x0}, config.MaxWriteLength) + if *mainHelper.Settings.DriverName == "postgres" { + t.Skip("No limit for postgres") + } + longFile := bytes.Repeat([]byte("a"), config.MaxWriteLength) err := ds.SetFile("toolong", longFile) require.NoError(t, err) }) t.Run("too long", func(t *testing.T) { - longFile := bytes.Repeat([]byte{0x0}, config.MaxWriteLength+1) + if *mainHelper.Settings.DriverName == "postgres" { + t.Skip("No limit for postgres") + } + longFile := bytes.Repeat([]byte("a"), config.MaxWriteLength+1) err := ds.SetFile("toolong", longFile) if assert.Error(t, err) { @@ -839,7 +867,7 @@ func TestDatabaseHasFile(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -852,7 +880,7 @@ func TestDatabaseHasFile(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -870,7 +898,7 @@ func TestDatabaseHasFile(t *testing.T) { }) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -883,7 +911,7 @@ func TestDatabaseHasFile(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -898,7 +926,7 @@ func TestDatabaseRemoveFile(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -910,7 +938,7 @@ func TestDatabaseRemoveFile(t *testing.T) { _, tearDown := setupConfigDatabase(t, minimalConfig, nil) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -934,7 +962,7 @@ func TestDatabaseRemoveFile(t *testing.T) { }) defer tearDown() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) require.NoError(t, err) defer ds.Close() @@ -955,13 +983,20 @@ func TestDatabaseStoreString(t *testing.T) { defer tearDown() sqlSettings := mainHelper.GetSQLSettings() - ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource)) + ds, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) require.NotNil(t, ds) defer ds.Close() - maskedDSN := ds.String() - assert.True(t, strings.HasPrefix(maskedDSN, "mysql://")) - assert.True(t, strings.Contains(maskedDSN, "mmuser")) - assert.False(t, strings.Contains(maskedDSN, "mostest")) + if *mainHelper.GetSQLSettings().DriverName == "postgres" { + maskedDSN := ds.String() + assert.True(t, strings.HasPrefix(maskedDSN, "postgres://")) + assert.True(t, strings.Contains(maskedDSN, "mmuser")) + assert.False(t, strings.Contains(maskedDSN, "mostest")) + } else { + maskedDSN := ds.String() + assert.True(t, strings.HasPrefix(maskedDSN, "mysql://")) + assert.True(t, strings.Contains(maskedDSN, "mmuser")) + assert.False(t, strings.Contains(maskedDSN, "mostest")) + } } diff --git a/config/main_test.go b/config/main_test.go index e72bee7f5d..a7cf254b8a 100644 --- a/config/main_test.go +++ b/config/main_test.go @@ -8,6 +8,7 @@ import ( "testing" "github.com/go-sql-driver/mysql" + "github.com/lib/pq" "github.com/mattermost/mattermost-server/v5/model" "github.com/mattermost/mattermost-server/v5/testlib" "github.com/stretchr/testify/require" @@ -47,6 +48,14 @@ func truncateTable(t *testing.T, table string) { case model.DATABASE_DRIVER_POSTGRES: _, err := sqlSupplier.GetMaster().Db.Exec(fmt.Sprintf("TRUNCATE TABLE %s", table)) + if err != nil { + if driverErr, ok := err.(*pq.Error); ok { + // Ignore if the Configurations table does not exist. + if driverErr.Code == "42P01" { + return + } + } + } require.NoError(t, err) default: diff --git a/config/migrate_test.go b/config/migrate_test.go index 6568b0d7c5..21afe3ef3f 100644 --- a/config/migrate_test.go +++ b/config/migrate_test.go @@ -4,25 +4,34 @@ package config import ( - "fmt" "testing" - "github.com/mattermost/mattermost-server/v5/store/storetest" + "github.com/mattermost/mattermost-server/v5/model" "github.com/mattermost/mattermost-server/v5/testlib" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) +func getDsn(driver string, source string) string { + if driver == model.DATABASE_DRIVER_MYSQL { + return driver + "://" + source + } + return source +} + func TestMigrateDatabaseToFile(t *testing.T) { helper := testlib.NewMainHelper() sqlSettings := helper.GetSQLSettings() - defer storetest.CleanupSqlSettings(sqlSettings) - sqlDSN := fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource) fileDSN := "config.json" files := []string{"IdpCertificateFile", "PublicCertificateFile", "PrivateKeyFile"} - data := make([]byte, 5) - ds, err := NewDatabaseStore(sqlDSN) + data := []byte("aaaaa") + ds, err := NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) defer ds.Close() + defer func() { + defaultCfg := &model.Config{} + defaultCfg.SetDefaults() + ds.Set(defaultCfg) + }() require.NoError(t, err) config := ds.Get() config.SamlSettings.IdpCertificateFile = &files[0] @@ -35,7 +44,7 @@ func TestMigrateDatabaseToFile(t *testing.T) { err = ds.SetFile(file, data) require.NoError(t, err) } - err = Migrate(sqlDSN, fileDSN) + err = Migrate(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource), fileDSN) require.NoError(t, err) fs, err := NewFileStore(fileDSN, false) @@ -55,13 +64,11 @@ func TestMigrateDatabaseToFile(t *testing.T) { func TestMigrateFileToDatabaseWhenFilePathIsNotSpecified(t *testing.T) { helper := testlib.NewMainHelper() sqlSettings := helper.GetSQLSettings() - defer storetest.CleanupSqlSettings(sqlSettings) - sqlDSN := fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource) fileDSN := "config.json" _, err := NewFileStore(fileDSN, true) require.NoError(t, err) - err = Migrate(fileDSN, sqlDSN) + err = Migrate(fileDSN, getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)) require.NoError(t, err) } diff --git a/config/store_test.go b/config/store_test.go index 0e5531b425..a50e615406 100644 --- a/config/store_test.go +++ b/config/store_test.go @@ -4,7 +4,6 @@ package config_test import ( - "fmt" "io/ioutil" "os" "path/filepath" @@ -26,13 +25,13 @@ func TestNewStore(t *testing.T) { require.NoError(t, os.Mkdir(filepath.Join(tempDir, "config"), 0700)) t.Run("database dsn", func(t *testing.T) { - ds, err := config.NewStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource), false) + ds, err := config.NewStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource), false) require.NoError(t, err) ds.Close() }) t.Run("database dsn, watch ignored", func(t *testing.T) { - ds, err := config.NewStore(fmt.Sprintf("%s://%s", *sqlSettings.DriverName, *sqlSettings.DataSource), true) + ds, err := config.NewStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource), true) require.NoError(t, err) ds.Close() }) diff --git a/store/sqlstore/supplier.go b/store/sqlstore/supplier.go index d48285c97f..9ece58efef 100644 --- a/store/sqlstore/supplier.go +++ b/store/sqlstore/supplier.go @@ -913,7 +913,6 @@ func (ss *SqlSupplier) GetAllConns() []*gorp.DbMap { } func (ss *SqlSupplier) Close() { - mlog.Info("Closing SqlStore") ss.master.Db.Close() for _, replica := range ss.replicas { replica.Db.Close() diff --git a/testlib/helper.go b/testlib/helper.go index b2bbbf4cb0..401b16407e 100644 --- a/testlib/helper.go +++ b/testlib/helper.go @@ -95,7 +95,7 @@ func (h *MainHelper) Main(m *testing.M) { func (h *MainHelper) setupStore() { driverName := os.Getenv("MM_SQLSETTINGS_DRIVERNAME") if driverName == "" { - driverName = model.DATABASE_DRIVER_MYSQL + driverName = model.DATABASE_DRIVER_POSTGRES } h.Settings = storetest.MakeSqlSettings(driverName) @@ -116,6 +116,9 @@ func (h *MainHelper) setupResources() { } func (h *MainHelper) Close() error { + if h.SQLSupplier != nil { + h.SQLSupplier.Close() + } if h.Settings != nil { storetest.CleanupSqlSettings(h.Settings) }