github.com/keys-pub/mattermost-server@v4.10.10+incompatible/utils/file_backend_test.go (about) 1 // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package utils 5 6 import ( 7 "fmt" 8 "io/ioutil" 9 "os" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 "github.com/stretchr/testify/suite" 14 15 "github.com/mattermost/mattermost-server/mlog" 16 "github.com/mattermost/mattermost-server/model" 17 ) 18 19 type FileBackendTestSuite struct { 20 suite.Suite 21 22 settings model.FileSettings 23 backend FileBackend 24 } 25 26 func TestLocalFileBackendTestSuite(t *testing.T) { 27 // Setup a global logger to catch tests logging outside of app context 28 // The global logger will be stomped by apps initalizing but that's fine for testing. Ideally this won't happen. 29 mlog.InitGlobalLogger(mlog.NewLogger(&mlog.LoggerConfiguration{ 30 EnableConsole: true, 31 ConsoleJson: true, 32 ConsoleLevel: "error", 33 EnableFile: false, 34 })) 35 36 dir, err := ioutil.TempDir("", "") 37 require.NoError(t, err) 38 defer os.RemoveAll(dir) 39 40 suite.Run(t, &FileBackendTestSuite{ 41 settings: model.FileSettings{ 42 DriverName: model.NewString(model.IMAGE_DRIVER_LOCAL), 43 Directory: dir, 44 }, 45 }) 46 } 47 48 func TestS3FileBackendTestSuite(t *testing.T) { 49 runBackendTest(t, false) 50 } 51 52 func TestS3FileBackendTestSuiteWithEncryption(t *testing.T) { 53 runBackendTest(t, true) 54 } 55 56 func runBackendTest(t *testing.T, encrypt bool) { 57 s3Host := os.Getenv("CI_HOST") 58 if s3Host == "" { 59 s3Host = "dockerhost" 60 } 61 62 s3Port := os.Getenv("CI_MINIO_PORT") 63 if s3Port == "" { 64 s3Port = "9001" 65 } 66 67 s3Endpoint := fmt.Sprintf("%s:%s", s3Host, s3Port) 68 69 suite.Run(t, &FileBackendTestSuite{ 70 settings: model.FileSettings{ 71 DriverName: model.NewString(model.IMAGE_DRIVER_S3), 72 AmazonS3AccessKeyId: model.MINIO_ACCESS_KEY, 73 AmazonS3SecretAccessKey: model.MINIO_SECRET_KEY, 74 AmazonS3Bucket: model.MINIO_BUCKET, 75 AmazonS3Endpoint: s3Endpoint, 76 AmazonS3SSL: model.NewBool(false), 77 AmazonS3SSE: model.NewBool(encrypt), 78 }, 79 }) 80 } 81 82 func (s *FileBackendTestSuite) SetupTest() { 83 TranslationsPreInit() 84 85 backend, err := NewFileBackend(&s.settings, true) 86 require.Nil(s.T(), err) 87 s.backend = backend 88 } 89 90 func (s *FileBackendTestSuite) TestConnection() { 91 s.Nil(s.backend.TestConnection()) 92 } 93 94 func (s *FileBackendTestSuite) TestReadWriteFile() { 95 b := []byte("test") 96 path := "tests/" + model.NewId() 97 98 s.Nil(s.backend.WriteFile(b, path)) 99 defer s.backend.RemoveFile(path) 100 101 read, err := s.backend.ReadFile(path) 102 s.Nil(err) 103 104 readString := string(read) 105 s.EqualValues(readString, "test") 106 } 107 108 func (s *FileBackendTestSuite) TestReadWriteFileImage() { 109 b := []byte("testimage") 110 path := "tests/" + model.NewId() + ".png" 111 112 s.Nil(s.backend.WriteFile(b, path)) 113 defer s.backend.RemoveFile(path) 114 115 read, err := s.backend.ReadFile(path) 116 s.Nil(err) 117 118 readString := string(read) 119 s.EqualValues(readString, "testimage") 120 } 121 122 func (s *FileBackendTestSuite) TestCopyFile() { 123 b := []byte("test") 124 path1 := "tests/" + model.NewId() 125 path2 := "tests/" + model.NewId() 126 127 err := s.backend.WriteFile(b, path1) 128 s.Nil(err) 129 defer s.backend.RemoveFile(path1) 130 131 err = s.backend.CopyFile(path1, path2) 132 s.Nil(err) 133 defer s.backend.RemoveFile(path2) 134 135 _, err = s.backend.ReadFile(path1) 136 s.Nil(err) 137 138 _, err = s.backend.ReadFile(path2) 139 s.Nil(err) 140 } 141 142 func (s *FileBackendTestSuite) TestCopyFileToDirectoryThatDoesntExist() { 143 b := []byte("test") 144 path1 := "tests/" + model.NewId() 145 path2 := "tests/newdirectory/" + model.NewId() 146 147 err := s.backend.WriteFile(b, path1) 148 s.Nil(err) 149 defer s.backend.RemoveFile(path1) 150 151 err = s.backend.CopyFile(path1, path2) 152 s.Nil(err) 153 defer s.backend.RemoveFile(path2) 154 155 _, err = s.backend.ReadFile(path1) 156 s.Nil(err) 157 158 _, err = s.backend.ReadFile(path2) 159 s.Nil(err) 160 } 161 162 func (s *FileBackendTestSuite) TestMoveFile() { 163 b := []byte("test") 164 path1 := "tests/" + model.NewId() 165 path2 := "tests/" + model.NewId() 166 167 s.Nil(s.backend.WriteFile(b, path1)) 168 defer s.backend.RemoveFile(path1) 169 170 s.Nil(s.backend.MoveFile(path1, path2)) 171 defer s.backend.RemoveFile(path2) 172 173 _, err := s.backend.ReadFile(path1) 174 s.Error(err) 175 176 _, err = s.backend.ReadFile(path2) 177 s.Nil(err) 178 } 179 180 func (s *FileBackendTestSuite) TestRemoveFile() { 181 b := []byte("test") 182 path := "tests/" + model.NewId() 183 184 s.Nil(s.backend.WriteFile(b, path)) 185 s.Nil(s.backend.RemoveFile(path)) 186 187 _, err := s.backend.ReadFile(path) 188 s.Error(err) 189 190 s.Nil(s.backend.WriteFile(b, "tests2/foo")) 191 s.Nil(s.backend.WriteFile(b, "tests2/bar")) 192 s.Nil(s.backend.WriteFile(b, "tests2/asdf")) 193 s.Nil(s.backend.RemoveDirectory("tests2")) 194 } 195 196 func (s *FileBackendTestSuite) TestListDirectory() { 197 b := []byte("test") 198 path1 := "19700101/" + model.NewId() 199 path2 := "19800101/" + model.NewId() 200 201 s.Nil(s.backend.WriteFile(b, path1)) 202 defer s.backend.RemoveFile(path1) 203 s.Nil(s.backend.WriteFile(b, path2)) 204 defer s.backend.RemoveFile(path2) 205 206 paths, err := s.backend.ListDirectory("") 207 s.Nil(err) 208 209 found1 := false 210 found2 := false 211 for _, path := range *paths { 212 if path == "19700101" { 213 found1 = true 214 } else if path == "19800101" { 215 found2 = true 216 } 217 } 218 s.True(found1) 219 s.True(found2) 220 } 221 222 func (s *FileBackendTestSuite) TestRemoveDirectory() { 223 b := []byte("test") 224 225 s.Nil(s.backend.WriteFile(b, "tests2/foo")) 226 s.Nil(s.backend.WriteFile(b, "tests2/bar")) 227 s.Nil(s.backend.WriteFile(b, "tests2/aaa")) 228 229 s.Nil(s.backend.RemoveDirectory("tests2")) 230 231 _, err := s.backend.ReadFile("tests2/foo") 232 s.Error(err) 233 _, err = s.backend.ReadFile("tests2/bar") 234 s.Error(err) 235 _, err = s.backend.ReadFile("tests2/asdf") 236 s.Error(err) 237 }