github.com/adacta-ru/mattermost-server/v5@v5.31.1/config/migrate_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package config_test 5 6 import ( 7 "io/ioutil" 8 "os" 9 "path" 10 "testing" 11 12 "github.com/adacta-ru/mattermost-server/v5/config" 13 "github.com/adacta-ru/mattermost-server/v5/model" 14 "github.com/stretchr/testify/assert" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func TestMigrate(t *testing.T) { 19 files := []string{ 20 "IdpCertificateFile", 21 "PublicCertificateFile", 22 "PrivateKeyFile", 23 "internal.crt", 24 "internal2.crt", 25 } 26 filesData := make([]string, len(files)) 27 for i := range files { 28 // Generate random data for each file, ensuring that stale data from a past test 29 // won't generate a false positive. 30 filesData[i] = model.NewId() 31 } 32 33 setup := func(t *testing.T) { 34 os.Clearenv() 35 t.Helper() 36 37 tempDir, err := ioutil.TempDir("", "TestMigrate") 38 require.NoError(t, err) 39 t.Cleanup(func() { 40 os.RemoveAll(tempDir) 41 }) 42 43 err = os.Chdir(tempDir) 44 require.NoError(t, err) 45 46 truncateTables(t) 47 } 48 49 setupSource := func(t *testing.T, source *config.Store) { 50 t.Helper() 51 52 cfg := source.Get() 53 cfg.ServiceSettings.SiteURL = sToP("http://example.com") 54 cfg.SamlSettings.IdpCertificateFile = &files[0] 55 cfg.SamlSettings.PublicCertificateFile = &files[1] 56 cfg.SamlSettings.PrivateKeyFile = &files[2] 57 cfg.PluginSettings.SignaturePublicKeyFiles = []string{ 58 files[3], 59 files[4], 60 } 61 cfg.SqlSettings.DataSourceReplicas = []string{ 62 "mysql://mmuser:password@tcp(replicahost:3306)/mattermost", 63 } 64 cfg.SqlSettings.DataSourceSearchReplicas = []string{ 65 "mysql://mmuser:password@tcp(searchreplicahost:3306)/mattermost", 66 } 67 68 _, err := source.Set(cfg) 69 require.NoError(t, err) 70 71 for i, file := range files { 72 err = source.SetFile(file, []byte(filesData[i])) 73 require.NoError(t, err) 74 } 75 } 76 77 assertDestination := func(t *testing.T, destination *config.Store, source *config.Store) { 78 t.Helper() 79 80 for i, file := range files { 81 hasFile, err := destination.HasFile(file) 82 require.NoError(t, err) 83 require.Truef(t, hasFile, "destination missing file %s", file) 84 85 actualData, err := destination.GetFile(file) 86 require.NoError(t, err) 87 assert.Equalf(t, []byte(filesData[i]), actualData, "destination has wrong contents for file %s", file) 88 } 89 90 assert.Equal(t, source.Get(), destination.Get()) 91 } 92 93 t.Run("database to file", func(t *testing.T) { 94 setup(t) 95 96 pwd, err := os.Getwd() 97 require.NoError(t, err) 98 99 sqlSettings := mainHelper.GetSQLSettings() 100 destinationDSN := path.Join(pwd, "config-custom.json") 101 sourceDSN := getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource) 102 103 sourcedb, err := config.NewDatabaseStore(sourceDSN) 104 require.NoError(t, err) 105 source, err := config.NewStoreFromBacking(sourcedb, nil) 106 require.NoError(t, err) 107 defer source.Close() 108 109 setupSource(t, source) 110 err = config.Migrate(sourceDSN, destinationDSN) 111 require.NoError(t, err) 112 113 destinationfile, err := config.NewFileStore(destinationDSN, false) 114 require.NoError(t, err) 115 destination, err := config.NewStoreFromBacking(destinationfile, nil) 116 require.NoError(t, err) 117 defer destination.Close() 118 119 assertDestination(t, destination, source) 120 }) 121 122 t.Run("file to database", func(t *testing.T) { 123 setup(t) 124 125 pwd, err := os.Getwd() 126 require.NoError(t, err) 127 128 sqlSettings := mainHelper.GetSQLSettings() 129 sourceDSN := path.Join(pwd, "config-custom.json") 130 destinationDSN := getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource) 131 132 sourcefile, err := config.NewFileStore(sourceDSN, false) 133 require.NoError(t, err) 134 source, err := config.NewStoreFromBacking(sourcefile, nil) 135 require.NoError(t, err) 136 defer source.Close() 137 138 setupSource(t, source) 139 err = config.Migrate(sourceDSN, destinationDSN) 140 require.NoError(t, err) 141 142 destinationdb, err := config.NewDatabaseStore(destinationDSN) 143 require.NoError(t, err) 144 destination, err := config.NewStoreFromBacking(destinationdb, nil) 145 require.NoError(t, err) 146 defer destination.Close() 147 148 assertDestination(t, destination, source) 149 }) 150 }